Istio 服務網格從邏輯上分爲數據平面和控制平面。git
下圖展現了組成每一個平面的不一樣組件:github
Istio 中的流量分爲數據平面流量和控制平面流量。api
Istio 使用 Envoy 代理的擴展版本。Envoy 是用 C++ 開發的高性能代理,用於協調服務網格中全部服務的入站和出站流量。Envoy 代理是惟一與數據平面流量交互的 Istio 組件。安全
Envoy 代理被部署爲服務的 sidecar,在邏輯上爲服務增長了 Envoy 的許多內置特性,例如:網絡
這種 sidecar 部署容許 Istio 提取大量關於流量行爲的信號做爲屬性。Istio 可使用這些屬性來實施策略決策,並將其發送到監視系統以提供有關整個網格行爲的信息。架構
由 Envoy 代理啓用的一些 Istio 的功能和任務包括:負載均衡
Pilot
爲 Envoy sidecar 提供服務發現、用於智能路由的流量管理功能(例如,A/B 測試、金絲雀發佈等)以及彈性功能(超時、重試、熔斷器等)。ide
Pilot
將控制流量行爲的高級路由規則轉換爲特定於環境的配置,並在運行時將它們傳播到 sidecar。Pilot 將特定於平臺的服務發現機制抽象出來,並將它們合成爲任何符合 Envoy API 的 sidecar 均可以使用的標準格式。微服務
下圖展現了平臺適配器和 Envoy 代理如何交互。性能
Pilot
抽象模型註冊實例。Pilot
將流量規則和配置派發給 Envoy
代理,來傳達這次更改。Citadel
經過內置的身份和證書管理,能夠支持強大的服務到服務以及最終用戶的身份驗證。您可使用 Citadel 來升級服務網格中的未加密流量。使用 Citadel
operator 能夠執行基於服務身份的策略。
Galley
是 Istio 的配置驗證、提取、處理和分發組件。它負責將其他的 Istio 組件與從底層平臺(例如 Kubernetes)獲取用戶配置的細節隔離開來。
您能夠將單個網格配置爲包括多集羣。多集羣部署可爲您提供更大程度的隔離和可用性,但會增長複雜性。 若是您的系統具備高可用性要求,則可能須要集羣跨多個可用區和地域。 對於應用變動或新的版本,您能夠在一個集羣中配置金絲雀發佈,這有助於把對用戶的影響降到最低。 此外,若是某個集羣有問題,您能夠暫時將流量路由到附近的集羣,直到解決該問題爲止。
Istio 負載測試 網格包含了 1000 個服務和 2000 個 sidecar,全網格範圍內,QPS 爲 70,000。 在使用 Istio 1.6 運行測試後,咱們獲得了以下結果:
istio-telemetry
服務使用了 0.6 vCPU。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/