CloudStack手動設置虛擬機IP總結
一、現象
CloudStack 4.2.0版本及後續版本,在界面增加每個虛擬可以設置輔助IP的功能。如果不在界面中設置輔助IP,而是直接在虛擬機手動設置IP,會導致該IP不生效的問題。
在CloudStack 4.2.0之前的版本是可以手動設置任意可用的IP。
二、實現機制
引起這個差異就是4.2.0版本的輔助IP功能引入的。4.2.0的實現機制是,默認網絡規則會通過ebtables策略將非vm使用的IP做NAT屏蔽,這會導致若不配置ebtables規則,手動設置IP無效。而4.0版本則無該限制。
ebtables的規則實現代碼在scripts\vm\network\security_group.py文件 default_network_rules方法。
三、實驗
該實驗就是模擬CloudStack配置輔助IP的步驟。
虛擬機i-2-3-VM通過DHCP獲得的IP爲10.6.32.19,現修改爲10.6.32.24。
1、通過ipset增加第二個IP
ipset -A i-2-3-VM 10.6.32.24
通過ipsetlist命令查詢
2、配置ebtables
ebtables-t nat -I i-2-3-VM-in-ips -p ARP --arp-ip-src 10.6.32.24 -j RETURN
ebtables-t nat -I i-2-3-VM-out-ips -p ARP --arp-ip-dst 10.6.32.24 -j RETURN
查詢ebtables的nat表配置。
ebtables -t nat -L
3、手動將虛擬的IP修改爲10.6.32.24,配置完成後,該IP可用。
四、結論
CloudStack 4.2.0及以後版本所管理的虛擬機,若需要手動設置IP,建議使用設置輔助IP功能;或者手動添加ipset和ebtablse的規則,再配置IP。