71

本文踩坑之k8s网络不通的问题排除

 4 years ago
source link: https://www.tuicool.com/articles/eY7fMv2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

首先找出来保存很久的跨主机pod通信流程图。

NNNJBjr.jpg!web

简单解读下:

  • 数据从源容器中发出后,经由所在主机的Docker0虚拟网卡转发到flannel0虚拟网卡,这是个P2P的虚拟网卡,flanneld服务监听在网卡的另外一端。
  • Flannel通过Etcd服务维护了一张节点间的路由。
  • 源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,然后直 接进入目的节点的flannel0虚拟网卡,然后被转发到目的主机的Docker0虚拟网卡,最后就像本机容器通信一下的有Docker0路由到达目标容 器。

这样整个数据包的传递就完成了,

现象

kubernetes 网络不可用,测试结果是只能访问本机的podip、clusterip,访问别的机器的都过不去。

排查

查看flannel的日志,发现写入的规则都是10.244/16网段的

MZvM3uV.jpg!web

而我设置的pod网段都是10.20/24网段中。很明显这里的规则的意思是把10.244/16网段的流量转发到10.20/24网段了。有问题。。。

紧接着查看下加载的配置文件的文件,发现network网段在10.244.0.0/16网段,而子网在10.20.0.1/24网络,网络网段不匹配

miAbm2E.jpg!web

解决

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,发现网络正常了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK