Istio最佳实战
  • 推荐0
  • 收藏0
  • 浏览30

Istio最佳实战

【美】Christian Posta , 【美】Rinor Maloku (作者)  马若飞 , 宋净超 , 罗广明 (译者) 孙奇俏 (责任编辑)

  • 书  号:9787121457395
  • 出版日期:2023-07-01
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 维护人:博文小编
Istio作为服务网格技术最具代表性的产品,历经多年发展已日渐成熟,并受到越来越多开发者的青睐。本书以 Istio 服务网格为核心,内容包括基本概念、核心功能、运维、企业级落地四大部分,从基本的安装部署到功能实践,从底层原理分析到故障排查,从进阶操作到企业级实战,由浅入深地介绍了 Istio 服务网格的各个方面。
《Istio最佳实战》适合正在使用或关注 Istio 的开发工程师、运维工程师、架构师等云原生领域从业者阅读。无论你是服务网格技术的初学者,还是该领域的专家,都能从本书中寻找到有借鉴意义的理论及实践指导。
全球服务网格知名专家力作,全面覆盖Istio核心内容:多集群服务网格、流量路由、可观测性、扩展Istio、虚拟机、边车代理。示例代码丰富完善。
译者简介
马若飞,就职于飞维美地(FreeWheel)北京研发中心,担任首席工程师,主要负责微服务架构设计和云原生落地工作。《Istio实战指南》作者,极客时间《Service Mesh实战》专栏作者,《云原生应用架构:微服务开发最佳实践》主要作者,人民邮电出版社IT专业图书专家顾问,ServiceMesher技术社区和云原生社区管理委员会成员。发表、翻译多篇云原生领域前沿技术文章,热衷于技术分享。

宋净超(Jimmy Song),Tetrate 布道师,云原生社区创始人,蚂蚁集团前云原生布道师及开源管理负责人,电子工业出版社图书出品人,独立撰稿人。Kubernetes 、Istio 等开源技术的早期使用及推广者。著有《未来架构:从服务化到云原生》《深入理解Istio:云原生服务网格进阶实战》,参与过多部作品的翻译工作。

罗广明,字节跳动服务框架团队架构师,云原生社区管理委员会成员、北京站站长。先后在爱立信、百度从事云原生、微服务及开源相关工作,后加入字节跳动,负责 CloudWeGo 等微服务项目开源相关工作。长期关注云原生 & 微服务领域前沿技术、架构演进及标准化进程。
构建软件是困难的,通过网络连接不同的服务更困难。任何时候,通过网络发送数据包、消息或请求都不能保证其结果。这个请求会发送成功吗?它需要多长时间?如果请求失败,会有人知道吗?
Docker和Kubernetes已经内置了很多功能来支持像微服务这样的分布式服务架构,但是它们加剧了现有的通信问题。一个运行异常的服务可能会毁掉一切。
在与全球各地的采用微服务的组织合作时,我发现让团队持续思考和解决沟通问题是非常困难的,其中涉及许多问题 :他们将如何落实服务发现?是采用超时、重试、熔断,还是链路追踪、身份验证这样的方式?像Netflix、Twitter 和 Google这样的大型云计算公司开创了一些早期成功的微服务架构。这些公司必须建立许多他们自己的开发者工具和基础设施来解决上述问题,幸运的是,他们开源了其中的大部分功能。那么,其他组织可以使用 NetflixOSS 全家桶或Twitter Finagle吗?可以,而且有些组织确实这么做了,但这样做会带来一个新的运作上的问题。
例如,NetflixOSS全家桶主要是为 Java 开发人员编写的。那么Node.js、Golang和Python团队怎么办呢?这些团队要么自己构建库,要么将其在互联网上找到的各种各样的功能组合在一起,而且还必须将这些与“网络通信”相关的代码混合到业务逻辑中。这增加了传递依赖性,使代码变得混乱,并且使修订变得更加困难。使用这些应用程序网络库来构建服务架构、升级、打补丁,以及跨不同语言来进行这些操作,是非常复杂且容易出错的。
服务网格是解决此应用程序网络问题的更简洁的解决方案。通过服务网格,我们将应用程序网络逻辑抽象成一个专用的基础设施,并将其应用到所有的服务中,而不管这些服务是用什么语言编写的。
Istio是一个可扩展的、成熟的、功能强大的服务网格实现方案,它最初来自IBM和Google 的一个项目。我于2017年1月来到Istio团队,并且很早就开始承担这个项目的相关工作。2018年年底,我在初创公司Solo.io担任全球领域首席技术官,专注于服务网格技术的研发和服务网格落地的推进。
从头开始创建一家公司,推动这项技术的发展,并就这个话题写一本深入的书,不是一件容易的事情。我需要一个有奉献精神和有激情的人来帮助完成 ;所以,当我做到一半的时候,Manning团队和我邀请了Rinor Maloku加入进来。感谢我们二人在Solo.io工作期间为社区和客户共同努力而度过的时光。其中一些客户负责世界上最大的Istio部署项目,Rinor和我已经能够根据实际经验为Istio编写一本优秀的书。我们希望这本书能向你展示Istio的价值和力量,并让你像其他许多人一样,轻松地将这项技术应用到生产环境中。

目录

第 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

读者评论