在容器化的过程中,我们遇到了一个非常棘手的问题。玩过 k8s 的知道,k8s 有自己的一套网络管理机制,集群内的容器和容器之间是可以相互通信的。但是在容器化升级改造的过程中,不可能一步到位的将所有的服务全部迁移到 k8s 的容器当中来,毕竟新的技术在没有经过实践趟坑时,肯定不能轻易的全面铺开升级。那么就涉及到集群外的服务访问集群内的服务,集群内容器中的 ip 都是 k8s 管理的 ip,dubbo 服务注册的也是获取的容器内分配的 ip。比如我们的宿主主机 ip 是 172.10.15.xx,容器内的 ip 就是 10.10.2.x。群外的和宿主主机同网段的服务通过拿到 dubbo 的注册的 10.10.2.x 也根本没法访问容器内的 dubbo 服务,请问如何解决这个问题?
1
symb0l 231 天前
v2ex 的老哥们,救命哇。。
|
![]() |
2
monsterxx03 231 天前
给 k8s 内的 dubbo 服务设置一个 NodePort 类型的 service 不就完了吗: https://kubernetes.io/docs/concepts/services-networking/service/#nodeport
|
3
symb0l 231 天前
@monsterxx03 谢谢回答,有考虑过,但后期 K8S 节点扩容后,集群外服务往集群内的一些网络权限变更就得重新搞,一个服务就得开一个策略,假设有一百个服务,扩容一台节点,就得加一百条策略,网络工程师应该会砍死我,。
|
![]() |
4
monsterxx03 231 天前
自建的话我也想不到什么好办法, 你们估计用的 flannel 之类的 overlay 网络. 在 aws 上的话可以通过 vpc cni plugin 直接给 pod 分配 vpc 里的 ip, 这样 k8s 内外的服务可以直接通过 ip 通信.
我对 dubbo 不熟悉, overlay 网络, 你要内外通信, 必然需要一个 service 做 NodePort, 不知道 dubbo 有没有单端口的代理方案. |
![]() |
5
YzSama 220 天前
我猜楼主是想让研发的网络与集群内部网络通信。
如果是这样的话,只需要进行打通就可以了。 |