k8s+dubbo架构集群内外网络通讯解决方案

您所在的位置:网站首页 k8s的service注册到外部nacos k8s+dubbo架构集群内外网络通讯解决方案

k8s+dubbo架构集群内外网络通讯解决方案

2024-06-10 19:13| 来源: 网络整理| 查看: 265

一、问题 k8s有自己的一套网络管理机制,集群内的容器和容器之间是可以相互通信的。 但是在容器化升级改造的过程中,不可能一步到位的将所有的服务全部迁移到k8s的容器当中来,毕竟新的技术在没有经过实践趟坑时,肯定不能轻易的全面铺开升级。 那么就涉及到集群外的服务访问集群内的服务,集群内容器中的ip都是k8s管理的IP,dubbo服务注册的也是获取的容器内分配的IP。 比如宿主机ip是10.20.10.xx,容器内的ip就是172.10.10.x。群外的和宿主主机同网段的服务通过拿到dubbo的注册的172.66.4.x也根本没法访问容器内的dubbo服务。

二、分析 k8s是通过Service来暴露集群内的服务,假如dubbo服务注册的是Service暴露的端口和宿主的IP那么集群外的服务就可以直接访问集群内容器中的服务了。 该方案主要有两个难点: 1.如何获取Service暴露的端口和宿主机的IP注入到POD环境变量; 2.Dubbo服务如何从环境变量获取IP和端口注册到ZK;

关于难点1: 通过downward-api的方式向Pod内注入NodeIP的env; 通过给Pod注入env的方式将NodePort注入到Pod内;(要求先创建Service)

关于难点2: Dubbo在启动阶段提供两对系统属性,用于设置外部通信的IP和端口地址。 DUBBO_IP_TO_REGISTRY — 注册到注册中心的IP地址 DUBBO_PORT_TO_REGISTRY — 注册到注册中心的端口 DUBBO_IP_TO_BIND — 监听IP地址 DUBBO_PORT_TO_BIND — 监听端口

详见链接:https://www.jianshu.com/p/b045dbdb8e12 因此,将NodeIP和NodePort的变量名分别设置为DUBBO_IP_TO_REGISTRY和DUBBO_PORT_TO_REGISTRY Dubbo服务启动自动获取这两个变量,并注册到ZK,不需要修改任何代码; (备注:验证过程发现dubbo2.5.3版本不生效,dubbo2.6.0版本验证成功;2.5.3到2.6.0版本之间未验证)

三、实现过程 Helm Chart文件templates/deployment.yaml 在这里插入图片描述 文件说明 DUBBO_PORT_TO_BIND:Dubbo服务默认启动端口为20880,该变量指定Dubbo服务监听端口;端口要与Service中NodePort相同,否则dubbo服务调用报错; DUBBO_PORT_TO_REGISTRY :注册到ZK的端口 DUBBO_IP_TO_REGISTRY:注册到ZK的IP地址

Helm Chart文件values.yaml 在这里插入图片描述 文件说明 1.指定Service的类型为NodePort; 2.指定dubbo服务默认启动端口为8080;

发版过程Pipeline文件 在这里插入图片描述 步骤1:连接k8s集群,更新helm仓库; 步骤2:查询服务是否部署,如果未部署则部署(保证能获取到Service的NodePort); 步骤3:查询对应服务的NodePort,并赋值给变量; 步骤4:更新服务,将获取到的NodePort注入POD系统变量;



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3