什么是服務(wù)網(wǎng)格
術(shù)語服務(wù)網(wǎng)格(Service Mesh)用于描述微服務(wù)之間的網(wǎng)絡(luò),以及通過此網(wǎng)絡(luò)進行的服務(wù)之間的交互料仗。隨著服務(wù)數(shù)量和復(fù)雜度的增加,服務(wù)網(wǎng)格將變的難以理解和管理,對服務(wù)網(wǎng)格的需求包括:
- 服務(wù)發(fā)現(xiàn)
- 負載均衡
- 故障恢復(fù)
- 指標和監(jiān)控
- A / B 測試
- 金絲雀發(fā)布
- 流量控制
- 訪問控制
- 端對端身份驗證
什么是 Istio
Istio 是運行于分布式應(yīng)用程序之上的 非侵入式(無代碼入侵)服務(wù)網(wǎng)格系統(tǒng)规辱,它的主要目的是為了更好更輕松的解決服務(wù)治理問題(Istio 是一套非侵入式一站式服務(wù)治理解決方案)
Istio 的實現(xiàn)原理是绿鸣,為每個微服務(wù)部署一個 Sidecar疚沐,代理微服務(wù)之間的所有網(wǎng)絡(luò)通信。在此基礎(chǔ)上你可以通過 Istio 的控制平面實現(xiàn):
- 針對 HTTP潮模、gRPC亮蛔、WebSocket、TCP 流量的負載均衡
- 細粒度的流量控制行為擎厢,包括路由究流、重試、故障轉(zhuǎn)移动遭、故障注入
- 可拔插的策略層 + 配置 API梯嗽,實現(xiàn)訪問控制、限速沽损、配額
- 自動收集指標灯节、日志,跟蹤集群內(nèi)所有流量,包括 Ingress/Egress
- 基于強身份認證和授權(quán)來保護服務(wù)之間的通信
Istio 核心特性
流量管理
使用 Istio 你可以很容易的通過配置炎疆,對流量和 API 調(diào)用進行控制卡骂。服務(wù)級別的可配置屬性包括斷路器、超時形入、重試全跨,Istio 支持基于流量百分比切分的 A/B 測試、金絲雀滾動發(fā)布亿遂、分階段滾動發(fā)布
安全性
可以提供安全信道浓若,管理身份驗證和授權(quán),加密通信流量蛇数,聯(lián)用 K8S 的網(wǎng)絡(luò)策略可以獲得更多益處挪钓,例如保護 Pod-to-Pod 之間的通信
可觀察性
Istio 強大的跟蹤、監(jiān)控耳舅、日志能力碌上,讓服務(wù)網(wǎng)格內(nèi)部結(jié)構(gòu)更容易觀察(一個服務(wù)的性能對上下游的影響可以直觀的展現(xiàn)在儀表盤上)
Istio 架構(gòu)
從整體上看,Istio 的服務(wù)網(wǎng)格由數(shù)據(jù)平面浦徊、控制平面兩部分組成:
- 數(shù)據(jù)平面: 由一系列作為 Sidecar 部署的智能代理(Envoy)構(gòu)成馏予。這些代理聯(lián)合 Mixer, 中繼盔性、控制所有微服務(wù)之間的網(wǎng)絡(luò)通信霞丧。需要注意,還有一些 Envoy 是獨立部署(而非 Sidecar)的冕香,用來實現(xiàn) K8S Ingress 控制器蛹尝、Istio 的 Ingress/Egress 網(wǎng)關(guān)
- 控制平面: 負責管理、配置智能代理暂筝,實現(xiàn)流量路由;配置 Citadel 實現(xiàn) TLS 證書管理硬贯;配置 Mixers 來應(yīng)用策略焕襟、收集指標
Envoy
Istio 使用一個擴展過的 Envoy 版本。Envoy 是基于 C++ 開發(fā)的高性能代理饭豹,Istio 使用它的以下特性:
- 動態(tài)服務(wù)發(fā)現(xiàn)
- 負載均衡
- TLS termination(可將后端的 HTTP 服務(wù)包裝為 HTTPS)
- HTTP/2 和 gRPC 代理
- 斷路器
- 健康檢查
- 分階段(基于流量百分比)發(fā)布
- 故障注入
- 豐富的監(jiān)控指標
一般情況下 Envoy 在和目標服務(wù)的相同 Pod 中鸵赖,以 Sidecar 形式部署。少量的 Istio 組件的主進程就是 Envoy拄衰,包括 Ingress 控制器它褪、Ingress/Egress 網(wǎng)關(guān)
Mixer
一個平臺無關(guān)的組件:
- 為服務(wù)網(wǎng)格應(yīng)用訪問控制策略
- 從 Envoy 和其它服務(wù)中收集指標
- Envoy 收集的請求級別的屬性,被發(fā)送到 Mixer 進行分析
Mixer 提供了一個靈活的插件模型翘悉,讓 Istio 能夠靈活的和多種宿主機環(huán)境茫打、基礎(chǔ)設(shè)施后端進行對接
Pilot
該組件是 Istio 的控制器,它會監(jiān)控各種規(guī)則、策略(通常存儲在 K8S 中)老赤,一旦配置文件發(fā)生變化轮洋,就會提取、處理抬旺,并同步給 Envoy:
- 為 Envoy 提供服務(wù)發(fā)現(xiàn)
- 為智能路由(AB 測試弊予、金絲雀部署)提供流量管理能力
- 提供彈性(超時、重試开财、斷路器)
- 分發(fā)身份驗證策略給 Envoy
Pilot 將高級別的路由規(guī)則轉(zhuǎn)換為 Envoy 理解的配置信息汉柒,并在運行時將這些配置傳播到 Sidecars,Pilot 將平臺相關(guān)的服務(wù)發(fā)現(xiàn)機制抽象為標準的(Envoy data plane API责鳍,xDS)格式碾褂,這讓 Istio 可以在 K8S、Consul薇搁、Nomad 等多種環(huán)境下運行
Citadel
提供服務(wù)與服務(wù)之間斋扰、或者針對終端用戶的身份驗證功能,可以加密服務(wù)網(wǎng)格中的流量
Kiali
為我們提供了查看相關(guān)服務(wù)與配置提供了統(tǒng)一化的可視化界面啃洋,并且能在其中展示他們的關(guān)聯(lián)传货;同時他還提供了界面讓我們可以很方便的驗證 istio 配置與錯誤提示