Istio架構概覽

Istio工作機制

Istio主要架構分爲控制面和數據面兩部分。

數據面: Envoy
控制面: PilotMixerCitadel

工作機制

  1. 自動注入: k8s中,當有pod創建時候,調用sidecar-injector服務,修改程序描述信息,注入sidecar。主要就是envoy。
  2. 流量攔截:在pod中用iptables攔截容器的流量
  3. 服務發現: Envoy調用Pilot的服務發現接口獲取目標服務的實例列表
  4. 負載均衡: 服務發起方的Envoy根據負載均衡策略選擇服務實例
  5. 流量治理: Envoy從Pilot獲取流量規則,將流量轉發到對應的服務上。
  6. 訪問安全: Envoy之間的通訊進行雙向認證和通道加密,並基於服務的身份授權管理。其中證書和密鑰主要由Citadel組件維護
  7. 服務遙測: 服務通訊期間,雙方的Envoy都會向Mixer組件上報訪問數據。
  8. 策略執行: 可以用Mixer控制服務間的訪問
  9. 外部訪問: 在網格的入口有一個Envoy扮演入口網關的角色。

服務模型

由istio服務、服務版本、服務實例幾個對象構成

服務模型約束

  • 端口命名: name: <protocol>[-<suffix>],協議支持常用的服務協議,如mysql、redis,如無指定,默認爲tcp協議
  • 服務關聯: pod需要關聯到服務
  • deployment使用app和version標籤: 區分版本

istio服務

k8s只要滿足上文提到的服務模型約束,就可以轉爲 istio 的服務並配置規則進行流量治理。如最小的k8s模型加上端口命名

k8s主體是 workload,istio 的對象主體是 service,沒有訪問方式的workload 不是 istio 治理對象。Kubernetes 的 Service 定義 就是 Istio 服務 的 元 數據。

istio服務版本

通過deployment的app: service-name 來關聯服務。 通過version: v<version> 標籤來區分服務不同版本。 可以根據這個實現灰度發佈等功能。

istio服務實例

Istio 的 ServiceInstance 主要包括 Endpoint、 Service、 Labels、 AvailabilityZone 和 ServiceAccount 等屬性, Endpoint 是其中最主要 的屬性,表示這個實例對應的網絡後端( ip: port), Service 表示這個服務 實例歸屬的服務。

istio的主要組件

kubectl get svc -n istio-system 可以查看完整組件列表

istio-pilot

pilot領航員的意思,顧名思義,是istio的控制中樞,向數據平面下發規則。

包括 VirtualServiceDestinationRuleGatewayServiceEntry等一系列的流量治理規則。將規則轉換成Envoy規則,通過xDS協議發送給Envoy。Envoy平時通過gRPC流式訂閱Pilot的配置資源。

istio-telemetry

Mixer服務組件之一,專門收集遙測數據。服務間交互時,兩邊的Envoy均會將遙測數據上報給該組件。

istio-policy

Mixer服務組件之一,機制和流程同telemetry。 作用主要是服務間調用時,兩邊Envoy均會請求istio-policy來檢查接口是否允許訪問。

istio-citadel

citadel是城堡,象徵着安全。是istio平時容易忽視但是又很重要的組件。負責自動生成、分發、輪換、撤銷密鑰和證書。它會監聽apiserver,以secret形式爲每個服務生成證書,並在pod創建時掛載到創建的pod上。可以建立雙向TLS通道。

istio-galley

galley是戰艦。負責配置管理,驗證配置信息格式和正確性。並提供這些配置給Pilot和Mixer使用。

istio-sidecar-injector

負責注入組件。只要開啓了自動注入。它會監聽apiserver,當有Pod創建的時候,講sidecar容器 istio-proxy(Envoy)注入到原來Pod中,並修改iptables來將請求都經過Envoy。

istio-proxy

istio中的輕量數據代理,默認是用Envoy實現。istio-proxy容器中除了有Envoy,還有pilot-agent的守護進程。

istio-ingressgateway

入口網關。外部訪問內部服務都經過它。是一個LoadBalance類型的Service

其它組件

除了以“ istio” 爲前綴的以上幾個 Istio 自有的組件,在集羣中一般還安裝 Jaeger- agent、 Jaeger- collector、 Jaeger- query、 Kiali、 Prometheus、 Tracing、Zipkin 組件,這些組件提供了 Istio 的調用鏈、 監控等功能,可以選擇安裝來完成完整的服務監控管理功能。

博客原文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章