目 錄 Contents
序 一
序 二
序 三
前 言
初級篇
第1章 服務網格與Istio 2
1.1 微服務架構的發展與挑戰 2
1.2 使用應用程序庫解決這些挑戰 4
1.2.1 特定應用程序庫的缺點 5
1.2.2 將這些問題推嚮基礎設施 6
1.3 什麼是服務網格 7
1.4 為什麼服務網格是必要的 10
1.5 Istio服務網格 11
1.5.1 核心功能 12
1.5.2 為什麼要使用Istio 14
1.5.3 成熟度和支持級彆 15
1.6 本章總結 16
第2章 快速上手Istio 17
2.1 在MiniKube上搭建Istio環境 17
2.1.1 安裝啓動Minikube 17
2.1.2 安裝部署Helm 18
2.1.3 安裝部署Istio 19
2.2 在Docker Desktop上搭建Istio環境 22
2.2.1 安裝配置Docker Desktop for
Kubernetes 22
2.2.2 切換Kubernetes 24
2.2.3 安裝部署Helm 26
2.2.4 安裝部署Istio 26
2.3 使用公有雲Istio服務 28
2.4 在Istio中部署第一個應用程序 31
2.5 本章總結 39
第3章 Istio架構剖析 40
3.1 Istio的整體架構 40
3.2 剖析Istio控製平麵 42
3.3 剖析Istio數據平麵 45
3.3.1 Envoy代理 45
3.3.2 Envoy的啓動配置 47
3.3.3 Envoy靜態與動態配置 47
3.3.4 使用Envoy 51
3.3.5 Envoy請求重試 56
3.3.6 Envoy的Admin API 58
3.3.7 Envoy與其他類似代理的比較 61
3.4 剖析Sidecar自動注入 62
3.4.1 Kubernetes的Webhook機製 62
3.4.2 啓用Webhook插件 63
3.4.3 采用Webhook自動注入Istio Sidecar 63
3.4.4 開啓需要自動注入Sidecar的命名空間 66
3.5 本章總結 67
中級篇
第4章 東西嚮流量管理 70
4.1 流量管理 70
4.1.1 術語 72
4.1.2 流量拆分與導嚮 72
4.1.3 Istio服務與Kubernetes服務 73
4.1.4 示例 76
4.2 實現東西嚮流量路由 83
4.2.1 自動 Sidecar 注入 84
4.2.2 部署 85
4.2.3 查看Ingress Gateway的地址 85
4.2.4 請求路由 86
4.3 實現流量鏡像及對比分析 89
4.3.1 流量鏡像 89
4.3.2 流量對比 89
4.3.3 創建用於Istio流量鏡像的服務 90
4.3.4 創建流量鏡像的Istio策略 92
4.3.5 搭建Diffy用於請求流量對比 93
4.3.6 發送流量進行鏡像驗證 96
4.4 通過Istio管理應用的灰度發布 99
4.4.1 Kubernetes中的灰度發布 100
4.4.2 使用 Istio進行灰度發布 101
4.4.3 統一的流量路由規則 102
4.5 本章總結 103
第5章 南北嚮流量管理 104
5.1 Istio 網關 104
5.1.1 Istio網關的工作原理 104
5.1.2 Istio網關的負載均衡作用 105
5.1.3 入口網關服務 107
5.1.4 入口網關部署 107
5.1.5 網關資源 108
5.1.6 網關虛擬服務 109
5.1.7 調試入口網關 109
5.2 用HTTPS 加密網關 110
5.2.1 為入口網關配置TLS 111
5.2.2 創建示例服務 112
5.2.3 定義虛擬服務 112
5.2.4 通過網關請求示例服務 113
5.2.5 為多個主機配置 TLS入口網關 114
5.3 基於SNI的TLS路由 119
5.3.1 定義內部服務nginx 121
5.3.2 定義內部服務nginx2 122
5.3.3 部署網關 124
5.3.4 根據域名進行訪問 125
5.4 服務條目 126
5.4.1 服務條目基本原理 126
5.4.2 服務條目的定義參數 127
5.5 實現齣口流量路由的統一管理 130
5.5.1 齣口安全 130
5.5.2 創建客戶端 131
5.5.3 HTTP流量網關 131
5.5.4 HTTPS流量網關 133
5.5.5 齣口流量的TLS發起 136
5.6 實現服務條目的DNS尋址 137
5.6.1 CoreDNS 及其插件工作機製 138
5.6.2 Kubernetes下的CoreDNS 139
5.6.3 部署Istio CoreDNS 140
5.6.4 更改集群CoreDNS配置 140
5.6.5 創建服務條目驗證DNS解析 141
5.7 本章總結 142
第6章 流量治理 144
6.1 使用流量策略 144
6.1.1 目標規則 144
6.1.2 流量策略 145
6.2 設置負載均衡 146
6.2.1 標準負載均衡算法 147
6.2.2 會話保持 147
6.2.3 示例 147
6.3 熔斷 150
6.3.1 連接池管理 151
6.3.2 異常檢測 152
6.3.3 創建示例服務 152
6.3.4 使用fortio觸發熔斷 154
6.4 服務重試 157
6.5 故障注入 160
6.6 命名空間隔離下的流量管理 165
6.6.1 Sidecar資源定義 165
6.6.2 示例 166
6.7 本章總結 169
第7章 安全 170
7.1 Istio安全架構 170
7.1.1 Istio身份模型 172
7.1.2 Istio公鑰基礎設施 172
7.1.3 Istio證書和密鑰輪換機製 173
7.2 剖析認證機製 173
7.2.1 認證架構 174
7.2.2 雙嚮TLS認證 175
7.2.3 認證策略 175
7.3 使用認證策略 175
7.3.1 Istio默認認證策略 177
7.3.2 認證策略示例 177
7.3.3 雙嚮認證策略檢查 180
7.4 使用自定義CA證書和密鑰 181
7.4.1 準備證書和密鑰 181
7.4.2 插入證書和密鑰 184
7.4.3 檢查新證書 185
7.5 使用cert-manager管理網關證書 186
7.5.1 生成簽名密鑰對 186
7.5.2 將簽名密鑰對保存為Secret 186
7.5.3 部署cert-manager 186
7.5.4 創建引用Secret的Issuer 187
7.5.5 獲得簽名證書 187
7.5.6 檢查證書與密鑰 188
7.5.7 部署自定義網關 189
7.5.8 定義Kubernetes服務 192
7.5.9 創建虛擬服務 194
7.6 剖析授權機製 196
7.6.1 啓用全局授權 197
7.6.2 Istio授權策略 197
7.6.3 授權策略示例 199
7.6.4 診斷授權策略 201
7.7 本章總結 206
第8章 Mixer的控製與觀測 207
8.1 Mixer架構設計 207
8.2 剖析適配器機製 209
8.2.1 屬性及錶達式 209
8.2.2 配置模型 212
8.2.3 處理程序 212
8.2.4 示例 213
8.2.5 規則 214
8.3 指標數據收集 214
8.3.1 metric模闆 214
8.3.2 Prometheus適配器的配置 215
8.3.3 監控指標 216
8.3.4 配置Istio收集指標 218
8.3.5 查詢Istio指標 220
8.3.6 可視化Istio指標 221
8.4 集成日誌數據收集 222
8.4.1 logentry模闆 223
8.4.2 stdio適配器的配置 224
8.4.3 配置Istio日誌 225
8.4.4 查看日誌 226
8.4.5 安裝EFK軟件棧 227
8.4.6 為Fluentd適配器配置Istio資源 231
8.4.7 通過Kibana查看日誌 232
8.5 啓用基於Zipkin或Jaeger的分布式跟蹤 234
8.5.1 Istio跟蹤采樣率 235
8.5.2 部署應用示例 236
8.5.3 啓用Zipkin 238
8.5.4 啓用Jaeger 238
8.6 啓用速率限製策略 240
8.6.1 配額模闆 240
8.6.2 速率限製配置 241
8.6.3 部署應用示例 243
8.7 啓用黑白名單策略 244
8.7.1 list適配器及模闆 245
8.7.2 部署應用示例 246
8.7.3 部署適配器示例 246
8.7.4 校驗白名單策略 247
8.8 本章總結 248
高級篇
第9章 Istio穩定性與運維 250
9.1 Istio功能模塊的穩定性與常見問題 250
9.1.1 可能的請求錯誤排查 252
9.1.2 證書有效期管理 254
9.1.3 使用SDS動態管理證書 257
9.2 Istio流量管理相關運維 258
9.2.1 路由規則對應用程序不生效 258
9.2.2 Sidecar是否注入 258
9.2.3 Istio配置參數優化 259
9.2.4 Envoy 無法連接 HTTP1.0 260
9.2.5 檢查Envoy與Pilot狀態差異 260
9.3 Istio組件升級與迴滾 261
9.3.1 升級安裝文件 261
9.3.2 CRD升級 262
9.3.3 控製平麵升級 262
9.3.4 數據平麵Sidecar升級 263
9.3.5 升級中的影響分析 264
9.4 本章總結 267
第10章 Istio定製與擴展 268
10.1 Mixer適配器擴展 268
10.2 實現適配器 270
10.3 編譯與打包適配器 283
10.4 Istio CNI插件 287
10.4.1 安裝配置Istio CNI插件 288
10.4.2 運行機製 289
10.4.3 驗證CNI插件鏈配置 292
10.4.4 驗證iptables是否已修改 293
10.5 從Kubernetes擴展到虛擬機 294
10.5.1 網格擴展 294
10.5.2 生成Istio的配置cluster.env 297
10.5.3 生成DNS配置文件kubedns 297
10.5.4 獲取Istio服務賬戶密鑰 298
10.5.5 在虛擬機上進行配置 298
10.5.6 部署應用示例到網格擴展 300
10.6 擴展Envoy過濾器 307
10.6.1 定義Envoy過濾器 307
10.6.2 部署示例應用 310
10.7 集成外部Zipkin兼容服務 312
10.7.1 集成部署 312
10.7.2 使用原生Zipkin 314
10.7.3 使用Zipkin兼容服務 315
10.8 本章總結 316
第11章 Knative:基於Istio的無服務器計算 317
11.1 Knative架構解析 317
11.1.1 Knative > Kubernetes + Istio 318
11.1.2 Knative的設計 319
11.1.3 安裝Knative 320
11.2 Knative Build運行機製 321
11.2.1 Knative Build資源定義 322
11.2.2 創建Knative Build示例 322
11.2.3 驗證使用Knative Build構建的鏡像 326
11.3 Knative Eventing運行機製 327
11.3.1 架構設計 327
11.3.2 創建Knative Eventing示例 329
11.3.3 驗證事件 331
11.4 基於Istio實現Serving組件 331
11.4.1 Knative Serving的設計 331
11.4.2 基於Serving實現source-to-
URL部署 333
11.5 在Istio上部署配置Knative 336
11.6 基於Knative Serving的自動伸縮 337
11.6.1 路由與自動伸縮 338
11.6.2 自動伸縮機製 340
11.6.3 自動伸縮算法 341
11.6.4 基於Serving實現自動伸縮示例 343
11.6.5 使用藍綠部署路由和管理流量 345
11.7 本章總結 348
第12章 多集群管理 349
12.1 服務網格的未來 350
12.2 多集群部署管理 351
12.3 單控製平麵VPN連接拓撲 351
12.3.1 前提約束 352
12.3.2 拓撲架構 352
12.3.3 啓用雙嚮TLS通信 354
12.3.4 部署本地控製平麵 354
12.3.5 安裝istio-remote 356
12.3.6 部署示例應用 359
12.4 單控製平麵Gateway連接拓撲 361
12.4.1 集群感知的服務路由 361
12.4.2 Istio控製平麵組件 362
12.4.3 istio-remote組件 363
12.4.4 部署示例應用 365
12.5 多控製平麵 366
12.5.1 部署控製平麵 366
12.5.2 設置DNS 368
12.5.3 部署示例應用 369
12.5.4 跨集群的版本路由 371
12.6 本章總結 374
· · · · · · (
收起)