一、场景需求:
目前开发环境迁移到k8s集群,运行在k8s内的微服务应用注册到nacos,注册的信息是集群内部的IP与端口,但开发人员在本地办公电脑上启动一个微服务,注册到nacos,注册信息是办公网络的IP与端口,由于办公网络与k8s集群内部网络不通,导致此微服务之间调用有问题。
目前采用的方法是修改pod的网络为主机网络,但这样会产生pod与主机高度粘性,无法发挥k8s自由调度的优势,故进行优化改进。
二、方案图解:
三、具体实施:
一些信息:
- 开发测试k8s集群的pod网段为10.42.0.0/16,svc的网段为10.43.0.0/16
- 公司办公网络为192.168.0.0/16
- k8s集群node节点的网络为192.168.145.0/24,选择的nat节点IP为192.168.145.163
步骤如下:
-
选定k8s内部一台node节点为nat节点(如192.168.145.163,k8s-node5),(专门做路由功能,配置可以差一点),设置禁止调度。
# kubectl taint nodes k8s-node5 forward=k8s-node5:NoSchedule
-
开启nat节点的路由转发
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# sysctl -p
-
设置SNAT
# iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 10.42.0.0/16 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 10.43.0.0/16 -j MASQUERADE
-
在办公网络的出口路由器上添加静态路由
# ip route 10.42.0.0 255.255.0.0 192.168.145.163
# ip route 10.43.0.0 255.255.0.0 192.168.145.163
此时,办公网络与pod网络就可以相互ping通了。