今天发现k8s集群中不同Node上的pod不能互相ping通。调试了很长时间,发现是flannel的问题,记之。

问题一:对flannel backend的选择

flannel支持多种backend,包括host-gw, vxlan, udp。其中前两个比较常用,在我的集群中一开始随便选择了host-gw作为

backend。这种backend不会在节点上创建形如flannel.1的网卡,它对宿主机的网络有要求,它要求宿主机处于同一个二层网络里。

关于二层网络的定义,网上有很多,不再赘述。而vxlan则没有这个要求,它会在宿主机创建一个虚拟网卡,该网卡负责封装跨节点的

容器通信。

问题二:docker本身的问题

在将backend从host-gw切换至vxlan后,三个node中的两个node可以互相通信了,而第三个node接受不到另两个node上容器中的ping请求。

调试过程如下:

sudo tcpdump -i flannel.1 观察flannel网卡是不是收到报文,结果为已收到

sudo tcpdump -i docker0 观察docker0网卡是不是收到报文,结果为未收到

说明flannel网卡向docker0网卡提交报文时出了问题。

经过一番google,在https://github.com/coreos/flannel/issues/609中找到了解决办法,在节点上执行:

sudo iptables -P FORWARD ACCEPT

相关文章:

  • 2021-07-21
  • 2021-08-05
  • 2022-12-23
  • 2022-12-23
  • 2021-08-25
  • 2022-12-23
  • 2022-02-13
  • 2022-01-09
猜你喜欢
  • 2022-02-18
  • 2021-07-02
  • 2021-10-12
  • 2022-12-23
  • 2021-10-20
  • 2022-01-11
  • 2022-12-23
相关资源
相似解决方案