Istio 架構
Istio 服務網格從邏輯上分為數據平面和控制平面。
- 數據平面 由一組智能代理(Envoy)組成,被部署為 sidecar。這些代理負責協調和控制微服務之間的所有網絡通信。他們還收集和報告所有網格流量的遙測數據。
- 控制平面 管理並配置代理來進行流量路由。
Istio 核心組件
下圖展示了組成每個平面的不同組件:
Istio 中的流量分為數據平面流量和控制平面流量。
- 數據平面流量是指工作負載的業務邏輯發送和接收的消息
- 控制平面流量是指在 Istio 組件之間發送的配置和控制消息用來編排網格的行為
- Istio 中的流量管理特指數據平面流量
Envoy
Istio 使用 Envoy 代理的擴展版本。Envoy 是用 C++ 開發的高性能代理,用於協調服務網格中所有服務的入站和出站流量。Envoy 代理是唯一與數據平面流量交互的 Istio 組件。
Envoy 代理被部署為服務的 sidecar,在邏輯上為服務增加了 Envoy 的許多內置特性,例如:
- 動態服務發現
- 負載均衡
- TLS 終端
- HTTP/2 與 gRPC 代理
- 熔斷器
- 健康檢查
- 基於百分比流量分割的分階段發布
- 故障注入
- 豐富的指標
這種 sidecar 部署允許 Istio 提取大量關於流量行為的信號作為屬性。Istio 可以使用這些屬性來實施策略決策,並將其發送到監視系統以提供有關整個網格行為的信息。
由 Envoy 代理啟用的一些 Istio 的功能和任務包括:
- 流量控制功能:通過豐富的 HTTP、gRPC、WebSocket 和 TCP 流量路由規則來執行細粒度的流量控制。
- 網絡彈性特性:重試設置、故障轉移、熔斷器和故障注入。
- 安全性和身份驗證特性:執行安全性策略以及通過配置 API 定義的訪問控制和速率限制。
- 基於 WebAssembly 的可插拔擴展模型,允許通過自定義策略實施和生成網格流量的遙測。
Pilot
Pilot
為 Envoy sidecar 提供服務發現、用於智能路由的流量管理功能(例如,A/B 測試、金絲雀發布等)以及彈性功能(超時、重試、熔斷器等)。
Pilot
將控制流量行為的高級路由規則轉換為特定於環境的配置,並在運行時將它們傳播到 sidecar。Pilot 將特定於平台的服務發現機制抽象出來,並將它們合成為任何符合 Envoy API 的 sidecar 都可以使用的標准格式。
下圖展示了平台適配器和 Envoy 代理如何交互。
- 平台啟動一個服務的新實例,該實例通知其平台適配器。
- 平台適配器使用
Pilot
抽象模型注冊實例。 Pilot
將流量規則和配置派發給Envoy
代理,來傳達此次更改。
Citadel
Citadel
通過內置的身份和證書管理,可以支持強大的服務到服務以及最終用戶的身份驗證。您可以使用 Citadel 來升級服務網格中的未加密流量。使用 Citadel
operator 可以執行基於服務身份的策略。
Galley
Galley
是 Istio 的配置驗證、提取、處理和分發組件。它負責將其余的 Istio 組件與從底層平台(例如 Kubernetes)獲取用戶配置的細節隔離開來。
Istio 部署模型
您可以將單個網格配置為包括多集群。多集群部署可為您提供更大程度的隔離和可用性,但會增加復雜性。 如果您的系統具有高可用性要求,則可能需要集群跨多個可用區和地域。 對於應用變更或新的版本,您可以在一個集群中配置金絲雀發布,這有助於把對用戶的影響降到最低。 此外,如果某個集群有問題,您可以暫時將流量路由到附近的集群,直到解決該問題為止。
Istio 1.6 性能總結
Istio 負載測試 網格包含了 1000 個服務和 2000 個 sidecar,全網格范圍內,QPS 為 70,000。 在使用 Istio 1.6 運行測試后,我們得到了如下結果:
- 通過代理的 QPS 有 1000 時,Envoy 使用了 0.5 vCPU 和 50 MB 內存。
- 網格總的 QPS 為 1000 時,
istio-telemetry
服務使用了 0.6 vCPU。 - Pilot 使用了 1 vCPU 和 1.5 GB 內存。
- 90% 的情況 Envoy 代理只增加了 2.8 ms 的延遲。
參考文獻
https://preliminary.istio.io/docs/ops/deployment/architecture/
https://preliminary.istio.io/zh/docs/ops/deployment/architecture/
https://preliminary.istio.io/zh/docs/ops/deployment/deployment-models/
https://preliminary.istio.io/docs/ops/deployment/performance-and-scalability/
https://preliminary.istio.io/docs/ops/deployment/requirements/