谈谈第三方注册中心集成Istio
发布时间:2021-11-05 13:23:11 所属栏目:语言 来源:互联网
导读:引言 公司往往有自己的注册中心,有的使用Nacos、zookeeper等,还有自研的。这些在istio体系外的注册中心需要融入网格体系,让注册中心以及配置中心事件通知到istio,进而通过istio下发到数据面去。 第三方注册中心集成到istio通常有三种做法: 方式一 修改
引言 公司往往有自己的注册中心,有的使用Nacos、zookeeper等,还有自研的。这些在istio体系外的注册中心需要融入网格体系,让注册中心以及配置中心事件通知到istio,进而通过istio下发到数据面去。 第三方注册中心集成到istio通常有三种做法: 方式一 修改源码实现serviceregistry.Instance接口适配到service controller 方式二 通过自定义MCP Server,例如:Nacos提供了这部分实现 方式三 将第三方注册中心事件封装成istio的ServiceEntry和WorkloadEntry资源写入Kubernetes的api server istiod收到监听后完成转换 方式一需要修改istio源码,重度耦合后续升级istio比较困难;方式二看着比较简单却调试比较困难给开发造成障碍;方式三从业界实践来看采用的最为广泛。 本文将分析第三种方式如何集成istio的,在此之前需要先走查下kubernetes的大体架构。 一、k8s架构简述 架构与概念 kube-apiserver: 与Kubernetes资源交互的入口,可以通过kubectl或者client-go其他语言类库进行访问 kube-scheduler: 负责资源调度与计算,将Pod按照特定策略分发到计算节点 etcd: 键值存储数据库,保存Kubernetes集群相关数据 kube-controller-manager: 运行一系列列控制器的组件,比如:节点控制器、任务控制器、端点控制器等 kubelete: 运行在计算节点中,通过监听控制面接受指令,在节点内执行操作 kube-proxy: 运行在计算节点的网络代理,负责Pod内外的网络通信代理 Pods创建流程 通过kubectl或者client-go类库向kube-apiserver发起创建请求 kube-apiserver将请求信息持久化在etcd数据库 kube-scheduler检测到请求后,计算Pod应该分配到哪个Node,并将分配策略写入etcd数据库 Kubelet检测到etcd的分配策略后,执行该策略调用docker相关api创建container 二、第三方注册中心集成 架构图 转换流程: 从注册中心(Zookeeper)获取变更事件,将其转换为ServiceEntry写入kube-apiserver;Istiod(Pilot)通过监听kube-apiserver收到ServiceEntry后经过转换通过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 通过相关命令验证其的确已经写入到kube-apiserver 转换分析 **@1 ** 运行服务提供者dubbo-demo-api-provider,让其在注册中心完成注册。 @2 运行dubbo2istio跟踪其逻辑 @3 获取zookeeper注册的节点将其转换为ServiceEntry,转换使用的类库为「istio.io/client-go」 @4 将转换好的注册信息写入kube-apiserver,写入成功无错误返回 @5 再通过代码查询是否写入成功,能够查到说明写入成功 @6 通过命令行查询验证是否写入到kube-apiserver (编辑:锡盟站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐