Istio pilot启动过程浅谈

func(s*Server)initKubeClient(args*PilotArgs)error{ 45k8s api k8s28个特征功能 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集群服务发现;

你可能感兴趣的:(ServiceMesh)