《Service Mesh實戰:用Istio軟負載實現服務網格》為網格服務技術的實戰詳解圖書。作者以初學者角度展示軟負載在分布式架構中承擔的角色,引入容器時代主角Kubernetes;再從路由層面全面展開對Service Mesh 與Istio 的系統介紹和深入剖析,包括其功能與特色;最后通過源碼剖析從實現細節上分析Istio 的幾大關鍵設計。不論你是剛開始接觸軟負載的初學者,還是有一定經驗的架構師,都可以在這本細致入微的圖書中找到想要的實用內容。
周遙:挖財中間件架構師,原阿里巴巴中間件團隊技術專家,8年分布式架構經驗,三項國家發明專利,在軟負載領域擁有相當豐富的經驗,阿里軟負載核心產品VIPServer原作者。
第 1 章 分布式發展史 ............................................................................................... 1
1.1 單機小型機時期 ......................................................................................................... 1
1.1.1 互聯網的誕生................................................................................................. 2
1.1.2 復雜應用拆分................................................................................................. 3
1.1.3 遭遇性能問題................................................................................................. 3
1.2 集群化時期 ................................................................................................................. 4
1.2.1 從高端設備到普通 PC ................................................................................... 4
1.2.2 硬件負載均衡設備 ......................................................................................... 5
1.2.3 資源配置問題................................................................................................. 5
1.2.4 積少成多的優勢 ............................................................................................. 6
1.2.5 集群化架構 .................................................................................................... 6
1.2.6 軟件負載設備................................................................................................. 7
1.3 服務化時期 ................................................................................................................. 8
1.3.1 應用到服務 .................................................................................................... 8
1.3.2 遠程調用 ........................................................................................................ 8
1.3.3 虛擬 IP 地址 ................................................................................................... 9
1.3.4 復雜的調用關系 ........................................................................................... 10
1.3.5 服務治理 ...................................................................................................... 11
1.3.6 旁路負載 ...................................................................................................... 12
1.4 微服務時期 ............................................................................................................... 13
1.4.1 服務細化 ...................................................................................................... 13
1.4.2 架構輕量化 .................................................................................................. 14
1.5 服務網格(Service Mesh)新時期 ......................................................................... 15
1.5.1 多語言的困難............................................................................................... 15
1.5.2 指數級增加的系統復雜度 ........................................................................... 15
1.5.3 Linkerd 誕生 ................................................................................................ 16
1.5.4 第一代服務網格架構 ................................................................................... 17
1.5.5 第二代服務網格架構 ................................................................................... 18
1.5.6 生產應用情況............................................................................................... 19
1.6 本章小結 ................................................................................................................... 20
第 2 章 Service Mesh:以 Istio 為例 ...................................................................... 21
2.1 Istio 的設計理念 ...................................................................................................... 21
2.1.1 Istio 的誕生背景 ......................................................................................... 22
2.1.2 控制一切的兩個平面 ................................................................................... 23
2.1.3 接口與平臺化............................................................................................... 24
2.1.4 中心化與分散化的抉擇 ............................................................................... 25
2.2 數據平面 ................................................................................................................... 27
2.2.1 xDS-API ........................................................................................................ 27
2.2.2 服務負載及流量控制 ................................................................................... 28
2.2.3 入口與出口網關 ........................................................................................... 31
2.2.4 故障應急機制............................................................................................... 32
2.2.5 故障注入 ...................................................................................................... 32
2.3 控制平面 ................................................................................................................... 33
2.3.1 Pilot 結構及功能 ......................................................................................... 33
2.3.2 Mixer 結構及功能 ....................................................................................... 34
2.3.3 穩定性與容災能力 ....................................................................................... 37
2.3.4 請求屬性(Attribute) ................................................................................ 37
2.3.5 操作配置(Operator Config) .................................................................... 38
2.4 安全控制 ................................................................................................................... 40
2.4.1 Citadel 結構及功能 ..................................................................................... 42
2.4.2 Istio 身份(Identity) ................................................................................. 42
2.4.3 認證(Authentication) ............................................................................... 43
2.4.4 鑒權(Authorization) ................................................................................ 44
2.5 Hello, Istio! ............................................................................................................... 45
2.5.1 安裝 Docker ................................................................................................. 45
2.5.2 安裝 Kubernetes .......................................................................................... 47
2.5.3 初始化 Master 節點 ................................................................................... 48
2.5.4 配置 weave 網絡插件 ................................................................................ 49
2.5.5 安裝 Istio ..................................................................................................... 49
2.5.6 向 Istio 部署第一個應用 ............................................................................ 50
2.5.7 部署 BookInfo 系統 ................................................................................... 51
2.6 動手體驗 Istio ........................................................................................................... 53
2.6.1 幾個基本概念............................................................................................... 53
2.6.2 體驗 1:按版本路由 .................................................................................... 55
2.6.3 體驗 2:按權重分流 .................................................................................... 56
2.7 BookInfo 示例分析 ................................................................................................. 57
2.7.1 IngressGateway ............................................................................................. 57
2.7.2 IngressGateway 配置 .................................................................................... 58
2.7.3 Sidecar 路由配置 ......................................................................................... 59
2.8 本章小結 ................................................................................................................... 62
第 3 章 理解 Istio 服務網格 .................................................................................... 65
3.1 Kubernetes 服務組網原理 ....................................................................................... 65
3.1.1 四層服務部署結構 ....................................................................................... 66
3.1.2 Node 內部流量路由 .................................................................................... 67
3.1.3 Pause 容器 ................................................................................................... 69
3.1.4 節點間通信接口 CNI ................................................................................... 72
3.1.5 服務發現與 DNS ......................................................................................... 74
3.2 Sidecar 流量接管原理 ............................................................................................. 76
3.2.1 Sidecar 注入方式 ......................................................................................... 76
3.2.2 優雅的容器調試方式 ................................................................................... 78
3.2.3 Sidecar 流量劫持配置 ................................................................................. 79
3.3 Istio 服務組網 ........................................................................................................... 81
3.3.1 鏈路優勢總結............................................................................................... 81
3.3.2 服務傳輸路徑全覽 ....................................................................................... 82
3.4 組建零信任安全網絡(Zero Trust Network) ....................................................... 83
3.4.1 點對點的安全傳輸 ....................................................................................... 84
3.4.2 身份認證(Authentication) ....................................................................... 86
3.4.3 安全命名(Secure Naming) ...................................................................... 89
3.4.4 服務鑒權(Authorization) ........................................................................ 89
3.4.5 啟用 Istio 服務網格安全 .............................................................................. 91
3.5 Istio 的擴展設計 ...................................................................................................... 96
3.5.1 Sidecar 對接適配 ......................................................................................... 96
3.5.2 平臺適配 .................................................................................................... 100
3.5.3 擴展模板(Template) .............................................................................. 104
3.6 本章小結 ................................................................................................................. 108
第 4 章 Istio 周邊生態一覽 ................................................................................... 109
4.1 鏈路跟蹤 Jaeger/Zipkin ......................................................................................... 110
4.1.1 鏈路跟蹤誕生的前因后果 ......................................................................... 110
4.1.2 Jaeger 能做什么 ........................................................................................ 110
4.1.3 如何在 Istio 中使用 Jaeger ..................................................................... 112
4.1.4 使用 Trace ID 來查詢跟蹤信息 ............................................................... 115
4.2 分布式監控 Prometheus ........................................................................................ 117
4.2.1 監控需求的由來及現狀 ............................................................................. 117
4.2.2 Prometheus 的功能及特點 ........................................................................ 118
4.2.3 Prometheus 架構簡介 ................................................................................ 118
4.2.4 如何在 Istio 中使用 Prometheus ............................................................. 120
4.2.5 配置監控報警來實時掌握應用狀態 ......................................................... 124
4.3 監控大盤 Grafana .................................................................................................. 129
4.3.1 什么是 Grafana .......................................................................................... 129
4.3.2 如何在 Istio 中使用 Grafana ................................................................... 130
4.3.3 生成新的 Grafana 儀表盤 ........................................................................ 132
4.3.4 配置 Grafana 報警通道 ............................................................................ 135
4.4 分布式日志 Fluentd............................................................................................... 137
4.4.1 什么是 Fluentd .......................................................................................... 137
4.4.2 如何在 Istio 中使用 Fluentd ................................................................... 139
4.4.3 在 Kibana 中查看日志 ............................................................................. 147
4.4.4 Elasticsearch 映射配置 .............................................................................. 149
4.5 服務圖譜 ................................................................................................................. 156
4.6 本章小結 ................................................................................................................. 157
第 5 章 Istio 部分源碼剖析 ................................................................................... 159
5.1 Sidecar(Envoy)源碼分析 .................................................................................. 160
5.1.1 準備編輯器 ................................................................................................ 160
5.1.2 編譯 Envoy 調試版本 ................................................................................ 161
5.1.3 配置 Envoy 調試環境 .............................................................................. 162
5.1.4 整體架構 .................................................................................................... 168
5.1.5 過濾鏈與 HTTP 代理 ............................................................................... 171
5.1.6 xDS 相關邏輯 ............................................................................................ 182
5.2 Pilot 源碼分析 ........................................................................................................ 187
5.2.1 Go 語言簡介 .............................................................................................. 187
5.2.2 編譯 Istio 調試版本 ................................................................................. 188
5.2.3 配置 Istio 調試環境 ................................................................................. 192
5.2.4 用單元測試快速調試 ................................................................................. 195
5.2.5 如何進行啟動調試 ..................................................................................... 196
5.2.6 Pilot 初始化與平臺對接 ........................................................................... 198
5.2.7 模型數據映射及 CRD 監聽 ..................................................................... 203
5.2.8 Envoy xDS 對接服務 ................................................................................ 206
5.3 Mixer 源碼分析 ..................................................................................................... 211
5.3.1 Mixer 初始化邏輯 ..................................................................................... 213
5.3.2 前置檢查邏輯詳解 ..................................................................................... 217
5.3.3 適配器數據流及模板原理 ......................................................................... 223
5.3.4 緩存原理與實現 ......................................................................................... 233
5.4 本章小結 ................................................................................................................. 244
第 6 章 服務網格企業實踐 .................................................................................... 245
6.1 升級,值得嗎 ......................................................................................................... 246
6.1.1 升級服務網格的基本要求 ......................................................................... 246
6.1.2 如何評估是否需要升級 ............................................................................. 247
6.2 從架構上考慮的問題 ............................................................................................. 248
6.2.1 當前系統所處的狀態 ................................................................................. 248
6.2.2 遷移中需要考慮的幾點 ............................................................................. 249
6.3 螞蟻金服 SOFAMesh 簡介 .................................................................................... 251
6.3.1 項目組成 .................................................................................................... 251
6.3.2 特色功能 .................................................................................................... 252
6.4 螞蟻金服漸近式遷移最佳實踐 ............................................................................. 253
6.4.1 制定總體路線............................................................................................. 253
6.4.2 保證遷移前后服務網絡互通 ..................................................................... 256
6.4.3 透明攔截帶來的彈性升級 ......................................................................... 256
6.4.4 遺留架構在遷移過程中的問題 ................................................................. 257
6.5 本章小結 ................................................................................................................. 260
第 7 章 結語及附錄 .............................................................................................. 261
7.1 服務網格在整體架構中的定位 ............................................................................. 261
7.1.1 現代軟負載應具備的功能 ......................................................................... 261
7.1.2 服務網格在系統技術棧中的定位 ............................................................. 262
7.2 軟負載發展方向與未來 ......................................................................................... 263
7.2.1 技術發展的本質 ......................................................................................... 263
7.2.2 再談軟負載的發展 ..................................................................................... 264
7.3 附錄——A-Mixer 所有的支持屬性值 .................................................................. 266
7.4 引用目錄 ................................................................................................................. 266