一、場景需求:
目前開發環境遷移到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通了。