文章目錄
Istio工作機制
Istio主要架構分爲控制面和數據面兩部分。
數據面: Envoy
控制面: Pilot
、Mixer
、Citadel
工作機制
- 自動注入: k8s中,當有pod創建時候,調用sidecar-injector服務,修改程序描述信息,注入sidecar。主要就是envoy。
- 流量攔截:在pod中用iptables攔截容器的流量
- 服務發現: Envoy調用Pilot的服務發現接口獲取目標服務的實例列表
- 負載均衡: 服務發起方的Envoy根據負載均衡策略選擇服務實例
- 流量治理: Envoy從Pilot獲取流量規則,將流量轉發到對應的服務上。
- 訪問安全: Envoy之間的通訊進行雙向認證和通道加密,並基於服務的身份授權管理。其中證書和密鑰主要由Citadel組件維護
- 服務遙測: 服務通訊期間,雙方的Envoy都會向Mixer組件上報訪問數據。
- 策略執行: 可以用Mixer控制服務間的訪問
- 外部訪問: 在網格的入口有一個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的控制中樞,向數據平面下發規則。
包括 VirtualService
、DestinationRule
、Gateway
、ServiceEntry
等一系列的流量治理規則。將規則轉換成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 的調用鏈、 監控等功能,可以選擇安裝來完成完整的服務監控管理功能。