本文踩坑之k8s網絡不通的問題排除
作者:藝術生的運維路
kubernetes 網絡不可用,測試結果是只能訪問本機的podip、clusterip,訪問別的機器的都過不去。
首先找出來保存很久的跨主機pod通信流程圖。
簡單解讀下:
- 數據從源容器中發出后,經由所在主機的Docker0虛擬網卡轉發到flannel0虛擬網卡,這是個P2P的虛擬網卡,flanneld服務監聽在網卡的另外一端。
- Flannel通過Etcd服務維護了一張節點間的路由。
- 源主機的flanneld服務將原本的數據內容UDP封裝后根據自己的路由表投遞給目的節點的flanneld服務,數據到達以后被解包,然后直 接進入目的節點的flannel0虛擬網卡,然后被轉發到目的主機的Docker0虛擬網卡,最后就像本機容器通信一下的有Docker0路由到達目標容 器。
這樣整個數據包的傳遞就完成了,
現象
kubernetes 網絡不可用,測試結果是只能訪問本機的podip、clusterip,訪問別的機器的都過不去。
排查
查看flannel的日志,發現寫入的規則都是10.244/16網段的
而我設置的pod網段都是10.20/24網段中。很明顯這里的規則的意思是把10.244/16網段的流量轉發到10.20/24網段了。有問題。。。
緊接著查看下加載的配置文件的文件,發現network網段在10.244.0.0/16網段,而子網在10.20.0.1/24網絡,網絡網段不匹配
解決
- kubectl get cm -n kube-system kube-flannel-cfg -o yaml
- net-conf.json: |
- {
- "Network": "10.20.0.0/16",
- "Backend": {
- "Type": "vxlan"
- }
- }
修改這里的network網段的位置,然后清除iptables,發現網絡正常了。
責任編輯:趙寧寧
來源:
今日頭條