在openstack環境創建的多台雲主機配置keepalived作主備,默認情況下無法生效,直接對雲主機一張網卡配置兩個IP進行測試也是同樣結果,因為:
可以看到,port所在的宿主機上iptables 對 MAC地址和IP進行了限制。所以需要如下操作:
pre. 確認雲主機網卡port_id
nova interface-list [vm_id]
1. 確認 ml2 配置中
arp_responder = False
或 未配置(因為默認為false);
2. 對需要配置vip的port,可以直接 disable 安全組 (不推薦):
neutron port-update --no-security-groups --port-security-enabled=False [port_id]
eg.
neutron port-update --no-security-groups --port-security-enabled=False aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
也可以使用 allowed-address-pair功能 (推薦) :
neutron port-update --allowed-address-pair ip_address=[CIDR] [port_id]
,如 :
eg.
neutron port-update --allowed-address-pair ip_address=10.1.100.100 aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
neutron port-update --allowed-address-pair ip_address=10.1.100.100/31 aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
到這一步為止,雲主機內配置上面的 vip 就已經可以使用了。
3. 為了避免后續創建的雲資產占用vip ,創建閑置的port,占用掉vip地址:
neutron port-create --fixed-ip ip_address=[IP_ADDR] [network_id]
neutron port-create --fixed-ip ip_address=10.1.100.100 bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb
此時這個port 只是一個DB里的一個記錄,不會在宿主機上創建tap設備或增加iptables chain,不用擔心額外的資源損耗。它的用途僅僅是占用IP地址以免被其它資源使用而已。
如下圖,dhcp不會再分配 10.1.100.100 這個ip
接下來開始將浮動IP綁定給vip,平時我們在dashboard處是給雲主機綁定浮動IP,常用的CLI /api 是
nova floating-ip-associate <server> <address>
,可這樣浮動IP綁定的是雲主機網卡原始IP (10.1.100.7),不是vip (10.1.100.100)
,所以我們得使用neutron 的相關接口。
4. 創建浮動IP
neutron floatingip-create [floating_net_id]
neutron floatingip-create cccccccc-cccc-cccc-cccc-cccccccccccc
5. 綁定
neutron floatingip-associate [floatingip_id] [port_id]
先將剛才通過nova CLI 綁定的解綁
開始綁定
neutron floatingip-associate cccccccc-cccc-cccc-cccc-cccccccccccc aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
再去l3 節點的net ns里可以看到
已經綁定的是 vip (10.1.100.100) 了