1. 程式人生 > >K8S網絡NAT問題分析與處理

K8S網絡NAT問題分析與處理

ima mat -i 例如 tom 網段 water 客戶端 RoCE

在K8S環境中(集群環境為自建),node節點上的pod網絡互聯互通是采用網絡插件結合etcd實現的。 默認情況下pod訪問集群外部的網絡(例如:訪問百度)走的是對應node節點的nat規則。

最近收到研發反饋的需求,由於我們mysql這種公共服務並沒有放到k8s集群內(對照生產環境使用的也是RDS這種雲服務),所以從mysql的information_schema.processlist這張表查詢到的客戶端連接地址全部都是node節點的ip,而一個node節點上又跑了許多的微服務,這就給研發人員排查客戶端連接問題帶來了一定的困擾,希望運維將pod連接這些外部公共服務的IP地址改成pod ip

一、需求分析

1、Oprman服務運行在server11這個node節點上,pod ip地址為172.35.69.12
技術分享圖片

2、在node節點server11上可以看到,默認的nat表POSTROUTING規則鏈對pod ip這個網段進行了MASQUERADE
技術分享圖片

3、exec方式進入pod內部,去訪問k8s集群外部的mysql服務,發現pod ip被nat了
技術分享圖片

二、修改node節點防火墻規則

# iptables -t nat -D POSTROUTING 1
# kubectl exec -it oprman-test2-tomcat-8477bfdb59-gshzp   /bin/sh
# mysql -h 192.168.1.20 -u root -p123456
MySQL [(none)]> select * from information_schema.processlist where host like ‘%172.35%‘;

技術分享圖片

將node節點nat表中的POSTROUTING規則鏈MASQUERADE規則刪除,通過測試發現能符合研發的需求,但帶來新的問題,無法訪問外部服務。

三、改進node節點防火墻規則

# iptables -t nat -I POSTROUTING -s 172.35.69.0/24  ! -d  192.168.1.20/32  -j MASQUERADE 

技術分享圖片
技術分享圖片

添加一條新的路由策略,將目的地址不是192.168.1.20的請求進行MASQUERADE,從而實現既能滿足研發需求,又能訪問互聯網的需求。

四、前提條件

因為網絡是雙向的,所以需要在公共服務所在的主機上把路由規則添加好
技術分享圖片

K8S網絡NAT問題分析與處理