k8s - flannel无法跨主机ping通pod的解决方案(腾讯云)

集群信息

  1. 一台腾讯云轻量应用服务器,(CPU: 2核 | 内存: 4GB | 硬盘:80GB),master
  2. 一台腾讯云服务器,(CPU: 1核 | 内存: 2GB | 硬盘:50GB),node1
  3. 操作系统皆为Ubuntu 20.04 LTS x86_64
  4. 这里有个大坑,轻量应用服务器和普通云服务器内网不互通,互通要参考内网互联
  5. 第四点只是解决了master和node互相能ping通内网ip,并不代表k8s集群部署后,能互相ping通pod id(虚拟子网)

master 无法ping,curl node1的pod id

在node1,通过抓包发现,其实是可以收到请求并且apply,发现master收不到。确认问题出现在master

tcmpdump -i flannel.1

我用的是flannel的vxlan的网络解决方案,然后参考
https://stackoverflow.com/a/51850070/5955399
https://github.com/flannel-io/flannel/blob/master/Documentation/troubleshooting.md#firewalls

When using vxlan backend, kernel uses UDP port 8472 for sending encapsulated packets.

解决办法

在云后台防火墙(有些叫安全组)规则打开8472 UDP的入规则就正常了

总结

  1. 是防火墙的规则问题,因为虚拟子网依靠flannel,把flannel的端口开了就行了。
  2. 腾讯云的普通云服务器CVM默认允许所有端口的入规则,但是腾讯云的轻量应用是要自己设置防火墙端口规则的。
  3. 一直奋战了10小时,搜索了无数中英文资料,重装集群无数次,终于成功了!
posted @ 2021-12-12 13:03  Rocin  阅读(1943)  评论(0编辑  收藏  举报