1 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