Pilot配置分發機制
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CO0cDN0kzY0gjN4kDOmlTNzYzX4QDOxETM3IzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
- Pilot負責網格中資料平面相關的配置資訊的擷取、生成及分發,它通過使用者配置及服務系統資料庫擷取網格配置資訊并将其轉換為xDS接口的标準資料格式,而後經gPRC分發至相關的Envoy;
- Service Registry:服務系統資料庫中存儲有相關平台上注冊的各Service的相關資訊,例如kubernetes的services等;
- Config Storage:配置存儲,例如Kubernetes的API Server,配置資訊通常是由使用者提供,對于Kubernetes來說,它們以kubernetes CRD格式提供并存儲于API Server中;
- 事實上,基于擴充卡機制,Pilot還可以從Mesos,、Cloud Foundry和Consul等平台中擷取服務資訊,而必要時使用者也可以開發擴充卡将其他提供服務發現的元件內建到Pilot中;
Pilot流量管理的相關元件
- Pilot工作架構的相關元件包括:pilot-discovery、k8s apiserver、Envoy(istio-proxy)、pilot-agent,以及指令工具istioctl和kubectl;
- 事實上,Pilot項目自身的元件也是由工作于控制平面的polit-discovery和工作于資料平面的pilot-agent共同組成;
- 控制平面相關元件
- pilot-discovery:即圖中的Discovery Services,它主要完成以下功能
- 從Service Registry中擷取服務資訊;
- 從API Server中擷取配置資訊;
- 将服務資訊和配置資訊轉化為Envoy的配置格式,并通過xDS API完成分發;
- Kubernetes API Server
- 配置存儲系統,負責存儲使用者以kubernetes crd格式(例如VirtualService和DestinationRule等)提供的配置資訊;
- 資料平面相關元件:Istio proxyv2鏡像啟動的容器中會運作pilot-agent和envoy兩個程序;
- pilot-agent
- 基于k8s api server為envoy初始化出可用的boostrap配置檔案并啟動envoy;
- 監控并管理envoy的運作狀态,包括envoy出錯時重新開機envoy,以及envoy配置變更後将其重載等;
- envoy
- envoy由pilot-agent程序基于生成bootstrap配置進行啟動,而後根據配置中指定的pilot位址,通過xDS API擷取動态配置資訊;
- Sidecar形式的Envoy通過流量攔截機制為應用程式實作入站和出站代理功能;