天天看點

[讀書筆記] - Istio架構

1 Istio的工作機制

[讀書筆記] - Istio架構
  • 控制面
    • Pilot
    • Mixer
    • Citadel
  • 資料面
    • Envoy

2 Istio的服務模型

2.1 服務

定義:K8S中的serivce隻要滿足Istio的限制即可轉換為Istio的service并配置規則進行流量治理

限制1:端口命名,且必須是[-]的格式。

  • protocol:可以是tcp、http、http2、https、grpc、tls、mongo、mysql、redis等
  • 如果端口命名沒有基于以上格式,則端口流量會被當做TCP流量處理

限制2:服務關聯,pod需要關聯到serivce,如果一個pod屬于多個service,那麼service不能再同一個端口上使用不同的協定。

  • 在Istio0.8後,一個pod隻能屬于一個service

限制3:deployment必須顯示包含app和version标簽

  • app标簽用于分布式追蹤時補齊上下文資訊
  • version标簽用于遙測資料補齊上下文資訊

2.2 服務版本

定義:将一個service關聯到多個deployment,每個deployment對應一個服務的版本,實作灰階釋出

[本身K8s并不支援灰階釋出。但是K8s 可以通過暫停滾動更新實作金絲雀釋出,分流小部分流量,等釋出一段時間後沒有問題再繼續滾動更新。但是因為暫停滾動釋出無法在一個确切的位置暫停,是以單純使用K8s進行金絲雀釋出,最好還是使用兩個不同的deployment,并同時調整它們pod的數量。]

  • 保證app标簽和service的标簽選擇器一緻,確定service能關聯到領兩個不同的deployment的pod
  • 使用的鏡像不同,version标簽不同,意味着服務的不同版本,進而可以執行不同的路由規則

2.3 服務執行個體

定義:真正處理服務請求的後端

  • Endpoint
  • Service
  • Labels
  • AvailabilityZone
  • ServiceAccount

3 Istio的主要元件

3.1 Istio-pilot

  • 服務發現
  • 向Envoy下發規則
    • 流量治理
    • 認證授權

3.2 Istio-telemetry

收集遙測資料的Mixer服務元件

3.3 Istio-policy

Envoy在轉發服務的請求前調用Check接口檢查是否允許通路

  • 配額
  • 授權
  • 白名單

3.4 Istio-citadel

提供自動生成、分發、輪換與撤銷秘鑰和證書功能

  • 以secret形式存放證書秘鑰
  • 在pod建立時挂載到pod上
  • 實作雙向TLS認證、通道加密、通路授權等安全功能

3.5 Istio-galley

  • 負責配置管理的元件,驗證配置資訊的格式和内容的正确性
  • 将配置資訊提供給Pilot和Mixer服務使用

3.6 Istio-sidecar-injector

自動注入元件,開啟後在pod建立時會自動調用在pod中注入sidecar容器

3.7 Istio-proxy

sidecar容器的正式名字

  • Envoy
  • pilot-agent守護程序

3.8 Istio-ingressgateway

從服務網格外通路服務網格内必須經過這個gateway

3.9 其他元件

服務監控管理

  • Jaeger-agent
  • Jaeger-conllector
  • Jaeger-quer
  • Kiali
  • Prometheus
  • Tracing
  • Zipkin