本书是云原生社区多位服务网格技术专家的鼎力之作。全书共 10 章,内容涉及 Service Mesh 概述、核心功能、架构解析、安装与部署、流量控制、可观察性、安全、进阶实战、故障排查、Service Mesh 生态,分别从概念、实践和生态扩展 3 个层面为读者系统介绍了 Istio 的相关知识,着重介绍了 Istio 在 1.5 版本以后的重大变化,从底层深入剖析了 Istio 的各项核心功能。本书能为云计算领域的从业者,尤其是微服务领域的开发者在落地 Istio 时提供理论指导和实际借鉴。
云原生社区服务于云原生终端用户,由宋净超和其他几位云原生技术意见领袖共同发起,成立于2020年5月。云原生社区的前身是ServiceMesher社区,该社区成立于2018年5月,是国内推广服务网格技术的先驱阵地。云原生社区自成立以来,围绕Kubernetes、Istio、边缘计算、Dapr等云原生相关技术,与从业人员分享优质内容,秉承 “共识、共治、共建、共享” 的原则,组织了多场丰富多彩的线上和线下活动。要想了解更多,请访问云原生社区官方网站,或关注云原生社区微信公众号Cloud Native Community。
第 1 章 Service Mesh 概述 ............................................................................................................ 1
1.1 Service Mesh 基本概念 ............................................................................................... 2
1.2 后 Kubernetes 时代的微服务 ....................................................................................... 5
1.2.1 重要观点 ......................................................................................................... 6
1.2.2 Kubernetes 与 Service Mesh .............................................................................. 6
1.2.3 kube-proxy 组件 ............................................................................................... 8
1.2.4 Kubernetes Ingress 与 Istio Gateway .................................................................. 8
1.2.5 xDS 协议 ......................................................................................................... 9
1.2.6 Envoy ............................................................................................................ 11
1.2.7 Istio Service Mesh .......................................................................................... 12
1.3 什么是 Istio .............................................................................................................. 12
1.3.1 为什么使用 Istio ............................................................................................ 13
1.3.2 Istio 的平台支持 ............................................................................................ 13
1.4 本章小结 .................................................................................................................. 14
第 2 章 核心功能 .......................................................................................................................... 15
2.1 流量控制 .................................................................................................................. 15
2.1.1 请求路由和流量转移 ..................................................................................... 16
2.1.2 弹性功能 ....................................................................................................... 17
2.1.3 调试能力 ....................................................................................................... 18
2.1.4 实现流量控制的自定义资源 .......................................................................... 19
2.2 安全 ......................................................................................................................... 20
2.2.1 认证 .............................................................................................................. 20
2.2.2 授权 .............................................................................................................. 21
2.3 可观察性 .................................................................................................................. 21
2.4 本章小结 .................................................................................................................. 23
第 3 章 架构解析 .......................................................................................................................... 24
3.1 Istio 的架构组成 ....................................................................................................... 24
3.2 Istio 的设计目标 ....................................................................................................... 25
3.3 Istio 的架构变迁 ....................................................................................................... 26
3.4 控制平面 .................................................................................................................. 27
3.4.1 Pilot ............................................................................................................... 27
3.4.2 Citadel ........................................................................................................... 37
3.4.3 Galley ............................................................................................................ 40
3.5 数据平面 .................................................................................................................. 45
3.5.1 数据平面的概念 ............................................................................................ 45
3.5.2 Sidecar 注入及透明流量劫持 ......................................................................... 47
3.5.3 Sidecar 流量路由机制分析 ............................................................................. 57
3.5.4 Envoy ............................................................................................................ 86
3.5.5 MOSN ........................................................................................................... 93
3.6 本章小结 .................................................................................................................. 98
第 4 章 安装与部署 ...................................................................................................................... 99
4.1 安装 ......................................................................................................................... 99
4.1.1 环境准备 ....................................................................................................... 99
4.1.2 安装 Kubernetes 集群 ................................................................................... 100
4.1.3 安装 Istio ..................................................................................................... 100
4.2 升级 ....................................................................................................................... 102
4.2.1 金丝雀升级 ................................................................................................. 102
4.2.2 热升级 ......................................................................................................... 104
4.3 Bookinfo 实例 ......................................................................................................... 104
4.3.1 环境准备 ..................................................................................................... 105
4.3.2 部署应用 ..................................................................................................... 106
4.3.3 启动应用服务 .............................................................................................. 106
4.3.4 确定 Ingress 的 IP 地址和端口 ..................................................................... 107
4.3.5 集群外部访问应用 ....................................................................................... 108
4.4 本章小结 ................................................................................................................ 108
第 5 章 流量控制 ........................................................................................................................ 109
5.1 流量控制 CRD ........................................................................................................ 109
5.1.1 VirtualService ............................................................................................... 110
5.1.2 DestinationRule ............................................................................................ 111
5.1.3 Gateway ....................................................................................................... 112
5.1.4 ServiceEntry ................................................................................................. 114
5.1.5 Sidecar ......................................................................................................... 115
5.2 路由 ....................................................................................................................... 116
5.2.1 VirtualService ............................................................................................... 116
5.2.2 路由规则 ..................................................................................................... 118
5.2.3 DestinationRule ............................................................................................ 120
5.2.4 Gateway ....................................................................................................... 122
5.2.5 ServiceEntry ................................................................................................. 123
5.3 流量镜像 ................................................................................................................ 127
5.3.1 流量镜像能够做什么 ................................................................................... 127
5.3.2 流量镜像的实现原理 ................................................................................... 128
5.3.3 流量镜像的配置 .......................................................................................... 130
5.3.4 流量镜像实践 .............................................................................................. 132
5.4 Ingress/Egress ......................................................................................................... 141
5.4.1 Ingress ......................................................................................................... 142
5.4.2 Egress .......................................................................................................... 158
5.5 超时 ....................................................................................................................... 174
5.6 重试 ....................................................................................................................... 178
5.7 熔断 ....................................................................................................................... 181
5.8 故障注入 ................................................................................................................ 184
5.8.1 HTTPFaultInjection.Abort ............................................................................. 185
5.8.2 HTTPFaultInjection.Delay ............................................................................. 186
5.9 本章小结 ................................................................................................................ 189
第 6 章 可观察性 ........................................................................................................................ 190
6.1 指标监控 ................................................................................................................ 190
6.1.1 Prometheus .................................................................................................. 191
6.1.2 Prometheus 配置解析 ................................................................................... 195
6.1.3 Prometheus-Istio 指标 ................................................................................... 200
6.2 可视化 .................................................................................................................... 202
6.2.1 Grafana ........................................................................................................ 203
6.2.2 Kiali ............................................................................................................ 221
6.3 日志 ....................................................................................................................... 235
6.3.1 传统日志 ..................................................................................................... 235
6.3.2 云原生日志 ................................................................................................. 236
6.3.3 Istio 日志 ..................................................................................................... 236
6.3.4 ELK ............................................................................................................ 236
6.3.5 EFK ............................................................................................................. 250
6.4 分布式追踪 ............................................................................................................ 264
6.4.1 Jaeger .......................................................................................................... 265
6.4.2 Zipkin .......................................................................................................... 272
6.4.3 SkyWalking .................................................................................................. 277
6.5 本章小结 ................................................................................................................ 293
第 7 章 安全 ............................................................................................................................... 294
7.1 认证 ....................................................................................................................... 294
7.1.1 对等认证 ..................................................................................................... 296
7.1.2 请求认证 ..................................................................................................... 307
7.2 授权 ....................................................................................................................... 312
7.2.1 授权策略 ..................................................................................................... 313
7.2.2 全局策略 ..................................................................................................... 314
7.2.3 局部策略 ..................................................................................................... 315
7.2.4 Match label .................................................................................................. 316
7.2.5 匹配算法 ..................................................................................................... 317
7.2.6 规则详解 ..................................................................................................... 318
7.2.7 操作实例 ..................................................................................................... 320
7.2.8 JWT 授权 .................................................................................................... 325
7.3 本章小结 ................................................................................................................ 337
第 8 章 进阶实战 ........................................................................................................................ 338
8.1 集成服务注册中心 .................................................................................................. 338
8.1.1 Istio 服务模型 .............................................................................................. 338
8.1.2 Pilot 服务模型源码分析 ............................................................................... 339
8.1.3 第三方服务注册表集成 ............................................................................... 341
8.2 对接 API 网关 ........................................................................................................ 342
8.2.1 Envoy .......................................................................................................... 343
8.2.2 预备工作 ..................................................................................................... 343
8.2.3 开始监听 ..................................................................................................... 344
8.2.4 一条路由 ..................................................................................................... 346
8.2.5 一个服务 ..................................................................................................... 348
8.3 分布式追踪增强 ..................................................................................................... 352
8.3.1 OpenTracing ................................................................................................ 352
8.3.2 OpenTracing 概念模型 ................................................................................. 352
8.3.3 OpenTracing 数据模型 ................................................................................. 353
8.3.4 跨进程调用信息传播 ................................................................................... 354
8.4 实现方法级别的调用跟踪 ....................................................................................... 356
8.4.1 Istio 的分布式追踪 ...................................................................................... 356
8.4.2 使用 OpenTracing 传递分布式跟踪上下文 ................................................... 359
8.4.3 在 Istio 中加入方法级别的调用跟踪 ............................................................ 360
8.5 实现 Kafka 消息跟踪 .............................................................................................. 363
8.5.1 eshop 实例程序结构 .................................................................................... 363
8.5.2 将 Kafka 消息处理加入调用链路跟踪 .......................................................... 364
8.5.3 安装 Kafka 集群 .......................................................................................... 365
8.5.4 部署实例应用 .............................................................................................. 365
8.5.5 将调用跟踪上下文从 Kafka 传递到 REST 服务 ............................................ 367
8.6 部署模型 ................................................................................................................ 371
8.6.1 集群模型与控制平面模型 ............................................................................ 371
8.6.2 网络模型 ..................................................................................................... 374
8.6.3 网格模型 ..................................................................................................... 374
8.6.4 身份和信任模型 .......................................................................................... 375
8.6.5 租户模型 ..................................................................................................... 376
8.7 多集群部署与管理 .................................................................................................. 377
8.7.1 多控制平面 ................................................................................................. 377
8.7.2 单控制平面 ................................................................................................. 382
8.8 智能 DNS ............................................................................................................... 387
8.8.1 待解决问题 ................................................................................................. 388
8.8.2 功能开启 ..................................................................................................... 389
8.8.3 访问外部服务 .............................................................................................. 390
8.8.4 自动地址分配 .............................................................................................. 391
8.8.5 跨集群访问 ................................................................................................. 391
8.9 本章小结 ................................................................................................................ 392
第 9 章 故障排查 ........................................................................................................................ 393
9.1 常见使用问题 ......................................................................................................... 393
9.1.1 Service 端口命名约束 .................................................................................. 394
9.1.2 流量控制规则下发顺序问题 ........................................................................ 395
9.1.3 请求中断分析 .............................................................................................. 396
9.1.4 Sidecar 和 user container 的启动顺序 ............................................................ 399
9.1.5 Ingress Gateway 和 Service 端口联动 ............................................................ 400
9.1.6 VirtualService 作用域 ................................................................................... 401
9.1.7 VirtualService 不支持 host fragment .............................................................. 402
9.1.8 全链路跟踪并非完全透明接入 ..................................................................... 403
9.1.9 mTLS 导致连接中断 .................................................................................... 404
9.2 诊断工具 ................................................................................................................ 405
9.2.1 istioctl 命令行工具安装 ............................................................................... 406
9.2.2 使用 proxy-status 命令进行诊断 ................................................................... 408
9.2.3 使用 proxy-config 命令进行诊断 .................................................................. 412
9.2.4 使用 analyze 命令诊断 ................................................................................. 415
9.2.5 启用 Galley 自动配置分析诊断 .................................................................... 420
9.2.6 采用 describe 命令验证并理解网格配置 ....................................................... 422
9.2.7 ControlZ 自检工具 ....................................................................................... 427
9.3 本章小结 ................................................................................................................ 429
第 10 章 Service Mesh 生态 ...................................................................................................... 430
10.1 开源项目 .............................................................................................................. 430
10.1.1 Linkerd ..................................................................................................... 430
10.1.2 Envoy ....................................................................................................... 431
10.1.3 Istio .......................................................................................................... 431
10.1.4 Consul Connect ......................................................................................... 432
10.1.5 MOSN ...................................................................................................... 432
10.1.6 Kong Kuma ............................................................................................... 433
10.1.7 Aeraki ....................................................................................................... 433
10.2 商业化项目 ........................................................................................................... 434
10.2.1 AWS ......................................................................................................... 434
10.2.2 Google ...................................................................................................... 434
10.2.3 Microsoft .................................................................................................. 435
10.2.4 Red Hat ..................................................................................................... 435
10.2.5 Aspen Mesh .............................................................................................. 435
10.2.6 国内项目 .................................................................................................. 436
10.3 标准 ..................................................................................................................... 436
10.3.1 xDS .......................................................................................................... 437
10.3.2 SMI .......................................................................................................... 445
10.3.3 UDPA ....................................................................................................... 449
10.4 扩展 ..................................................................................................................... 450
10.4.1 WebAssembly ............................................................................................ 451
10.4.2 Contour ..................................................................................................... 454
10.5 本章小结 .............................................................................................................. 470