阿里云ECS搭建k8s 跨主机网络不通
今天采用kubeadm 搭建一个kubernetes 1.20.16 的k8s集群,搭建完成之后发现DNS不能正常解析。排查后发现跨主机POD网络不能通信,苦恼许久,做下记录。
因为网络插件采用flannel 的host-gw
模式,直接走二层网络通信。
上图是那掘金的。
两台主机的网络规划就如上图吧?
在Node1 上无法ping 通10.244.1.20.
在node1上抓包发现能看到ICMP包,但是在Node2上收不到ICMP包。然后怀疑:
1,iptables 防火墙将ICMP包丢弃。
2,阿里云的ECS之间有什么特别的限制。
经过检查发现iptables 并未异常,那么就可能是2了。google 一下发现张馆长的记录文章[https://zhangguanzhang.github.io/2020/06/23/host-gw-in-aliyun/#/前言](https://zhangguanzhang.github.io/2020/06/23/host-gw-in-aliyun/#/%E5%89%8D%E8%A8%80)
文章内写到:
- 可以断定阿里的vpc实际上有一些类似过滤的行为,理解为包从宿主机出去还没发到目的宿主机的路上经过了一个东西(ovs,SDN)。实际上阿里云vpc下host-gw跨节点不通就是包经过这个东西被路由到外面去了,然后因为是包的源目IP是私网ip会被SDN丢掉。我们得在专有vpc上配置路由让包不出公网而是到目标ecs上.
按照他说给的办法解决问题
几台主机写几条,为了把包发送到指定的宿主机上
登录阿里云控制台,专有vpc –> 路由表 –> 自定义
10.244.0.0/24 虚拟机 node1
10.244.1.1/24 虚拟机 node2
注意事项
阿里的vpc内部有些cidr是预留的不给客户使用。可用的cidr有:
A类地址:10.0.0.0~10.255.255.255
B类地址:172.16.0.0 ~172.31.255.255
C类地址:192.168.0.0~192.168.255.255