內容簡介
《Istio最佳實戰》以 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 入口網關與 KubernetesIngress ....................................... 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
作者簡介
Christian Posta(@christianposta)是 Solo.io 公司副總裁,全球領域首席技術官。他在雲原生社區中以作家、博主、演說家,以及服務格線和雲原生生態中各種開源項目的貢獻者身份而聞名。Christian 曾在傳統企業和大型網際網路公司工作過,現在幫助組織創建和部署大規模的、雲原生的、彈性的分散式架構。他擅長指導、培訓和領導團隊在分散式系統概念、微服務、DevOps 和雲原生應用程式設計方面取得成功。
Rinor Maloku(@rinormaloku)是 Solo.io 公司的工程師。他為採用套用網路解決方案(如服務格線)的客戶提供諮詢服務。此前,他在 Red Hat 公司工作,在那裡,他開發了中間件軟體,使研發團隊能夠確保其服務的高可用性。作為一名自由職業者,他服務了多位 DAX 30 成員,以充分利用雲計算技術的潛力。