18

阿里云上使用flannel host-gw跨节点pod不通的解决

 3 years ago
source link: https://zhangguanzhang.github.io/2020/06/23/host-gw-in-aliyun/
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.
neoserver,ios ssh client

阿里云上使用flannel host-gw跨节点pod不通的解决



字数统计: 626阅读时长: 2 min
 2020/06/23  483  Share

挺多人问的,写下解决办法

首先主机得在同一个专有vpc下,跨vpc或者经典vpc就扯淡了。还有flannel别把网络信息存储在etcd里,目前flannel只支持v2的etcd api。但是现在k8s都是使用v3 etcd存储了。如果v2和v3共存会导致无法恢复etcd的备份

所以网上那些etcdctl set flannel的cidr的文章别看了,都没做过备份恢复实验就到处发k8s搭建教程。flannel v3的话看我过往文章

先来说下host-gw的包走向,假设两台机器

IP pod cidr 10.0.6.166 10.200.1.0/24 10.0.6.167 10.200.2.0/24

pod1 10.200.1.2 ping node2上的10.200.2.2,出去的包源目IP是10.200.1.210.200.2.2,但是包的mac是宿主机和目的主机的mac地址。也就是走二层转发直接到目的的宿主机上,同时这也是host-gw无法跨三层的原因。另外openstack默认会检查出去的包的源ip和源mac是否对的上网卡,收包也一样。这会导致host-gw无法使用,见ip和mac解绑

帮人排查不通,源主机上抓包发现包发出去了,目的主机上抓包发现没收到包。可以断定阿里的vpc实际上有一些类似过滤的行为,理解为包从宿主机出去还没发到目的宿主机的路上经过了一个东西(ovs,SDN)。实际上阿里云vpc下host-gw跨节点不通就是包经过这个东西被路由到外面去了,然后因为是包的源目IP是私网ip会被SDN丢掉。我们得在专有vpc上配置路由让包不出公网而是到目标ecs上

几台主机写几条,为了把包发送到指定的宿主机上

登录阿里云控制台,专有vpc –> 路由表 –> 自定义
例如上面我举例的环境则是两条:

  • 10.200.1.0/24 下一跳类型是ecs实例,资源组全部,ECS实例选择10.200.1.0/24所在ECS
  • 10.200.2.0/24 下一跳类型是ecs实例,资源组全部,ECS实例选择10.200.2.0/24所在ECS

阿里的vpc内部有些cidr是预留的不给客户使用。可用的cidr有:

1
2
3
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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK