一、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集群服务发现;