kubernetes+dubbo 架构集群内外网络通讯怎么解决

2019-04-29 16:01:00 +08:00
 symb0l

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

9060 次点击
所在节点    Kubernetes
9 条回复
symb0l
2019-04-29 18:06:49 +08:00
v2ex 的老哥们,救命哇。。
monsterxx03
2019-04-29 18:10:29 +08:00
给 k8s 内的 dubbo 服务设置一个 NodePort 类型的 service 不就完了吗: https://kubernetes.io/docs/concepts/services-networking/service/#nodeport
symb0l
2019-04-29 18:17:40 +08:00
@monsterxx03 谢谢回答,有考虑过,但后期 K8S 节点扩容后,集群外服务往集群内的一些网络权限变更就得重新搞,一个服务就得开一个策略,假设有一百个服务,扩容一台节点,就得加一百条策略,网络工程师应该会砍死我,。
monsterxx03
2019-04-29 18:31:42 +08:00
自建的话我也想不到什么好办法, 你们估计用的 flannel 之类的 overlay 网络. 在 aws 上的话可以通过 vpc cni plugin 直接给 pod 分配 vpc 里的 ip, 这样 k8s 内外的服务可以直接通过 ip 通信.

我对 dubbo 不熟悉, overlay 网络, 你要内外通信, 必然需要一个 service 做 NodePort, 不知道 dubbo 有没有单端口的代理方案.
YzSama
2019-05-10 18:11:57 +08:00
我猜楼主是想让研发的网络与集群内部网络通信。

如果是这样的话,只需要进行打通就可以了。
Ksmriacle
2020-06-08 15:40:07 +08:00
兄弟解决了么
symb0l
2020-07-22 17:21:01 +08:00
@Ksmriacle 不好意思,平时比较少登陆 v2ex

目前是这样解决的,在容器部署模板里的 env 部分定义一个变量,并声明 valueFrom.fieldRef.fieldPath 的值为 status.hostIP,这样容器启动后就可以通过环境变量获取到宿主机的 IP 地址,将注册地址改为主机地址,外部 zookeeper 对主机地址可见即可。
mrsupns
2020-09-17 10:04:24 +08:00
能发一个 demo 吗
monkeyWie
2021-11-15 17:42:42 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559780

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX