聊聊第三方注册中心集成Istio

  发布时间:2025-11-05 08:36:03   作者:玩站小弟   我要评论
引言公司往往有自己的注册中心,有的使用Nacos、zookeeper等,还有自研的。这些在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资源交互的第方入口,WordPress模板可以通过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

登陆istiod容器

kubectl -n istio-system exec -it istiod-56f8cc6cb5-xkg4m -- /bin/bash 

通过registryz命令查看

curl http://127.0.0.1:15014/debug/registryz [  {         "Attributes": {             "ServiceRegistry": "External",             "Name": "org.apache.dubbo.demo.demoservice",             "Namespace": "dubbo",             "Labels": {                 "manager": "aeraki",                 "registry": "dubbo2istio"             },             "UID": "",             "ExportTo": null,             "LabelSelectors": null,             "ClusterExternalAddresses": null,             "ClusterExternalPorts": null         },         "ports": [             {                 "name": "tcp-dubbo",                 "port": 20880,                 "protocol": "TCP"             }         ],         "creationTime": "2021-09-10T09:58:18Z",         "hostname": "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-apiserver通知到istio。

本文转载自微信公众号「瓜农老梁」,可以通过以下二维码关注。转载本文请联系瓜农老梁公众号。

  • Tag:

相关文章

  • 电脑word文档教程表格的使用方法(掌握word表格的关键技巧,轻松编辑文档)

    摘要:在现代社会中,电脑已经成为我们工作和学习的重要工具之一。而其中最常用的办公软件之一就是MicrosoftOffice中的Word。Word提供了丰富的功能和工具,使得我们能够轻松地...
    2025-11-05
  • 10个对Web开发人员有用的HTML文件上传技巧

    简介上传文件功能可以说是项目经常出现的需求。从在社交媒体上上传照片到在求职网站上发布简历,文件上传无处不在。在本文中,我们将讨论 HTML文件上传支持的10种用法,希望对你有用。1. 单文件上传我们可
    2025-11-05
  • IoT产品的10个优秀实践

    如果经历过,有时候就会被人回忆起来。上周末,经过和友人的友人深入地讨论,自己梳理了实现IoT产品的10条经验,并自以为是地称之为“最佳实践”。制造业花了数年甚至数十年时间来磨练他们的产品,但是,在思考
    2025-11-05
  • 简单代码的秘诀—去掉显而易见的,加上有意义的

    成为10倍开发人员有捷径可走吗? 是否有这样一个神奇的秘密,可以帮助我们打开一个全新的软件开发精通和生产力世界?怀疑者们通常会说:“当然没有捷径可走! 每个人都需要不断的练习才能变得更好!”的确如此,
    2025-11-05
  • 主板接线安装教程(详细步骤指南让你轻松安装主板,打造个性化电脑体验)

    摘要:在当今数字化时代,电脑已经成为人们生活中不可或缺的一部分。如果你是一位电脑爱好者或者计算机专业学生,那么你可能对如何正确安装主板有一些疑问。本文将为您提供一份详细的主板接线安装教程...
    2025-11-05
  • 如何用Python清理文本数据?

    不是所有数据格式都会采用表格格式。随着我们进入大数据时代,数据的格式非常多样化,包括图像、文本、图形等等。因为格式非常多样,从一个数据到另一个数据,所以将这些数据预处理为计算机可读的格式是非常必要的。
    2025-11-05

最新评论