关于我们
书单推荐
新书推荐
|
Istio最佳实战 读者对象:使用或关注 Istio 的开发工程师、运维工程师、架构师等云原生领域从业者
Istio作为服务网格技术最具代表性的产品,历经多年发展已日渐成熟,并受到越来越多开发者的青睐。本书以 Istio 服务网格为核心,内容包括基本概念、核心功能、运维、企业级落地四大部分,从基本的安装部署到功能实践,从底层原理分析到故障排查,从进阶操作到企业级实战,由浅入深地介绍了 Istio 服务网格的各个方面。本书适合正在使用或关注 Istio 的开发工程师、运维工程师、架构师等云原生领域从业者阅读。无论你是服务网格技术的初学者,还是该领域的专家,都能从本书中寻找到有借鉴意义的理论及实践指导。
Christian Posta(@christianposta)是 Solo.io 公司副总裁,全球领域首席技术官。他在云原生社区中以作家、博主、演说家,以及服务网格和云原生生态中各种开源项目的贡献者身份而闻名。Christian 曾在传统企业和大型互联网公司工作过,现在帮助组织创建和部署大规模的、云原生的、弹性的分布式架构。他擅长指导、培训和领导团队在分布式系统概念、微服务、DevOps 和云原生应用程序设计方面取得成功。Rinor Maloku(@rinormaloku)是 Solo.io 公司的工程师。他为采用应用网络解决方案(如服务网格)的客户提供咨询服务。此前,他在 Red Hat 公司工作,在那里,他开发了中间件软件,使研发团队能够确保其服务的高可用性。作为一名自由职业者,他服务了多位 DAX 30 成员,以充分利用云计算技术的潜力。
马若飞,就职于飞维美地(FreeWheel)北京研发中心,担任首席工程师,主要负责微服务架构设计和云原生落地工作。《Istio实战指南》作者,极客时间《Service Mesh实战》专栏作者,《云原生应用架构:微服务开发最佳实践》主要作者,人民邮电出版社IT专业图书专家顾问,ServiceMesher技术社区和云原生社区管理委员会成员。发表、翻译多篇云原生领域前沿技术文章,热衷于技术分享。宋净超(Jimmy Song),Tetrate 布道师,云原生社区创始人,蚂蚁集团前云原生布道师及开源管理负责人,电子工业出版社图书出品人,独立撰稿人。Kubernetes 、Istio 等开源技术的早期使用及推广者。著有《未来架构:从服务化到云原生》《深入理解Istio:云原生服务网格进阶实战》,参与过多部作品的翻译工作。罗广明,字节跳动服务框架团队架构师,云原生社区管理委员会成员、北京站站长。先后在爱立信、百度从事云原生、微服务及开源相关工作,后加入字节跳动,负责 CloudWeGo 等微服务项目开源相关工作。长期关注云原生 & 微服务领域前沿技术、架构演进及标准化进程。
第 1 部分 理解 Istio
1 Istio 服务网格......................................................................... 2 1.1 快速迭代带来的挑战 ...................................................................................... 3 1.1.1 不可靠的云基础设施 .......................................................................... 5 1.1.2 服务通信需要弹性 .............................................................................. 6 1.1.3 实时可观测性 ...................................................................................... 6 1.2 使用应用程序库解决问题 .............................................................................. 7 1.3 基础设施的解决思路 ...................................................................................... 9 1.3.1 应用程序感知服务代理 ...................................................................... 9 1.3.2 认识 Envoy 代理 ................................................................................ 10 1.4 什么是服务网格 ............................................................................................ 11 1.5 Istio 服务网格简介 ........................................................................................ 13 1.5.1 服务网格与企业服务总线的关系 .................................................... 14 1.5.2 服务网格与 API 网关的关系 ............................................................ 16 1.5.3 在非微服务架构中使用 Istio ............................................................ 17 1.5.4 在分布式架构中使用 Istio ................................................................ 18 1.5.5 使用服务网格的缺点 ........................................................................ 19 本章小结 ................................................................................................................. 19 2 Istio 的第一步.......................................................................21 2.1 在 Kubernetes 上部署 Istio ............................................................................ 21 2.1.1 使用 Docker Desktop 来演示样例 .................................................... 22 2.1.2 获取 Istio 发行版 ............................................................................... 22 2.1.3 将 Istio 组件安装到 Kubernetes 中 ................................................... 24 2.2 了解 Istio 控制平面 ....................................................................................... 25 2.2.1 istiod 简介 .......................................................................................... 26 2.2.2 入口网关和出口网关 ........................................................................ 30 2.3 在服务网格中部署你的第一个应用程序 .................................................... 31 2.4 Istio 的可观测性、弹性和流量路由 ............................................................ 36 2.4.1 Istio 与可观测性 ................................................................................ 37 2.4.2 Istio 与弹性 ........................................................................................ 44 2.4.3 Istio 与流量路由 ................................................................................ 46 本章小结 ................................................................................................................. 50 3 Istio 的数据平面 :Envoy .......................................................51 3.1 什么是 Envoy 代理 ........................................................................................ 51 3.1.1 Envoy 的核心功能 ............................................................................. 53 3.1.2 Envoy 与其他代理的比较 ................................................................. 58 3.2 配置 Envoy ..................................................................................................... 58 3.2.1 静态配置 ............................................................................................ 58 3.2.2 动态配置 ............................................................................................ 60 3.3 Envoy 实战 ..................................................................................................... 61 3.3.1 Envoy 的 Admin API ......................................................................... 65 3.3.2 Envoy 的请求重试 ............................................................................. 66 3.4 Envoy 与 Istio 的融合 .................................................................................... 67 本章小结 ................................................................................................................. 69 第 2 部分 保护、观察和控制服务网格中的流量 4 Istio 网关 :将流量导入集群....................................................72 4.1 流量入口概念 ................................................................................................ 73 4.1.1 虚拟 IP 地址 :简化服务访问 ........................................................... 73 4.1.2 虚拟主机 :来自单个接入点的多个服务 ........................................ 75 4.2 Istio 入口网关 ................................................................................................ 75 4.2.1 声明 Gateway 资源 ............................................................................ 77 4.2.2 虚拟服务的网关路由 ........................................................................ 79 4.2.3 流量整体视图 .................................................................................... 82 4.2.4 对比 Istio 入口网关与 Kubernetes Ingress ....................................... 82 4.2.5 对比 Istio 入口网关与 API 网关 ....................................................... 83 4.3 保护网关流量 ................................................................................................ 83 4.3.1 使用 TLS 的 HTTP 流量 ................................................................... 84 4.3.2 将 HTTP 重定向到 HTTPS ............................................................... 88 4.3.3 使用 mTLS 的 HTTP 通信 ................................................................ 89 4.3.4 为多个虚拟主机提供 TLS 服务 ....................................................... 92 4.4 TCP 流量 ........................................................................................................ 93 4.4.1 在 Istio 网关上暴露 TCP 端口 .......................................................... 94 4.4.2 使用 SNI 直通的流量路由 ................................................................ 96 4.5 网关使用建议 ................................................................................................ 99 4.5.1 拆分网关的职能 ................................................................................ 99 4.5.2 网关注入 .......................................................................................... 101 4.5.3 入口网关访问日志 .......................................................................... 102 4.5.4 减少网关配置 .................................................................................. 103 本章小结 ............................................................................................................... 104 5 流量控制 :细粒度流量路由 .................................................. 105 5.1 减少部署新代码带来的风险 ...................................................................... 105 5.2 Istio 的请求路由 .......................................................................................... 109 5.2.1 清理工作空间 .................................................................................. 109 5.2.2 部署 catalog 服务的 v1 版本 ........................................................... 110 5.2.3 部署 catalog 服务的 v2 版本 ............................................................111 5.2.4 将所有流量路由到 catalog 服务的 v1 版本 ................................... 112 5.2.5 将特定请求路由到 v2 版本 ............................................................ 114 5.2.6 在调用链路内部进行路由 .............................................................. 115 5.3 流量迁移 ...................................................................................................... 117 5.4 进一步降低风险 :流量镜像 ...................................................................... 125 5.5 使用 Istio 的服务发现路由到集群外部的服务 ......................................... 127 本章小结 ............................................................................................................... 131 6 弹性 :应对应用程序的网络挑战............................................ 132 6.1 实现应用程序的弹性 .................................................................................. 132 6.1.1 为应用程序库构建弹性能力 .......................................................... 133 6.1.2 使用 Istio 解决弹性问题 ................................................................. 134 6.1.3 实现去中心化的弹性能力 .............................................................. 134 6.2 客户端负载均衡 .......................................................................................... 135 6.2.1 开始使用客户端负载均衡 .............................................................. 136 6.2.2 构建应用场景 .................................................................................. 138 6.2.3 测试不同的客户端负载均衡策略 .................................................. 139 6.2.4 理解负载均衡算法的差异 .............................................................. 144 6.3 位置感知负载均衡 ...................................................................................... 144 6.3.1 位置感知负载均衡实验 .................................................................. 145 6.3.2 利用加权分布对位置感知负载均衡进行更多的控制 .................. 149 6.4 透明的超时和重试 ...................................................................................... 152 6.4.1 超时 .................................................................................................. 152 6.4.2 重试 .................................................................................................. 154 6.4.3 高级重试 .......................................................................................... 160 6.5 Istio 中的熔断 .............................................................................................. 162 6.5.1 利用连接池设置防止服务过慢 ...................................................... 163 6.5.2 利用异常点检测剔除不健康的服务 .............................................. 169 本章小结 ............................................................................................................... 172 7 可观测性 :理解服务的行为 .................................................. 174 7.1 什么是可观测性 .......................................................................................... 175 7.1.1 可观测性与监控 .............................................................................. 175 7.1.2 Istio 如何帮助实现可观测性 .......................................................... 176 7.2 探索 Istio 的指标 ......................................................................................... 176 7.2.1 数据平面指标 .................................................................................. 177 7.2.2 控制平面指标 .................................................................................. 182 7.3 使用 Prometheus 抓取 Istio 指标 ................................................................ 184 7.3.1 安装 Prometheus 和 Grafana ........................................................... 186 7.3.2 配置 Prometheus Operator 抓取 Istio 控制平面和工作负载的指标 ... 187 7.4 自定义 Istio 标准指标 ................................................................................. 190 7.4.1 配置现有的指标 .............................................................................. 193 7.4.2 创建新指标 ...................................................................................... 197 7.4.3 使用新属性分组调用 ...................................................................... 199 本章小结 ............................................................................................................... 201 8 可观测性 :使用 Grafana、Jaeger 和 Kiali 观察网络行为........... 202 8.1 使用 Grafana 观察 Istio 服务和控制平面指标 .......................................... 202 8.1.1 安装 Istio 的 Grafana 仪表板 .......................................................... 203 8.1.2 查看控制平面指标 .......................................................................... 205 8.1.3 查看数据平面指标 .......................................................................... 206 8.2 分布式追踪 .................................................................................................. 206 8.2.1 分布式追踪是怎么工作的 .............................................................. 207 8.2.2 安装分布式追踪系统 ...................................................................... 209 8.2.3 配置 Istio 实现分布式追踪 ............................................................. 210 8.2.4 查看分布式追踪数据 ...................................................................... 213 8.2.5 追踪采样、强制追踪和自定义标签 .............................................. 214 8.3 使用 Kiali 观察服务网格 ............................................................................ 220 8.3.1 安装 Kiali ......................................................................................... 220 8.3.2 结论 .................................................................................................. 225 本章小结 ............................................................................................................... 225 9 确保微服务通信安全............................................................227 9.1 应用程序网络安全需求 .............................................................................. 227 9.1.1 服务间认证 ...................................................................................... 228 9.1.2 终端用户认证 .................................................................................. 228 9.1.3 授权 .................................................................................................. 228 9.1.4 单体和微服务应用的安全比较 ...................................................... 228 9.1.5 Istio 如何实现 SPIFFE .................................................................... 230 9.1.6 Istio 安全简述 .................................................................................. 230 9.2 自动 mTLS ................................................................................................... 231 9.2.1 安装环境 .......................................................................................... 232 9.2.2 理解 Istio 的对等认证 ..................................................................... 233 9.3 授权服务间流量 .......................................................................................... 238 9.3.1 了解 Istio 中的授权 ......................................................................... 239 9.3.2 设置工作区 ...................................................................................... 240 9.3.3 当策略被应用于工作负载时行为的变化 ...................................... 241 9.3.4 默认使用一个全局策略拒绝所有请求 .......................................... 242 9.3.5 允许来自单一命名空间的请求 ...................................................... 243 9.3.6 允许来自非认证的工作负载的请求 .............................................. 244 9.3.7 允许来自单一服务账户的请求 ...................................................... 245 9.3.8 策略的条件匹配 .............................................................................. 246 9.3.9 了解值匹配表达式 .......................................................................... 246 9.3.10 了解评估授权策略的顺序 ............................................................ 248 9.4 终端用户的认证和授权 .............................................................................. 249 9.4.1 什么是 JWT ..................................................................................... 249 9.4.2 入口网关的终端用户认证和授权 .................................................. 251 9.4.3 使用 RequestAuthentication 验证 JWT ........................................... 252 9.5 与自定义的外部授权服务集成 .................................................................. 256 9.5.1 外部授权实践 .................................................................................. 257 9.5.2 配置 ExtAuthz .................................................................................. 258 9.5.3 使用自定义的 AuthorizationPolicy 资源 ........................................ 259 本章小结 ............................................................................................................... 260 第 3 部分 Istio 运维 10 数据平面的故障排查......................................................... 262 10.1 最常见错误 :数据平面配置错误 ............................................................ 263 10.2 识别数据平面的问题 ................................................................................ 265 10.2.1 如何验证数据平面是最新的 ........................................................ 265 10.2.2 使用 Kiali 发现配置错误 .............................................................. 266 10.2.3 通过 istioctl 发现配置错误 ........................................................... 268 10.3 从 Envoy 配置中发现错误 ........................................................................ 270 10.3.1 Envoy 管理界面 ............................................................................. 270 10.3.2 使用 istioctl 查询代理配置 ........................................................... 270 10.3.3 应用程序的故障排查 .................................................................... 276 10.3.4 使用 ksniff 检查网络流量 ............................................................. 282 10.4 通过 Envoy 的遥测能力了解应用程序 .................................................... 285 10.4.1 在 Grafana 中查看请求失败率 ..................................................... 286 10.4.2 使用 Prometheus 查询受影响的 Pod ............................................ 287 本章小结 ............................................................................................................... 288 11 控制平面性能优化 .............................................................290 11.1 控制平面的主要目标 ................................................................................ 290 11.1.1 了解数据平面同步的步骤 ............................................................ 291 11.1.2 决定性能的因素 ............................................................................ 292 11.2 监控控制平面 ............................................................................................ 293 11.3 性能调整 .................................................................................................... 298 11.3.1 设置工作区 .................................................................................... 299 11.3.2 测量优化前的性能 ........................................................................ 299 11.3.3 忽略事件 :使用发现选择器缩小发现的范围 ............................ 303 11.3.4 事件批处理和推送节流特性 ........................................................ 305 11.4 性能优化准则 ............................................................................................ 308 本章小结 ............................................................................................................... 310 第 4 部分 在组织中落地 Istio 12 在组织中扩展 Istio............................................................312 12.1 多集群服务网格的好处 ............................................................................ 312 12.2 多集群服务网格概述 ................................................................................ 313 12.2.1 Istio 多集群部署模型 .................................................................... 314 12.2.2 在多集群部署中如何发现工作负载 ............................................ 316 12.2.3 跨集群的工作负载连接 ................................................................ 317 12.2.4 集群间互信 .................................................................................... 318 12.3 多集群、多网络、多控制平面的服务网格 ............................................ 319 12.3.1 选择多集群部署模型 .................................................................... 320 12.3.2 建立云基础设施 ............................................................................ 320 12.3.3 配置插件式 CA 证书 ..................................................................... 321 12.3.4 在每个集群中安装控制平面 ........................................................ 322 12.3.5 启用跨集群的工作负载发现 ........................................................ 325 12.3.6 设置跨集群连接 ............................................................................ 327 12.3.7 跨集群的负载均衡 ........................................................................ 334 本章小结 ............................................................................................................... 339 13 将虚拟机工作负载纳入网格................................................ 340 13.1 Istio 的虚拟机支持 .................................................................................... 341 13.1.1 简化虚拟机中 sidecar 代理的安装与配置 ................................... 341 13.1.2 虚拟机的高可用性 ........................................................................ 343 13.1.3 网格内服务的 DNS 解析 .............................................................. 346 13.2 设置基础设施 ............................................................................................ 348 13.2.1 设置服务网格 ................................................................................ 349 13.2.2 配置虚拟机 .................................................................................... 350 13.3 将网格扩展到虚拟机 ................................................................................ 352 13.3.1 向虚拟机暴露 istiod 和集群服务 ................................................. 352 13.3.2 使用 WorkloadGroup 表示一个工作负载组 ................................ 353 13.3.3 在虚拟机中安装与配置 istio-agent .............................................. 356 13.3.4 将流量路由到集群服务 ................................................................ 359 13.3.5 将流量路由到 WorkloadEntry ....................................................... 360 13.3.6 虚拟机是由控制平面配置的 :强制执行双向认证 .................... 363 13.4 揭开 DNS 代理的神秘面纱 ...................................................................... 364 13.4.1 DNS 代理如何解析集群内主机名 ............................................... 364 13.4.2 DNS 代理知道哪些主机名 ........................................................... 366 13.5 自定义代理的行为 .................................................................................... 367 13.6 将 WorkloadEntry 从网格中删除 .............................................................. 368 本章小结 ............................................................................................................... 369 14 在请求路径上扩展 Istio ..................................................... 370 14.1 Envoy 的扩展能力 ..................................................................................... 371 14.1.1 了解 Envoy 的过滤器链 ................................................................ 371 14.1.2 用于扩展的过滤器 ........................................................................ 374 14.1.3 定制 Istio 的数据平面 ................................................................... 374 14.2 使用 EnvoyFilter 资源配置 Envoy 过滤器 ............................................... 374 14.3 调用外部的限流请求 ................................................................................ 379 14.4 使用 Lua 扩展 Istio 的数据平面 ............................................................... 384 14.5 使用 WebAssembly 扩展 Istio 的数据平面 .............................................. 387 14.5.1 WebAssembly 简介 ........................................................................ 387 14.5.2 为什么使用 WebAssembly ............................................................ 388 14.5.3 使用 WebAssembly 构建新的 Envoy 过滤器 .............................. 389 14.5.4 使用 meshctl 工具构建新的 Envoy 过滤器 ................................. 389 14.5.5 部署新的 WebAssembly Envoy 过滤器 ....................................... 391 本章小结 ............................................................................................................... 393 A 自定义 Istio 安装................................................................394 B Istio 的 sidecar 及其注入选项 ............................................... 401 C Istio 安全——SPIFFE ......................................................... 407 D Istio 故障排查 ....................................................................417 E 如何配置虚拟机接入网格 ..................................................... 425
你还可能感兴趣
我要评论
|