Istio 1.0學習筆記(五):Istio的基本概念
前面我們在Kubernetes上部署了Istio 1.0並實際操作了一下官方示例應用及流量管理的基本功能。本篇將總結一下Istio的基本概念,加深理解。
1.0 Istio的定義
istio的官網 ofollow,noindex" target="_blank">https://istio.io/ 首頁上用一句話描述了istio的定義: Istio Connect, secure, control, and observe services.
,即Istio用來連線、保護、控制、觀測服務。
- 連線(connect):智慧控制服務之間的流量和API呼叫,進行一系列測試,並通過紅/黑部署逐步的升級
- 保護(secure):通過託管認證、授權和服務之間的通訊加密自動保護服務
- 控制(control):應用策略,確保策略得以執行,並使資源在消費者之間平均分配
- 觀測(Observe):通過豐富的自動跟蹤、監控、日誌觀測服務,瞭解正在發生的事情
根據istio這4個基本功能的解釋,已經對istio有了基本瞭解,後邊準備繼續分別以實操的形式學習這些功能。
2.0 Istio的架構
Istio中的 官方文件 中對Istio的架構做了介紹。下圖是文件中的Istio架構示意圖:
Istio在邏輯上分為資料平面(data plane)和控制平面(control plane)兩部分:
- 資料平面:由一系列以sidecar形式部署的智慧代理(Envoy)組成。這些代理可以調節和控制微服務及混合器(Mixer)之間的所有網路通訊
- 控制平面:負責管理和配置代理來路由流量,除此之外控制平面還配置混合器(Mixer)以執行策略和收集遙測資料
2.1 資料平面(Envoy)
Envoy是Istio的資料平面。Envoy早已經是CNCF的ServiceMesh專案之一,功能強大和穩定。
Istio使用Envoy的擴充套件版本。Envoy是以C++開發的高效能代理,用於接管服務網格中所有服務的所有inbound和outbound流量。 Istio實際上利用了很多Envoy已有的特性,例如:服務的動態發現、負載均衡、TSL終止、HTTP/2和RPC/">gRPC代理、斷路器、健康檢查、基於百分比流量拆分的灰度釋出(Staged rollouts with %-based traffic split)、故障注入以及豐富的度量指標。
Envoy以sidecar部署,與對應的服務在同一個Kubernetes Pod中。這樣的部署方式使得Istio可以將大量了關於流量行為的訊號作為屬性(Attribute)提取出來。這些屬性可以被用來在混合器(Mixer)中執行策略決策,併發送給監控系統,以提供整個Service Mesh的行為資訊。
Sidecar模式允許我們將istio的功能新增到現有的部署中,而無需重構或重寫現有的程式碼。
2.2 控制平面
控制平面對Service Mesh具有強大的控制力。Istio的控制平面由包括以下元件:
-
Pilot(領航員):為 Envoy sidecar 提供服務發現功能,為智慧路由(例如 A/B 測試、金絲雀部署等)和彈性(超時、重試、熔斷器等)提供流量管理功能。 將控制流量行為的高階路由規則轉換為Envoy的相關配置,並在執行時將它們傳播到sidecar。Pilot將平臺特定的服務發現機制抽象化並將其合成為符合 Envoy data plane APIs 的sidecar都可以使用的標準格式。這種鬆耦合的設計使得Istio能夠在多種環境下執行,如Kubernetes、Consul、Nomad,為流量管理提供了統一的管理介面。
-
Mixer(混合器):Mixer是一個平臺獨立的元件,它的職責是在ServiceMesh上實施訪問控制和使用策略(usage policies),並從envoy代理和其它服務中收集遙測資料。 代理提取請求級別的屬性(Attribute),傳送給Mixer進行評估。有關屬性提取和策略評估的更多資訊,請參見 Mixer Configuration documentation 。Mixer包含一個靈活的外掛模型,確保其可以接入各種主機環境和基礎設施的後端。因此,istio從這些細節中抽象出 Envoy代理和Istio管理的服務。
-
Citadel(城堡?):通過內建身份和憑證管理提供強大的服務之間和終端使用者間的認證。可以使用Citadel將ServiceMesh中未加密的流量升級,併為運維人員提供基於服務標識而非網路控制的策略管理能力。Istio 0.5 版本開始支援授權特性 Istio’s authorization feature ,以控制誰可以訪問您的服務。
-
Galley:是Istio 1.0中新引入的元件,在Istio中,承擔配置的匯入、處理和分發任務,為Istio提供了配置管理服務,提供在k8s服務端驗證Istio的CRD 資源的合法性的方法。
2.3 個人理解
前面根據istio文件 What is Istio? 中的內容理解一下Istio架構中各個元件。下面都是個人的簡單理解:
Istio有資料平面和控制平面組成:
- 資料平面是以sidecar執行的Envoy代理,Envoy接收來自控制平面中Pilot的配置資訊。Envoy作為代理接管了服務網格中所有服務的所有inbound和outbound流量。
- 控制平面:
- Pilot:負責與Kubernetes API Server互動。Pilot管理Envoy代理,提供了服務發現、流量管理等功能。 —– 連線(connect)
- Citadel:主要關注安全,為服務之間以及與終端使用者提供認證、授權、憑據管理等功能。 —– 保護(secure)
- Mixer:用來接收來自Envoy代理的指標資料(遙測資料),可以實施訪問控制和使用策略。—- 控制(control) 和 觀測(Observe)
- Galley:為Istio提供配置管理服務
最後,看一下我們前面部署istio時,在istio-system名稱空間下建立了下面的的deployment:
kubectl get deploy -n istio-system NAMEDESIREDCURRENTUP-TO-DATEAVAILABLEAGE grafana111125d istio-citadel111125d istio-egressgateway111125d istio-galley111125d istio-ingressgateway111125d istio-pilot111125d istio-policy111125d istio-sidecar-injector111125d istio-statsd-prom-bridge111125d istio-telemetry111125d istio-tracing111125d prometheus111125d servicegraph111125d
其中包含了 istio-pilot
、 istio-citadel
、 istio-policy
、 istio-telemetry
組成的控制平面。