k8s - flannel无法跨主机ping通pod的解决方案(腾讯云)
集群信息
- 一台腾讯云轻量应用服务器,(CPU: 2核 | 内存: 4GB | 硬盘:80GB),master
- 一台腾讯云服务器,(CPU: 1核 | 内存: 2GB | 硬盘:50GB),node1
- 操作系统皆为Ubuntu 20.04 LTS x86_64
- 这里有个大坑,轻量应用服务器和普通云服务器内网不互通,互通要参考内网互联。
- 第四点只是解决了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的入规则就正常了
总结
- 是防火墙的规则问题,因为虚拟子网依靠flannel,把flannel的端口开了就行了。
- 腾讯云的普通云服务器CVM默认允许所有端口的入规则,但是腾讯云的轻量应用是要自己设置防火墙端口规则的。
- 一直奋战了10小时,搜索了无数中英文资料,重装集群无数次,终于成功了!