
本书是《Istio权威指南》的下册,重点讲解Istio的架构与源码,分为架构篇和源码篇。 架构篇从架构的视角分别介绍Istio各组件的设计思想、数据模型和核心工作流程。在Istio 1.16中,Istiod以原有的Pilot为基础框架构建了包含Pilot、Citadel、Galley等组件的统一控制面。本书第15、16、17章会分别介绍以上三个组件各自的架构、模型和流程机制;第18、19、20章依次讲解服务网格数据面上Pilot-agent、Envoy和Istio-proxy的架构和流程,包括三者的结合关系,配合Istio控制面组件实现流量管理功能,特别是Envoy的架构、模型和关键流程。 源码篇包括第21~26章,和《Istio权威指南(上)》中架构篇的6章对应,分别介绍Istio管理面组件Pilot、Citadel、Galley与数据面Pilot-agent、Envoy和Istio-proxy的主要代码结构、代码流程及关键代码片段。本篇配合架构篇中每个组件的架构和机制,对Istio重要组件的实现进行了更详细的讲解和剖析,为读者深入研读Istio相关代码,以及在生产环境中进行相应代码的调试和修改提供指导。
架 构 篇 第15章 Pilot的架构 2 15.1 Pilot的基本架构 2 15.1.1 Istio的服务模型 4 15.1.2 xDS协议 6 15.2 Pilot的原理 12 15.2.1 xDS服务器 13 15.2.2 服务发现 24 15.2.3 配置规则发现 29 15.2.4 xDS的生成和分发 35 15.3 安全插件 42 15.3.1 认证插件 43 15.3.2 授权插件 46 15.4 Pilot的关键设计 48 15.4.1 三级缓存模型 48 15.4.2 去抖动分发 50 15.4.3 防过度分发 51 15.4.4 增量EDS 51 15.4.5 资源隔离 53 15.4.6 自动管理虚拟机工作负载 54 15.5 本章小结 55 第16章 Citadel的架构 56 16.1 Istio的证书和身份管理 56 16.2 Citadel的基本架构 59 16.3 Citadel的核心原理 60 16.3.1 核心组件的初始化 61 16.3.2 CA服务器 62 16.3.3 证书签发 63 16.3.4 证书轮转器 65 16.4 本章小结 67 第17章 Galley的架构 68 17.1 简化的Galley 68 17.2 Galley的整体架构 69 17.2.1 早期的MCP 70 17.2.2 基于xDS的MCP 72 17.3 Galley的核心工作原理 72 17.3.1 启动初始化 72 17.3.2 API校验 75 17.3.3 对API配置的管理 78 17.4 本章小结 79 第18章 Pilot-agent的架构 80 18.1 Pilot-agent的用途 81 18.2 Pilot-agent的核心架构 82 18.3 Pilot-agent的原理 84 18.3.1 Envoy的启动 84 18.3.2 优雅退出 85 18.3.3 xDS代理 87 18.3.4 证书管理 90 18.3.5 DNS服务器 91 18.3.6 应用健康检查 92 18.4 本章小结 93 第19章 Envoy的架构 94 19.1 Envoy的整体架构 95 19.1.1 Envoy的内部架构 96 19.1.2 Envoy的通信架构 100 19.2 Envoy的内存管理 110 19.2.1 堆内存管理 110 19.2.2 Buffer管理 111 19.3 Envoy过滤器的架构 114 19.3.1 过滤器的注册 115 19.3.2 过滤器的回调方法 117 19.3.3 过滤器的挂起与恢复 118 19.4 Envoy的初始化流程 119 19.4.1 静态配置 120 19.4.2 动态配置 121 19.4.3 Envoy的创建及初始化流程 124 19.4.4 Envoy的运行流程 128 19.4.5 目标服务Cluster的创建 129 19.4.6 监听器的创建 131 19.5 Envoy的网络及线程模型 133 19.5.1 Server主线程 134 19.5.2 Accesslog线程 136 19.5.3 工作线程 138 19.5.4 GuardDog线程 139 19.5.5 线程间的同步 139 19.6 Envoy的热升级流程 141 19.7 Envoy的新连接处理流程 144 19.8 Envoy的请求及响应数据处理流程 145 19.8.1 对下游请求数据的接收及处理 146 19.8.2 对上游请求数据的处理及发送 149 19.8.3 对上游响应数据的接收及发送 151 19.9 xDS的原理及工作流程 152 19.10 安全证书处理 155 19.11 WASM虚拟机的原理 158 19.12 本章小结 161 第20章 Istio-proxy的架构 162 20.1 Istio-proxy的基本架构 162 20.2 Istio-proxy的原理 163 20.2.1 Istio-proxy的整体工作流程 163 20.2.2 L4 metadata_exchange的工作流程 164 20.2.3 L7 metadata_exchange扩展的工作流程 169 20.2.4 Stats的工作流程 170 20.3 本章小结 173 源 码 篇 第21章 Pilot源码解析 175 21.1 启动流程 175 21.2 关键代码解析 177 21.2.1 ConfigController 178 21.2.2 ServiceController 186 21.2.3 xDS的异步分发 194 21.2.4 对xDS更新的预处理 202 21.2.5 xDS配置的生成及分发 208 21.3 本章小结 211 第22章 Citadel源码解析 212 22.1 启动流程 212 22.1.1 Istio CA的创建 213 22.1.2 SDS服务器的初始化 214 22.1.3 Istio CA的启动 215 22.2 关键代码解析 216 22.2.1 CA 服务器的核心原理 216 22.2.2 证书签发实体IstioCA 218 22.2.3 CredentialsController的创建和核心原理 222 22.3 本章小结 224 第23章 Galley源码解析 225 23.1 启动流程 225 23.1.1 Galley WebhookServer的初始化 226 23.1.2 ValidatingWebhookConfiguration控制器的初始化 226 23.2 关键代码解析 228 23.2.1 配置校验 228 23.2.2 Validating控制器的实现 232 23.3 本章小结 235 第24章 Pilot-agent源码解析 236 24.1 整体架构 236 24.2 启动及监控 238 24.3 xDS转发服务 243 24.4 SDS证书服务 248 24.5 健康检查 255 24.5.1 应用容器的LivenessProbe探测 255 24.5.2 应用容器的ReadinessProbe探测 257 24.5.3 Envoy进程的ReadinessProbe探测 258 24.5.4 Pilot-agent进程的LivenessProbe探测 262 24.6 本章小结 265 第25章 Envoy源码解析 266 25.1 Envoy的初始化 266 25.1.1 启动参数bootstrap的初始化 267 25.1.2 初始化观测指标 268 25.1.3 过滤器注册及信息补齐 269 25.1.4 Envoy自身信息解析 273 25.1.5 Admin API的初始化 273 25.1.6 Worker的初始化 276 25.1.7 Dispatcher内存延迟析构 279 25.1.8 CDS的初始化 283 25.1.9 LDS的初始化 286 25.1.10 初始化观测管理系统 287 25.1.11 启动Stats定期刷新 292 25.1.12 GuardDog的初始化 292 25.2 热重启的流程 296 25.3 Envoy的运行和连接创建 298 25.3.1 启动Worker工作线程 299 25.3.2 监听器的加载 301 25.3.3 接收连接 304 25.4 Envoy接收及处理数据 309 25.4.1 读取数据 310 25.4.2 接收数据 311 25.4.3 处理数据 312 25.5 Envoy发送数据到服务端 317 25.5.1 路由匹配 317 25.5.2 获取连接池 320 25.5.3 创建上游请求 325 25.6 Envoy收到服务端响应 333 25.6.1 接收响应数据 333 25.6.2 发送响应数据 335 25.7 xDS流程解析 337 25.7.1 xDS公共订阅 337 25.7.2 xDS推送 342 25.7.3 LDS更新 343 25.7.4 SDS订阅 350 25.8 遥测元数据存储 352 25.8.1 创建遥测元数据 352 25.8.2 收集Stats观测数据 360 25.8.3 定义静态指标 361 25.9 WASM扩展 363 25.9.1 WASM虚拟机的启动 363 25.9.2 WASM虚拟机的运行 374 25.10 本章小结 387 第26章 Istio-proxy源码解析 388 26.1 metadata_exchange 388 26.2 遥测数据Stats的上报 395 26.3 源码地址 406 26.4 本章小结 408 结 语 409