客户需要在云上使用vip,后面发现不通,查询了后发现openstack的neutron会存在ip和mac绑定的关系,可以阅读下面的链接查看说明
https://blog.codecentric.de/en/2016/11/highly-available-vips-openstack-vms-vrrp/
即如果网卡上有不是下发的ip在向外发包后包会被drop掉,需要用neutron的cli解绑ip和mac的绑定,我们这这个功能已经做在了web上了,所以可以直接解绑
存在绑定的关系下,意味着flanneld不能使用host-gw模式,除非云厂商实现了cni-plugins或者不是原生的openstack(类似阿里云他们vpc)
后面发现另一个客户两台机器都出现了VIP,看了下他的检查脚本是检测mysql存活,以为是脑裂造成的,后面才发现是组播被SDN禁止的原因,让用户改成单播即可,写unicast_peer就是单播,不写就是组播
1 | vrrp_instance haproxy-vip { |
calico的话不了解,但是官方yaml在openstack的虚机上能跑通的, https://docs.projectcalico.org/v3.5/usage/configuration/mtu 如果openstack底层网络是基于vxlan的话。ecs的网卡mtu是1450,正常公有云的网卡mtu是1500,ipip需要额外的20字节,所以可以更改下yaml把MTU更改为1480。
我们的 openstack 上让同事安全组放行下 po d和宿主机的 cidr 的 any,亲测了只放 tcp 和 udp 不行,只有放行 any 后,ipip 模式下跨节点 pod 才通(协议号94,不行就试试4也就是ip协议, https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml )。bgp模式没有玩过不清楚
后面了解到,当 openstack 使用 ovs 作为 network plugin 的时候默认安全组的时候,不会放行 IPIP 协议,需要允许对应的安全组开发 IPIP 协议,4 不行就试试 94
1 | openstack security group rule create [所有节点所在的安全组] --protocol 4 --ingress --remote-ip 0.0.0.0/0 |
calicoctl的一些操作可以看下面官方文档
https://docs.projectcalico.org/v3.7/reference/calicoctl/resources/
https://docs.projectcalico.org/reference/node/configuration