關(guān)于我們
書單推薦
新書推薦
|
Istio最佳實(shí)戰(zhàn) 讀者對象:使用或關(guān)注 Istio 的開發(fā)工程師、運(yùn)維工程師、架構(gòu)師等云原生領(lǐng)域從業(yè)者
Istio作為服務(wù)網(wǎng)格技術(shù)最具代表性的產(chǎn)品,歷經(jīng)多年發(fā)展已日漸成熟,并受到越來越多開發(fā)者的青睞。本書以 Istio 服務(wù)網(wǎng)格為核心,內(nèi)容包括基本概念、核心功能、運(yùn)維、企業(yè)級落地四大部分,從基本的安裝部署到功能實(shí)踐,從底層原理分析到故障排查,從進(jìn)階操作到企業(yè)級實(shí)戰(zhàn),由淺入深地介紹了 Istio 服務(wù)網(wǎng)格的各個(gè)方面。本書適合正在使用或關(guān)注 Istio 的開發(fā)工程師、運(yùn)維工程師、架構(gòu)師等云原生領(lǐng)域從業(yè)者閱讀。無論你是服務(wù)網(wǎng)格技術(shù)的初學(xué)者,還是該領(lǐng)域的專家,都能從本書中尋找到有借鑒意義的理論及實(shí)踐指導(dǎo)。
Christian Posta(@christianposta)是 Solo.io 公司副總裁,全球領(lǐng)域首席技術(shù)官。他在云原生社區(qū)中以作家、博主、演說家,以及服務(wù)網(wǎng)格和云原生生態(tài)中各種開源項(xiàng)目的貢獻(xiàn)者身份而聞名。Christian 曾在傳統(tǒng)企業(yè)和大型互聯(lián)網(wǎng)公司工作過,現(xiàn)在幫助組織創(chuàng)建和部署大規(guī)模的、云原生的、彈性的分布式架構(gòu)。他擅長指導(dǎo)、培訓(xùn)和領(lǐng)導(dǎo)團(tuán)隊(duì)在分布式系統(tǒng)概念、微服務(wù)、DevOps 和云原生應(yīng)用程序設(shè)計(jì)方面取得成功。Rinor Maloku(@rinormaloku)是 Solo.io 公司的工程師。他為采用應(yīng)用網(wǎng)絡(luò)解決方案(如服務(wù)網(wǎng)格)的客戶提供咨詢服務(wù)。此前,他在 Red Hat 公司工作,在那里,他開發(fā)了中間件軟件,使研發(fā)團(tuán)隊(duì)能夠確保其服務(wù)的高可用性。作為一名自由職業(yè)者,他服務(wù)了多位 DAX 30 成員,以充分利用云計(jì)算技術(shù)的潛力。
馬若飛,就職于飛維美地(FreeWheel)北京研發(fā)中心,擔(dān)任首席工程師,主要負(fù)責(zé)微服務(wù)架構(gòu)設(shè)計(jì)和云原生落地工作。《Istio實(shí)戰(zhàn)指南》作者,極客時(shí)間《Service Mesh實(shí)戰(zhàn)》專欄作者,《云原生應(yīng)用架構(gòu):微服務(wù)開發(fā)最佳實(shí)踐》主要作者,人民郵電出版社IT專業(yè)圖書專家顧問,ServiceMesher技術(shù)社區(qū)和云原生社區(qū)管理委員會成員。發(fā)表、翻譯多篇云原生領(lǐng)域前沿技術(shù)文章,熱衷于技術(shù)分享。宋凈超(Jimmy Song),Tetrate 布道師,云原生社區(qū)創(chuàng)始人,螞蟻集團(tuán)前云原生布道師及開源管理負(fù)責(zé)人,電子工業(yè)出版社圖書出品人,獨(dú)立撰稿人。Kubernetes 、Istio 等開源技術(shù)的早期使用及推廣者。著有《未來架構(gòu):從服務(wù)化到云原生》《深入理解Istio:云原生服務(wù)網(wǎng)格進(jìn)階實(shí)戰(zhàn)》,參與過多部作品的翻譯工作。羅廣明,字節(jié)跳動(dòng)服務(wù)框架團(tuán)隊(duì)架構(gòu)師,云原生社區(qū)管理委員會成員、北京站站長。先后在愛立信、百度從事云原生、微服務(wù)及開源相關(guān)工作,后加入字節(jié)跳動(dòng),負(fù)責(zé) CloudWeGo 等微服務(wù)項(xiàng)目開源相關(guān)工作。長期關(guān)注云原生 & 微服務(wù)領(lǐng)域前沿技術(shù)、架構(gòu)演進(jìn)及標(biāo)準(zhǔn)化進(jìn)程。
第 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 實(shí)時(shí)可觀測性 ...................................................................................... 6 1.2 使用應(yīng)用程序庫解決問題 .............................................................................. 7 1.3 基礎(chǔ)設(shè)施的解決思路 ...................................................................................... 9 1.3.1 應(yīng)用程序感知服務(wù)代理 ...................................................................... 9 1.3.2 認(rèn)識 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)格的缺點(diǎn) ........................................................................ 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)格中部署你的第一個(gè)應(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 動(dòng)態(tài)配置 ............................................................................................ 60 3.3 Envoy 實(shí)戰(zhàn) ..................................................................................................... 61 3.3.1 Envoy 的 Admin API ......................................................................... 65 3.3.2 Envoy 的請求重試 ............................................................................. 66 3.4 Envoy 與 Istio 的融合 .................................................................................... 67 本章小結(jié) ................................................................................................................. 69 第 2 部分 保護(hù)、觀察和控制服務(wù)網(wǎng)格中的流量 4 Istio 網(wǎng)關(guān) :將流量導(dǎo)入集群....................................................72 4.1 流量入口概念 ................................................................................................ 73 4.1.1 虛擬 IP 地址 :簡化服務(wù)訪問 ........................................................... 73 4.1.2 虛擬主機(jī) :來自單個(gè)接入點(diǎn)的多個(gè)服務(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 保護(hù)網(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 為多個(gè)虛擬主機(jī)提供 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 流量控制 :細(xì)粒度流量路由 .................................................. 105 5.1 減少部署新代碼帶來的風(fēng)險(xiǎn) ...................................................................... 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)部進(jìn)行路由 .............................................................. 115 5.3 流量遷移 ...................................................................................................... 117 5.4 進(jìn)一步降低風(fēng)險(xiǎn) :流量鏡像 ...................................................................... 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 實(shí)現(xiàn)應(yīng)用程序的彈性 .................................................................................. 132 6.1.1 為應(yīng)用程序庫構(gòu)建彈性能力 .......................................................... 133 6.1.2 使用 Istio 解決彈性問題 ................................................................. 134 6.1.3 實(shí)現(xiàn)去中心化的彈性能力 .............................................................. 134 6.2 客戶端負(fù)載均衡 .......................................................................................... 135 6.2.1 開始使用客戶端負(fù)載均衡 .............................................................. 136 6.2.2 構(gòu)建應(yīng)用場景 .................................................................................. 138 6.2.3 測試不同的客戶端負(fù)載均衡策略 .................................................. 139 6.2.4 理解負(fù)載均衡算法的差異 .............................................................. 144 6.3 位置感知負(fù)載均衡 ...................................................................................... 144 6.3.1 位置感知負(fù)載均衡實(shí)驗(yàn) .................................................................. 145 6.3.2 利用加權(quán)分布對位置感知負(fù)載均衡進(jìn)行更多的控制 .................. 149 6.4 透明的超時(shí)和重試 ...................................................................................... 152 6.4.1 超時(shí) .................................................................................................. 152 6.4.2 重試 .................................................................................................. 154 6.4.3 高級重試 .......................................................................................... 160 6.5 Istio 中的熔斷 .............................................................................................. 162 6.5.1 利用連接池設(shè)置防止服務(wù)過慢 ...................................................... 163 6.5.2 利用異常點(diǎn)檢測剔除不健康的服務(wù) .............................................. 169 本章小結(jié) ............................................................................................................... 172 7 可觀測性 :理解服務(wù)的行為 .................................................. 174 7.1 什么是可觀測性 .......................................................................................... 175 7.1.1 可觀測性與監(jiān)控 .............................................................................. 175 7.1.2 Istio 如何幫助實(shí)現(xiàn)可觀測性 .......................................................... 176 7.2 探索 Istio 的指標(biāo) ......................................................................................... 176 7.2.1 數(shù)據(jù)平面指標(biāo) .................................................................................. 177 7.2.2 控制平面指標(biāo) .................................................................................. 182 7.3 使用 Prometheus 抓取 Istio 指標(biāo) ................................................................ 184 7.3.1 安裝 Prometheus 和 Grafana ........................................................... 186 7.3.2 配置 Prometheus Operator 抓取 Istio 控制平面和工作負(fù)載的指標(biāo) ... 187 7.4 自定義 Istio 標(biāo)準(zhǔn)指標(biāo) ................................................................................. 190 7.4.1 配置現(xiàn)有的指標(biāo) .............................................................................. 193 7.4.2 創(chuàng)建新指標(biāo) ...................................................................................... 197 7.4.3 使用新屬性分組調(diào)用 ...................................................................... 199 本章小結(jié) ............................................................................................................... 201 8 可觀測性 :使用 Grafana、Jaeger 和 Kiali 觀察網(wǎng)絡(luò)行為........... 202 8.1 使用 Grafana 觀察 Istio 服務(wù)和控制平面指標(biāo) .......................................... 202 8.1.1 安裝 Istio 的 Grafana 儀表板 .......................................................... 203 8.1.2 查看控制平面指標(biāo) .......................................................................... 205 8.1.3 查看數(shù)據(jù)平面指標(biāo) .......................................................................... 206 8.2 分布式追蹤 .................................................................................................. 206 8.2.1 分布式追蹤是怎么工作的 .............................................................. 207 8.2.2 安裝分布式追蹤系統(tǒng) ...................................................................... 209 8.2.3 配置 Istio 實(shí)現(xiàn)分布式追蹤 ............................................................. 210 8.2.4 查看分布式追蹤數(shù)據(jù) ...................................................................... 213 8.2.5 追蹤采樣、強(qiáng)制追蹤和自定義標(biāo)簽 .............................................. 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ù)間認(rèn)證 ...................................................................................... 228 9.1.2 終端用戶認(rèn)證 .................................................................................. 228 9.1.3 授權(quán) .................................................................................................. 228 9.1.4 單體和微服務(wù)應(yīng)用的安全比較 ...................................................... 228 9.1.5 Istio 如何實(shí)現(xiàn) SPIFFE .................................................................... 230 9.1.6 Istio 安全簡述 .................................................................................. 230 9.2 自動(dòng) mTLS ................................................................................................... 231 9.2.1 安裝環(huán)境 .......................................................................................... 232 9.2.2 理解 Istio 的對等認(rèn)證 ..................................................................... 233 9.3 授權(quán)服務(wù)間流量 .......................................................................................... 238 9.3.1 了解 Istio 中的授權(quán) ......................................................................... 239 9.3.2 設(shè)置工作區(qū) ...................................................................................... 240 9.3.3 當(dāng)策略被應(yīng)用于工作負(fù)載時(shí)行為的變化 ...................................... 241 9.3.4 默認(rèn)使用一個(gè)全局策略拒絕所有請求 .......................................... 242 9.3.5 允許來自單一命名空間的請求 ...................................................... 243 9.3.6 允許來自非認(rèn)證的工作負(fù)載的請求 .............................................. 244 9.3.7 允許來自單一服務(wù)賬戶的請求 ...................................................... 245 9.3.8 策略的條件匹配 .............................................................................. 246 9.3.9 了解值匹配表達(dá)式 .......................................................................... 246 9.3.10 了解評估授權(quán)策略的順序 ............................................................ 248 9.4 終端用戶的認(rèn)證和授權(quán) .............................................................................. 249 9.4.1 什么是 JWT ..................................................................................... 249 9.4.2 入口網(wǎng)關(guān)的終端用戶認(rèn)證和授權(quán) .................................................. 251 9.4.3 使用 RequestAuthentication 驗(yàn)證 JWT ........................................... 252 9.5 與自定義的外部授權(quán)服務(wù)集成 .................................................................. 256 9.5.1 外部授權(quán)實(shí)踐 .................................................................................. 257 9.5.2 配置 ExtAuthz .................................................................................. 258 9.5.3 使用自定義的 AuthorizationPolicy 資源 ........................................ 259 本章小結(jié) ............................................................................................................... 260 第 3 部分 Istio 運(yùn)維 10 數(shù)據(jù)平面的故障排查......................................................... 262 10.1 最常見錯(cuò)誤 :數(shù)據(jù)平面配置錯(cuò)誤 ............................................................ 263 10.2 識別數(shù)據(jù)平面的問題 ................................................................................ 265 10.2.1 如何驗(yàn)證數(shù)據(jù)平面是最新的 ........................................................ 265 10.2.2 使用 Kiali 發(fā)現(xiàn)配置錯(cuò)誤 .............................................................. 266 10.2.3 通過 istioctl 發(fā)現(xiàn)配置錯(cuò)誤 ........................................................... 268 10.3 從 Envoy 配置中發(fā)現(xiàn)錯(cuò)誤 ........................................................................ 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 控制平面的主要目標(biāo) ................................................................................ 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)化準(zhǔn)則 ............................................................................................ 308 本章小結(jié) ............................................................................................................... 310 第 4 部分 在組織中落地 Istio 12 在組織中擴(kuò)展 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)工作負(fù)載 ............................................ 316 12.2.3 跨集群的工作負(fù)載連接 ................................................................ 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 在每個(gè)集群中安裝控制平面 ........................................................ 322 12.3.5 啟用跨集群的工作負(fù)載發(fā)現(xiàn) ........................................................ 325 12.3.6 設(shè)置跨集群連接 ............................................................................ 327 12.3.7 跨集群的負(fù)載均衡 ........................................................................ 334 本章小結(jié) ............................................................................................................... 339 13 將虛擬機(jī)工作負(fù)載納入網(wǎng)格................................................ 340 13.1 Istio 的虛擬機(jī)支持 .................................................................................... 341 13.1.1 簡化虛擬機(jī)中 sidecar 代理的安裝與配置 ................................... 341 13.1.2 虛擬機(jī)的高可用性 ........................................................................ 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 配置虛擬機(jī) .................................................................................... 350 13.3 將網(wǎng)格擴(kuò)展到虛擬機(jī) ................................................................................ 352 13.3.1 向虛擬機(jī)暴露 istiod 和集群服務(wù) ................................................. 352 13.3.2 使用 WorkloadGroup 表示一個(gè)工作負(fù)載組 ................................ 353 13.3.3 在虛擬機(jī)中安裝與配置 istio-agent .............................................. 356 13.3.4 將流量路由到集群服務(wù) ................................................................ 359 13.3.5 將流量路由到 WorkloadEntry ....................................................... 360 13.3.6 虛擬機(jī)是由控制平面配置的 :強(qiáng)制執(zhí)行雙向認(rèn)證 .................... 363 13.4 揭開 DNS 代理的神秘面紗 ...................................................................... 364 13.4.1 DNS 代理如何解析集群內(nèi)主機(jī)名 ............................................... 364 13.4.2 DNS 代理知道哪些主機(jī)名 ........................................................... 366 13.5 自定義代理的行為 .................................................................................... 367 13.6 將 WorkloadEntry 從網(wǎng)格中刪除 .............................................................. 368 本章小結(jié) ............................................................................................................... 369 14 在請求路徑上擴(kuò)展 Istio ..................................................... 370 14.1 Envoy 的擴(kuò)展能力 ..................................................................................... 371 14.1.1 了解 Envoy 的過濾器鏈 ................................................................ 371 14.1.2 用于擴(kuò)展的過濾器 ........................................................................ 374 14.1.3 定制 Istio 的數(shù)據(jù)平面 ................................................................... 374 14.2 使用 EnvoyFilter 資源配置 Envoy 過濾器 ............................................... 374 14.3 調(diào)用外部的限流請求 ................................................................................ 379 14.4 使用 Lua 擴(kuò)展 Istio 的數(shù)據(jù)平面 ............................................................... 384 14.5 使用 WebAssembly 擴(kuò)展 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 及其注入選項(xiàng) ............................................... 401 C Istio 安全——SPIFFE ......................................................... 407 D Istio 故障排查 ....................................................................417 E 如何配置虛擬機(jī)接入網(wǎng)格 ..................................................... 425
你還可能感興趣
我要評論
|