原 理 篇
第1章 你好,Istio 2
1.1 Istio是什麼 2
1.2 通過示例看看Istio能做什麼 4
1.3 Istio與服務治理 6
1.3.1 關於微服務 6
1.3.2 服務治理的三種形態 8
1.3.3 Istio不隻解決了微服務問題 10
1.4 Istio與服務網格 11
1.4.1 時代選擇服務網格 11
1.4.2 服務網格選擇Istio 14
1.5 Istio與Kubernetes 15
1.5.1 Istio,Kubernetes的好幫手 16
1.5.2 Kubernetes,Istio的好基座 18
1.6 本章總結 20
第2章 Istio架構概述 21
2.1 Istio的工作機制 21
2.2 Istio的服務模型 23
2.2.1 Istio的服務 24
2.2.2 Istio的服務版本 26
2.2.3 Istio的服務實例 28
2.3 Istio的主要組件 30
2.3.1 istio-pilot 30
2.3.2 istio-telemetry 32
2.3.3 istio-policy 33
2.3.4 istio-citadel 34
2.3.5 istio-galley 34
2.3.6 istio-sidecar-injector 35
2.3.7 istio-proxy 35
2.3.8 istio-ingressgateway 36
2.3.9 其他組件 37
2.4 本章總結 37
第3章 非侵入的流量治理 38
3.1 Istio流量治理的原理 38
3.1.1 負載均衡 39
3.1.2 服務熔斷 41
3.1.3 故障注入 48
3.1.4 灰度發布 49
3.1.5 服務訪問入口 54
3.1.6 外部接入服務治理 56
3.2 Istio路由規則配置:VirtualService 59
3.2.1 路由規則配置示例 59
3.2.2 路由規則定義 60
3.2.3 HTTP路由(HTTPRoute) 63
3.2.4 TLS路由(TLSRoute) 78
3.2.5 TCP路由(TCPRoute) 81
3.2.6 三種協議路由規則的對比 83
3.2.7 VirtualService的典型應用 84
3.3 Istio目標規則配置:DestinationRule 89
3.3.1 DestinationRule配置示例 90
3.3.2 DestinationRule規則定義 90
3.3.3 DestinationRule的典型應用 103
3.4 Istio服務網關配置:Gateway 107
3.4.1 Gateway配置示例 108
3.4.2 Gateway規則定義 109
3.4.3 Gateway的典型應用 112
3.5 Istio外部服務配置:ServiceEntry 120
3.5.1 ServiceEntry配置示例 120
3.5.2 ServiceEntry規則的定義和用法 121
3.5.3 ServiceEntry的典型應用 123
3.6 Istio代理規則配置:Sidecar 126
3.6.1 Sidecar配置示例 126
3.6.2 Sidecar規則定義 126
3.7 本章總結 129
第4章 可擴展的策略和遙測 131
4.1 Istio策略和遙測的原理 131
4.1.1 應用場景 131
4.1.2 工作原理 136
4.1.3 屬性 137
4.1.4 Mixer的配置模型 140
4.2 Istio遙測適配器配置 147
4.2.1 Prometheus適配器 148
4.2.2 Fluentd適配器 155
4.2.3 StatsD適配器 159
4.2.4 Stdio適配器 161
4.2.5 Zipkin適配器 163
4.2.6 廠商適配器 168
4.3 Istio策略適配器配置 169
4.3.1 List適配器 169
4.3.2 Denier適配器 171
4.3.3 Memory Quota適配器 172
4.3.4 Redis Quota適配器 175
4.4 Kubernetes Env適配器配置 178
4.5 本章總結 181
第5章 可插撥的服務安全 182
5.1 Istio服務安全的原理 182
5.1.1 認證 185
5.1.2 授權 189
5.1.3 密鑰證書管理 192
5.2 Istio服務認證配置 193
5.2.1 認證策略配置示例 193
5.2.2 認證策略的定義 194
5.2.3 TLS訪問配置 196
5.2.4 認證策略的典型應用 200
5.3 Istio服務授權配置 202
5.3.1 授權啟用配置 202
5.3.2 授權策略配置 203
5.3.3 授權策略的典型應用 207
5.4 本章總結 210
第6章 透明的Sidecar機制 211
6.1 Sidecar注入 211
6.1.1 Sidecar Injector自動注入的原理 214
6.1.2 Sidecar注入的實現 216
6.2 Sidecar流量攔截 219
6.2.1 iptables的基本原理 220
6.2.2 iptables的規則設置 223
6.2.3 流量攔截原理 224
6.3 本章總結 228
第7章 多集群服務治理 230
7.1 Istio多集群服務治理 230
7.1.1 Istio多集群的相關概念 230
7.1.2 Istio多集群服務治理現狀 231
7.2 多集群模式1:多控制面 232
7.2.1 服務DNS解析的原理 233
7.2.2 Gateway連接的原理 237
7.3 多集群模式2:VPN直連單控制面 238
7.4 多集群模式3:集群感知服務路由單控制面 240
7.5 本章總結 246
實 踐 篇
第8章 環境準備 248
8.1 在本地搭建Istio環境 248
8.1.1 安裝Kubernetes集群 248
8.1.2 安裝Helm 249
8.1.3 安裝Istio 250
8.2 在公有雲上使用Istio 253
8.3 嘗鮮Istio命令行 255
8.4 應用示例 257
8.4.1 Weather Forecast簡介 257
8.4.2 Weather Forecast部署 258
8.5 本章總結 259
第9章 流量監控 260
9.1 預先準備:安裝插件 260
9.2 調用鏈跟蹤 261
9.3 指標監控 265
9.3.1 Prometheus 265
9.3.2 Grafana 268
9.4 服務網格監控 273
9.5 本章總結 277
第10章 灰度發布 278
10.1 預先準備:將所有流量都路由到各個服務的v1版本 278
10.2 基於流量比例的路由 279
10.3 基於請求內容的路由 283
10.4 組合條件路由 284
10.5 多服務灰度發布 286
10.6 TCP服務灰度發布 288
10.7 自動化灰度發布 290
10.7.1 正常發布 291
10.7.2 異常發布 294
第11章 流量治理 296
11.1 流量負載均衡 296
11.1.1 ROUND_ROBIN模式 296
11.1.2 RANDOM模式 298
11.2 會話保持 299
11.2.1 實戰目標 300
11.2.2 實戰演練 300
11.3 故障注入 301
11.3.1 延遲注入 301
11.3.2 中斷注入 303
11.4 超時 304
11.5 重試 306
11.6 HTTP重定向 308
11.7 HTTP重寫 309
11.8 熔斷 310
11.9 限流 313
11.9.1 普通方式 314
11.9.2 條件方式 315
11.10 服務隔離 317
11.10.1 實戰目標 317
11.10.2 實戰演練 317
11.11 影子測試 319
11.12 本章總結 322
第12章 服務保護 323
12.1 網關加密 323
12.1.1 單向TLS網關 323
12.1.2 雙向TLS網關 326
12.1.3 用SDS加密網關 328
12.2 訪問控制 331
12.2.1 黑名單 331
12.2.2 白名單 332
12.3 認證 334
12.3.1 實戰目標 334
12.3.2 實戰演練 334
12.4 授權 336
12.4.1 命名空間級別的訪問控制 336
12.4.2 服務級別的訪問控制 339
12.5 本章總結 341
第13章 多集群管理 342
13.1 實戰目標 342
13.2 實戰演練 342
13.3 本章總結 350
架 構 篇
第14章 司令官Pilot 352
14.1 Pilot的架構 352
14.1.1 Istio的服務模型 354
14.1.2 xDS協議 356
14.2 Pilot的工作流程 360
14.2.1 Pilot的啟動與初始化 361
14.2.2 服務發現 363
14.2.3 配置規則發現 368
14.2.4 Envoy的配置分發 376
14.3 Pilot的插件 383
14.3.1 安全插件 385
14.3.2 健康檢查插件 390
14.3.3 Mixer插件 391
14.4 Pilot的設計亮點 392
14.4.1 三級緩存優化 392
14.4.2 去抖動分發 393
14.4.3 增量EDS 394
14.4.4 資源隔離 395
14.5 本章總結 396
第15章 守護神Mixer 397
15.1 Mixer的整體架構 397
15.2 Mixer的服務模型 398
15.2.1 Template 399
15.2.2 Adapter 401
15.3 Mixer的工作流程 403
15.3.1 啟動初始化 403
15.3.2 用戶配置信息規則處理 409
15.3.3 訪問策略的執行 416
15.3.4 無侵入遙測 421
15.4 Mixer的設計亮點 423
15.5 如何開發Mixer Adapter 424
15.6 本章總結 438
第16章 安全碉堡Citadel 439
16.1 Citadel的架構 439
16.2 Citadel的工作流程 441
16.3 本章總結 449
第17章 高性能代理Envoy 450
17.1 Envoy的架構 450
17.2 Envoy的特性 451
17.3 Envoy的模塊結構 452
17.4 Envoy的線程模型 453
17.5 Envoy的內存管理 455
17.6 Envoy的流量控制 456
17.7 Envoy與Istio的配合 457
17.3 本章總結 459
第18章 代理守護進程Pilot-agent 460
18.1 為什麼需要Pilot-agent 461
18.2 Pilot-agent的工作流程 461
18.3 本章總結 468
第19章 配置中心Galley 469
19.1 Galley的架構 469
19.2 Galley的工作流程 471
19.3 本章總結 482
源 碼 篇
第20章 Pilot源碼解析 484
20.1 進程啟動流程 484
20.2 關鍵代碼分析 486
20.3 本章總結 514
第21章 Mixer源碼解析 515
21.1 進程啟動流程 515
21.2 關鍵代碼分析 5201
21.3 本章總結 543
第22章 Citadel源碼解析 544
22.1 進程啟動流程 544
22.2 關鍵代碼分析 548
22.3 本章總結 558
第23章 Envoy源碼解析 559
23.1 Envoy的初始化 559
23.2 Envoy的運行和建立新連接 564
23.3 Envoy對數據的讀取、接收及處理 567
23.4 Envoy發送數據到服務端 570
23.5 本章總結 573
第24章 Galley源碼解析 574
24.1 進程啟動流程 574
24.2 關鍵代碼分析 580
24.3 本章總結 589
結語 590
附錄A 源碼倉庫介紹 592
附錄B 實踐經驗和總結 598
**篇幅限制,完整目錄請見本書**