關(guān)于我們
書單推薦
新書推薦
|
Istio最佳實戰(zhàn) 讀者對象:使用或關(guān)注 Istio 的開發(fā)工程師、運維工程師、架構(gòu)師等云原生領(lǐng)域從業(yè)者
Istio作為服務(wù)網(wǎng)格技術(shù)最具代表性的產(chǎn)品,歷經(jīng)多年發(fā)展已日漸成熟,并受到越來越多開發(fā)者的青睞。本書以 Istio 服務(wù)網(wǎng)格為核心,內(nèi)容包括基本概念、核心功能、運維、企業(yè)級落地四大部分,從基本的安裝部署到功能實踐,從底層原理分析到故障排查,從進階操作到企業(yè)級實戰(zhàn),由淺入深地介紹了 Istio 服務(wù)網(wǎng)格的各個方面。本書適合正在使用或關(guān)注 Istio 的開發(fā)工程師、運維工程師、架構(gòu)師等云原生領(lǐng)域從業(yè)者閱讀。無論你是服務(wù)網(wǎng)格技術(shù)的初學(xué)者,還是該領(lǐng)域的專家,都能從本書中尋找到有借鑒意義的理論及實踐指導(dǎo)。
Christian Posta(@christianposta)是 Solo.io 公司副總裁,全球領(lǐng)域首席技術(shù)官。他在云原生社區(qū)中以作家、博主、演說家,以及服務(wù)網(wǎng)格和云原生生態(tài)中各種開源項目的貢獻者身份而聞名。Christian 曾在傳統(tǒng)企業(yè)和大型互聯(lián)網(wǎng)公司工作過,現(xiàn)在幫助組織創(chuàng)建和部署大規(guī)模的、云原生的、彈性的分布式架構(gòu)。他擅長指導(dǎo)、培訓(xùn)和領(lǐng)導(dǎo)團隊在分布式系統(tǒng)概念、微服務(wù)、DevOps 和云原生應(yīng)用程序設(shè)計方面取得成功。Rinor Maloku(@rinormaloku)是 Solo.io 公司的工程師。他為采用應(yīng)用網(wǎng)絡(luò)解決方案(如服務(wù)網(wǎng)格)的客戶提供咨詢服務(wù)。此前,他在 Red Hat 公司工作,在那里,他開發(fā)了中間件軟件,使研發(fā)團隊能夠確保其服務(wù)的高可用性。作為一名自由職業(yè)者,他服務(wù)了多位 DAX 30 成員,以充分利用云計算技術(shù)的潛力。
馬若飛,就職于飛維美地(FreeWheel)北京研發(fā)中心,擔(dān)任首席工程師,主要負責(zé)微服務(wù)架構(gòu)設(shè)計和云原生落地工作。《Istio實戰(zhàn)指南》作者,極客時間《Service Mesh實戰(zhàn)》專欄作者,《云原生應(yīng)用架構(gòu):微服務(wù)開發(fā)最佳實踐》主要作者,人民郵電出版社IT專業(yè)圖書專家顧問,ServiceMesher技術(shù)社區(qū)和云原生社區(qū)管理委員會成員。發(fā)表、翻譯多篇云原生領(lǐng)域前沿技術(shù)文章,熱衷于技術(shù)分享。宋凈超(Jimmy Song),Tetrate 布道師,云原生社區(qū)創(chuàng)始人,螞蟻集團前云原生布道師及開源管理負責(zé)人,電子工業(yè)出版社圖書出品人,獨立撰稿人。Kubernetes 、Istio 等開源技術(shù)的早期使用及推廣者。著有《未來架構(gòu):從服務(wù)化到云原生》《深入理解Istio:云原生服務(wù)網(wǎng)格進階實戰(zhàn)》,參與過多部作品的翻譯工作。羅廣明,字節(jié)跳動服務(wù)框架團隊架構(gòu)師,云原生社區(qū)管理委員會成員、北京站站長。先后在愛立信、百度從事云原生、微服務(wù)及開源相關(guān)工作,后加入字節(jié)跳動,負責(zé) CloudWeGo 等微服務(wù)項目開源相關(guān)工作。長期關(guān)注云原生 & 微服務(wù)領(lǐng)域前沿技術(shù)、架構(gòu)演進及標準化進程。
第 1 部分 理解 Istio
1 Istio 服務(wù)網(wǎng)格......................................................................... 2 1.1 快速迭代帶來的挑戰(zhàn) ...................................................................................... 3 1.1.1 不可靠的云基礎(chǔ)設(shè)施 .......................................................................... 5 1.1.2 服務(wù)通信需要彈性 .............................................................................. 6 1.1.3 實時可觀測性 ...................................................................................... 6 1.2 使用應(yīng)用程序庫解決問題 .............................................................................. 7 1.3 基礎(chǔ)設(shè)施的解決思路 ...................................................................................... 9 1.3.1 應(yīng)用程序感知服務(wù)代理 ...................................................................... 9 1.3.2 認識 Envoy 代理 ................................................................................ 10 1.4 什么是服務(wù)網(wǎng)格 ............................................................................................ 11 1.5 Istio 服務(wù)網(wǎng)格簡介 ........................................................................................ 13 1.5.1 服務(wù)網(wǎng)格與企業(yè)服務(wù)總線的關(guān)系 .................................................... 14 1.5.2 服務(wù)網(wǎng)格與 API 網(wǎng)關(guān)的關(guān)系 ............................................................ 16 1.5.3 在非微服務(wù)架構(gòu)中使用 Istio ............................................................ 17 1.5.4 在分布式架構(gòu)中使用 Istio ................................................................ 18 1.5.5 使用服務(wù)網(wǎng)格的缺點 ........................................................................ 19 本章小結(jié) ................................................................................................................. 19 2 Istio 的第一步.......................................................................21 2.1 在 Kubernetes 上部署 Istio ............................................................................ 21 2.1.1 使用 Docker Desktop 來演示樣例 .................................................... 22 2.1.2 獲取 Istio 發(fā)行版 ............................................................................... 22 2.1.3 將 Istio 組件安裝到 Kubernetes 中 ................................................... 24 2.2 了解 Istio 控制平面 ....................................................................................... 25 2.2.1 istiod 簡介 .......................................................................................... 26 2.2.2 入口網(wǎng)關(guān)和出口網(wǎng)關(guān) ........................................................................ 30 2.3 在服務(wù)網(wǎng)格中部署你的第一個應(yīng)用程序 .................................................... 31 2.4 Istio 的可觀測性、彈性和流量路由 ............................................................ 36 2.4.1 Istio 與可觀測性 ................................................................................ 37 2.4.2 Istio 與彈性 ........................................................................................ 44 2.4.3 Istio 與流量路由 ................................................................................ 46 本章小結(jié) ................................................................................................................. 50 3 Istio 的數(shù)據(jù)平面 :Envoy .......................................................51 3.1 什么是 Envoy 代理 ........................................................................................ 51 3.1.1 Envoy 的核心功能 ............................................................................. 53 3.1.2 Envoy 與其他代理的比較 ................................................................. 58 3.2 配置 Envoy ..................................................................................................... 58 3.2.1 靜態(tài)配置 ............................................................................................ 58 3.2.2 動態(tài)配置 ............................................................................................ 60 3.3 Envoy 實戰(zhàn) ..................................................................................................... 61 3.3.1 Envoy 的 Admin API ......................................................................... 65 3.3.2 Envoy 的請求重試 ............................................................................. 66 3.4 Envoy 與 Istio 的融合 .................................................................................... 67 本章小結(jié) ................................................................................................................. 69 第 2 部分 保護、觀察和控制服務(wù)網(wǎng)格中的流量 4 Istio 網(wǎng)關(guān) :將流量導(dǎo)入集群....................................................72 4.1 流量入口概念 ................................................................................................ 73 4.1.1 虛擬 IP 地址 :簡化服務(wù)訪問 ........................................................... 73 4.1.2 虛擬主機 :來自單個接入點的多個服務(wù) ........................................ 75 4.2 Istio 入口網(wǎng)關(guān) ................................................................................................ 75 4.2.1 聲明 Gateway 資源 ............................................................................ 77 4.2.2 虛擬服務(wù)的網(wǎng)關(guān)路由 ........................................................................ 79 4.2.3 流量整體視圖 .................................................................................... 82 4.2.4 對比 Istio 入口網(wǎng)關(guān)與 Kubernetes Ingress ....................................... 82 4.2.5 對比 Istio 入口網(wǎng)關(guān)與 API 網(wǎng)關(guān) ....................................................... 83 4.3 保護網(wǎng)關(guān)流量 ................................................................................................ 83 4.3.1 使用 TLS 的 HTTP 流量 ................................................................... 84 4.3.2 將 HTTP 重定向到 HTTPS ............................................................... 88 4.3.3 使用 mTLS 的 HTTP 通信 ................................................................ 89 4.3.4 為多個虛擬主機提供 TLS 服務(wù) ....................................................... 92 4.4 TCP 流量 ........................................................................................................ 93 4.4.1 在 Istio 網(wǎng)關(guān)上暴露 TCP 端口 .......................................................... 94 4.4.2 使用 SNI 直通的流量路由 ................................................................ 96 4.5 網(wǎng)關(guān)使用建議 ................................................................................................ 99 4.5.1 拆分網(wǎng)關(guān)的職能 ................................................................................ 99 4.5.2 網(wǎng)關(guān)注入 .......................................................................................... 101 4.5.3 入口網(wǎng)關(guān)訪問日志 .......................................................................... 102 4.5.4 減少網(wǎng)關(guān)配置 .................................................................................. 103 本章小結(jié) ............................................................................................................... 104 5 流量控制 :細粒度流量路由 .................................................. 105 5.1 減少部署新代碼帶來的風(fēng)險 ...................................................................... 105 5.2 Istio 的請求路由 .......................................................................................... 109 5.2.1 清理工作空間 .................................................................................. 109 5.2.2 部署 catalog 服務(wù)的 v1 版本 ........................................................... 110 5.2.3 部署 catalog 服務(wù)的 v2 版本 ............................................................111 5.2.4 將所有流量路由到 catalog 服務(wù)的 v1 版本 ................................... 112 5.2.5 將特定請求路由到 v2 版本 ............................................................ 114 5.2.6 在調(diào)用鏈路內(nèi)部進行路由 .............................................................. 115 5.3 流量遷移 ...................................................................................................... 117 5.4 進一步降低風(fēng)險 :流量鏡像 ...................................................................... 125 5.5 使用 Istio 的服務(wù)發(fā)現(xiàn)路由到集群外部的服務(wù) ......................................... 127 本章小結(jié) ............................................................................................................... 131 6 彈性 :應(yīng)對應(yīng)用程序的網(wǎng)絡(luò)挑戰(zhàn)............................................ 132 6.1 實現(xiàn)應(yīng)用程序的彈性 .................................................................................. 132 6.1.1 為應(yīng)用程序庫構(gòu)建彈性能力 .......................................................... 133 6.1.2 使用 Istio 解決彈性問題 ................................................................. 134 6.1.3 實現(xiàn)去中心化的彈性能力 .............................................................. 134 6.2 客戶端負載均衡 .......................................................................................... 135 6.2.1 開始使用客戶端負載均衡 .............................................................. 136 6.2.2 構(gòu)建應(yīng)用場景 .................................................................................. 138 6.2.3 測試不同的客戶端負載均衡策略 .................................................. 139 6.2.4 理解負載均衡算法的差異 .............................................................. 144 6.3 位置感知負載均衡 ...................................................................................... 144 6.3.1 位置感知負載均衡實驗 .................................................................. 145 6.3.2 利用加權(quán)分布對位置感知負載均衡進行更多的控制 .................. 149 6.4 透明的超時和重試 ...................................................................................... 152 6.4.1 超時 .................................................................................................. 152 6.4.2 重試 .................................................................................................. 154 6.4.3 高級重試 .......................................................................................... 160 6.5 Istio 中的熔斷 .............................................................................................. 162 6.5.1 利用連接池設(shè)置防止服務(wù)過慢 ...................................................... 163 6.5.2 利用異常點檢測剔除不健康的服務(wù) .............................................. 169 本章小結(jié) ............................................................................................................... 172 7 可觀測性 :理解服務(wù)的行為 .................................................. 174 7.1 什么是可觀測性 .......................................................................................... 175 7.1.1 可觀測性與監(jiān)控 .............................................................................. 175 7.1.2 Istio 如何幫助實現(xiàn)可觀測性 .......................................................... 176 7.2 探索 Istio 的指標 ......................................................................................... 176 7.2.1 數(shù)據(jù)平面指標 .................................................................................. 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 配置現(xiàn)有的指標 .............................................................................. 193 7.4.2 創(chuàng)建新指標 ...................................................................................... 197 7.4.3 使用新屬性分組調(diào)用 ...................................................................... 199 本章小結(jié) ............................................................................................................... 201 8 可觀測性 :使用 Grafana、Jaeger 和 Kiali 觀察網(wǎng)絡(luò)行為........... 202 8.1 使用 Grafana 觀察 Istio 服務(wù)和控制平面指標 .......................................... 202 8.1.1 安裝 Istio 的 Grafana 儀表板 .......................................................... 203 8.1.2 查看控制平面指標 .......................................................................... 205 8.1.3 查看數(shù)據(jù)平面指標 .......................................................................... 206 8.2 分布式追蹤 .................................................................................................. 206 8.2.1 分布式追蹤是怎么工作的 .............................................................. 207 8.2.2 安裝分布式追蹤系統(tǒng) ...................................................................... 209 8.2.3 配置 Istio 實現(xiàn)分布式追蹤 ............................................................. 210 8.2.4 查看分布式追蹤數(shù)據(jù) ...................................................................... 213 8.2.5 追蹤采樣、強制追蹤和自定義標簽 .............................................. 214 8.3 使用 Kiali 觀察服務(wù)網(wǎng)格 ............................................................................ 220 8.3.1 安裝 Kiali ......................................................................................... 220 8.3.2 結(jié)論 .................................................................................................. 225 本章小結(jié) ............................................................................................................... 225 9 確保微服務(wù)通信安全............................................................227 9.1 應(yīng)用程序網(wǎng)絡(luò)安全需求 .............................................................................. 227 9.1.1 服務(wù)間認證 ...................................................................................... 228 9.1.2 終端用戶認證 .................................................................................. 228 9.1.3 授權(quán) .................................................................................................. 228 9.1.4 單體和微服務(wù)應(yīng)用的安全比較 ...................................................... 228 9.1.5 Istio 如何實現(xiàn) SPIFFE .................................................................... 230 9.1.6 Istio 安全簡述 .................................................................................. 230 9.2 自動 mTLS ................................................................................................... 231 9.2.1 安裝環(huán)境 .......................................................................................... 232 9.2.2 理解 Istio 的對等認證 ..................................................................... 233 9.3 授權(quán)服務(wù)間流量 .......................................................................................... 238 9.3.1 了解 Istio 中的授權(quán) ......................................................................... 239 9.3.2 設(shè)置工作區(qū) ...................................................................................... 240 9.3.3 當策略被應(yīng)用于工作負載時行為的變化 ...................................... 241 9.3.4 默認使用一個全局策略拒絕所有請求 .......................................... 242 9.3.5 允許來自單一命名空間的請求 ...................................................... 243 9.3.6 允許來自非認證的工作負載的請求 .............................................. 244 9.3.7 允許來自單一服務(wù)賬戶的請求 ...................................................... 245 9.3.8 策略的條件匹配 .............................................................................. 246 9.3.9 了解值匹配表達式 .......................................................................... 246 9.3.10 了解評估授權(quán)策略的順序 ............................................................ 248 9.4 終端用戶的認證和授權(quán) .............................................................................. 249 9.4.1 什么是 JWT ..................................................................................... 249 9.4.2 入口網(wǎng)關(guān)的終端用戶認證和授權(quán) .................................................. 251 9.4.3 使用 RequestAuthentication 驗證 JWT ........................................... 252 9.5 與自定義的外部授權(quán)服務(wù)集成 .................................................................. 256 9.5.1 外部授權(quán)實踐 .................................................................................. 257 9.5.2 配置 ExtAuthz .................................................................................. 258 9.5.3 使用自定義的 AuthorizationPolicy 資源 ........................................ 259 本章小結(jié) ............................................................................................................... 260 第 3 部分 Istio 運維 10 數(shù)據(jù)平面的故障排查......................................................... 262 10.1 最常見錯誤 :數(shù)據(jù)平面配置錯誤 ............................................................ 263 10.2 識別數(shù)據(jù)平面的問題 ................................................................................ 265 10.2.1 如何驗證數(shù)據(jù)平面是最新的 ........................................................ 265 10.2.2 使用 Kiali 發(fā)現(xiàn)配置錯誤 .............................................................. 266 10.2.3 通過 istioctl 發(fā)現(xiàn)配置錯誤 ........................................................... 268 10.3 從 Envoy 配置中發(fā)現(xiàn)錯誤 ........................................................................ 270 10.3.1 Envoy 管理界面 ............................................................................. 270 10.3.2 使用 istioctl 查詢代理配置 ........................................................... 270 10.3.3 應(yīng)用程序的故障排查 .................................................................... 276 10.3.4 使用 ksniff 檢查網(wǎng)絡(luò)流量 ............................................................. 282 10.4 通過 Envoy 的遙測能力了解應(yīng)用程序 .................................................... 285 10.4.1 在 Grafana 中查看請求失敗率 ..................................................... 286 10.4.2 使用 Prometheus 查詢受影響的 Pod ............................................ 287 本章小結(jié) ............................................................................................................... 288 11 控制平面性能優(yōu)化 .............................................................290 11.1 控制平面的主要目標 ................................................................................ 290 11.1.1 了解數(shù)據(jù)平面同步的步驟 ............................................................ 291 11.1.2 決定性能的因素 ............................................................................ 292 11.2 監(jiān)控控制平面 ............................................................................................ 293 11.3 性能調(diào)整 .................................................................................................... 298 11.3.1 設(shè)置工作區(qū) .................................................................................... 299 11.3.2 測量優(yōu)化前的性能 ........................................................................ 299 11.3.3 忽略事件 :使用發(fā)現(xiàn)選擇器縮小發(fā)現(xiàn)的范圍 ............................ 303 11.3.4 事件批處理和推送節(jié)流特性 ........................................................ 305 11.4 性能優(yōu)化準則 ............................................................................................ 308 本章小結(jié) ............................................................................................................... 310 第 4 部分 在組織中落地 Istio 12 在組織中擴展 Istio............................................................312 12.1 多集群服務(wù)網(wǎng)格的好處 ............................................................................ 312 12.2 多集群服務(wù)網(wǎng)格概述 ................................................................................ 313 12.2.1 Istio 多集群部署模型 .................................................................... 314 12.2.2 在多集群部署中如何發(fā)現(xiàn)工作負載 ............................................ 316 12.2.3 跨集群的工作負載連接 ................................................................ 317 12.2.4 集群間互信 .................................................................................... 318 12.3 多集群、多網(wǎng)絡(luò)、多控制平面的服務(wù)網(wǎng)格 ............................................ 319 12.3.1 選擇多集群部署模型 .................................................................... 320 12.3.2 建立云基礎(chǔ)設(shè)施 ............................................................................ 320 12.3.3 配置插件式 CA 證書 ..................................................................... 321 12.3.4 在每個集群中安裝控制平面 ........................................................ 322 12.3.5 啟用跨集群的工作負載發(fā)現(xiàn) ........................................................ 325 12.3.6 設(shè)置跨集群連接 ............................................................................ 327 12.3.7 跨集群的負載均衡 ........................................................................ 334 本章小結(jié) ............................................................................................................... 339 13 將虛擬機工作負載納入網(wǎng)格................................................ 340 13.1 Istio 的虛擬機支持 .................................................................................... 341 13.1.1 簡化虛擬機中 sidecar 代理的安裝與配置 ................................... 341 13.1.2 虛擬機的高可用性 ........................................................................ 343 13.1.3 網(wǎng)格內(nèi)服務(wù)的 DNS 解析 .............................................................. 346 13.2 設(shè)置基礎(chǔ)設(shè)施 ............................................................................................ 348 13.2.1 設(shè)置服務(wù)網(wǎng)格 ................................................................................ 349 13.2.2 配置虛擬機 .................................................................................... 350 13.3 將網(wǎng)格擴展到虛擬機 ................................................................................ 352 13.3.1 向虛擬機暴露 istiod 和集群服務(wù) ................................................. 352 13.3.2 使用 WorkloadGroup 表示一個工作負載組 ................................ 353 13.3.3 在虛擬機中安裝與配置 istio-agent .............................................. 356 13.3.4 將流量路由到集群服務(wù) ................................................................ 359 13.3.5 將流量路由到 WorkloadEntry ....................................................... 360 13.3.6 虛擬機是由控制平面配置的 :強制執(zhí)行雙向認證 .................... 363 13.4 揭開 DNS 代理的神秘面紗 ...................................................................... 364 13.4.1 DNS 代理如何解析集群內(nèi)主機名 ............................................... 364 13.4.2 DNS 代理知道哪些主機名 ........................................................... 366 13.5 自定義代理的行為 .................................................................................... 367 13.6 將 WorkloadEntry 從網(wǎng)格中刪除 .............................................................. 368 本章小結(jié) ............................................................................................................... 369 14 在請求路徑上擴展 Istio ..................................................... 370 14.1 Envoy 的擴展能力 ..................................................................................... 371 14.1.1 了解 Envoy 的過濾器鏈 ................................................................ 371 14.1.2 用于擴展的過濾器 ........................................................................ 374 14.1.3 定制 Istio 的數(shù)據(jù)平面 ................................................................... 374 14.2 使用 EnvoyFilter 資源配置 Envoy 過濾器 ............................................... 374 14.3 調(diào)用外部的限流請求 ................................................................................ 379 14.4 使用 Lua 擴展 Istio 的數(shù)據(jù)平面 ............................................................... 384 14.5 使用 WebAssembly 擴展 Istio 的數(shù)據(jù)平面 .............................................. 387 14.5.1 WebAssembly 簡介 ........................................................................ 387 14.5.2 為什么使用 WebAssembly ............................................................ 388 14.5.3 使用 WebAssembly 構(gòu)建新的 Envoy 過濾器 .............................. 389 14.5.4 使用 meshctl 工具構(gòu)建新的 Envoy 過濾器 ................................. 389 14.5.5 部署新的 WebAssembly Envoy 過濾器 ....................................... 391 本章小結(jié) ............................................................................................................... 393 A 自定義 Istio 安裝................................................................394 B Istio 的 sidecar 及其注入選項 ............................................... 401 C Istio 安全——SPIFFE ......................................................... 407 D Istio 故障排查 ....................................................................417 E 如何配置虛擬機接入網(wǎng)格 ..................................................... 425
你還可能感興趣
我要評論
|