简介公司往往有自己的注册中心,有的使用Nacos、zookeeper等,有的自研。这些istio系统之外的注册中心需要集成到grid系统中,让注册中心和配置中心的事件通知发送到istio,再通过istio发送到数据面。istio集成第三方registry通常有3种方式:方式1修改源码实现serviceregistry。将打包成istio的ServiceEntry和WorkloadEntry资源写入到Kubernetes的apiserveristiod中。收到监听后,转换完成。方法一需要修改istio的源码,重耦合后难以升级。方法二看起来比较简单,但调试起来比较困难,给开发造成障碍;就行业实践而言,方法3是使用最广泛的。本文将分析第三种方法如何集成istio。在此之前,您需要检查一下kubernetes的总体架构。一、k8s架构简述架构及概念kube-apiserver:与Kubernetes资源交互的入口,可通过kubectl或client-go等语言库访问kube-scheduler:负责资源调度和计算,分发PodtoComputingnodeetcd:key-value存储数据库,保存Kubernetes集群相关数据kube-controller-manager:运行一系列controller的组件,如:nodecontroller,taskcontroller,endpointcontroller等kubelete:运行在计算节点中,通过监控控制平面接受指令,在节点中执行操作kube-proxy:运行在计算节点上的网络代理,负责Pod内外的网络通信代理Pod创建过程发起创建请求到kube-apiserver通过kubectl或client-go类库kube-apiserver将请求信息持久化到etcd数据库中。kube-scheduler检测到request后,计算Pod应该分配给哪个Node,并将分配策略写入etcd数据库。Kubelet检测到etcd的分配策略后,执行该策略,调用docker相关api创建容器2.第三方注册中心集成架构图转换过程:从注册中心(Zookeeper)获取change事件,转换成ServiceEntry写入他们进入kube-apiserver;转换通过xDS传递到数据平面。直接写代码说明比较费时间,快速掌握的方法就是参考别人已经实现的。下面是社区项目dubbo2istio,跟踪一下它是如何转换zookeeper的。https://github.com/aeraki-framework/dubbo2istio另外,dubbo示例中的dubbo-demo-api-provider也用到了,地址如下。https://github.com/apache/dubbo/tree/3.0/dubbo-demo/dubbo-demo-api/dubbo-demo-api-provider分析过程如下:通过dubbo-demo-api-注册节点provider向zookeeper注册中心通过跟踪dubbo2istio代码观察转换逻辑并通过client-go类库写入kube-apiserver并通过client-go验证确实写入kube-apiserver转换分析类库**@1**运行服务提供者dubbo-demo-api-provider,让它在注册中心完成注册。@2运行dubbo2istio跟踪其逻辑@3获取zookeeper注册节点并转换为ServiceEntry,转换使用的类库为“istio.io/client-go”@4将转换后的注册信息写入kube-apiserver,写入输入成功无错返回@5然后通过代码查询是否写入成功,可以发现写入成功@6通过命令行查询验证是否写入到kube-apiserver并登录到istiod容器kubectl-nistio-systemexec-itistiod-56f8cc6cb5-xkg4m--/bin/bash查看curlhttp://127.0.0.1:15014/debug/registryz[{"Attributes":{"ServiceRegistry":"External""Name":"org.apache.dubbo.demo.demoservice","Namespace":"dubbo","Labels":{"manager":"aeraki","re??gistry":"dubbo2istio"},"UID":"","ExportTo":null,"LabelSelectors":null,"ClusterExternalAddresses":null,"ClusterExternalPorts":null},"ports":[{"name":"tcp-dubbo","port":20880,"协议":"TCP"}],"创建时间":"2021-09-10T09:58:18Z","主机名";:"org.apache.dubbo.demo.demoservice","address":"0.0.0.0","autoAllocatedAddress":"240.240.0.5","Mutex":{},"Resolution":0,"MeshExternal":false},//....]备注:在istio中可以找到服务提供者“org.apache.dubbo.demo.demoservice”,即事件成功从zookeeper注册中心通过kube通知到istio-apiserver本文转载自微信公众号“瓜农老粮”,可通过以下二维码关注。转载本文请联系瓜农老梁公众号。