一、func(s*Server)initKubeClient(args*PilotArgs)error{ 45個k8s api k8s的28個特征功能 core接口包括對16種資源的控制;
1、服務發現的注冊中心一定要包含K8s;
2、可以通過動态監控目錄中yaml檔案的變化,感覺配置及服務的變化,用于測試;
3、預設pilot運作在k8s的pod上,可以通過環境變量中的host:port建立K8s rest用戶端;
二、func(s*Server)initClusterRegistries(args*PilotArgs)(errerror){
1、通過本地環境的k8s用戶端讀取指定的明文ConfigMap資料;
2、循環解析明文的ConfigMap配置擷取secret密文的配置資訊;
3、将密文資訊最後解析為遠端k8s叢集的連結配置資訊;
4、最後儲存遠端k8s叢集連結配置,及pilot運作的k8s叢集中secret配置資訊;
三、func(s*Server)initMesh(args*PilotArgs)error{
1、初始化網格全局配置,通過入參配置資訊設定;
2、如果入參MeshConfig為null,通過配置檔案加載;
3、如果還沒有,從目前k8s服務的ConfigMap中加載配置;
四、func(s*Server)initMixerSan(args*PilotArgs)error{
1、配置雙向認證機制
五、func(s*Server)initConfigController(args*PilotArgs)error{ Istio一共14總配置類型
1、通過啟動入參中的本地配置存儲控制器設定pilot服務中的配置控制器;
2、建立檔案目錄配置更新方式,定期拉的方式更新記憶體全量配置資訊;
3、建立Kube的配置資訊更新的k8s用戶端方案,按照Group+Version對14個配置項進行分組,建立k8s 通路API;
4、建立新的基本K8s用戶端,注冊所有14個配置項,并保證注冊成功;
5、基于k8s api建立informer機制,用于緩存CRD到本地Cache中,初始化時拉全量并注冊watch回調,保證緩存一緻;
6、同時向informer注冊add,update,delete函數用于處理CRD變更;
7、最後将通用的配置資訊做一層Istio配置資訊的轉化,既:Config轉化為14種配置;
六、func(s*Server)initServiceControllers(args*PilotArgs)error{
1、通過訂閱配置中的ServiceEntry CRD來進行服務及執行個體的發現,通過IstioConfigStore來擷取服務及執行個體
2、通過K8s訂閱service,endpoint,pod,node來擷取服務及執行個體資訊,方式與訂閱配置相同,通過informer方式;
3、通過Zk的方式更新服務及執行個體資訊;
七、func(s*Server)initDiscoveryService(args*PilotArgs)error{
1、建立http服務的DiscoveryService子產品,并注冊在service,serviceInstance,及Config變更時的更新所有服務發現cache的功能,包括V2版本的DiscoveryService中的緩存,及ADS,EDS全局變量中的緩存;
2、建立新版DiscoveryService子產品,并注冊grpc服務,已流式方式擷取服務資訊,并周期性能對注冊上來的Proxy服務推送變更資訊,為了方式并發量大,可以指定推送多少次後,sleep 100ms;
3、開始監聽所有的TCP端口,包括http,grpc的;
八、func(s*Server)initMonitor(args*PilotArgs)error{
1、建立一個監控服務,擷取pilot自身的監控資訊;
九、func(s*Server)initMultiClusterController(args*PilotArgs)(errerror){僅僅實作了k8s多叢集服務監控
1、訂閱目前k8s中secret資源類型資訊,根據之前initClusterRegistries擷取的叢集ClusterId,擷取其他k8s叢集Config資訊;
2、根據遠端k8s叢集Client通過informer訂閱service,endpoint,node,pod資訊,并加到聚合注冊中心控制器中;
3、同時訂閱服務,執行個體,配置變更事件,更新discoveryService緩存,下發所有連接配接的Proxy,實作多k8s叢集服務發現;