问题:有的场景需要虚拟机支持单网卡多IP,该如何设置
解决:如果是物理机或VMware虚拟机,则可以这样设置(以ubuntu14.04为例)
vi /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.128.10
netmask 255.255.255.0
gateway 192.168.128.2
auto eth0:1
iface eth0:1 inet static
address 192.168.128.11
netmask 255.255.255.0
保存后重启
同网段的IP无论是 ping 192.168.128.10 还是 ping 192.168.128.11 均能 ping 通
那OpenStack的虚机是否也这样设置就行了呢?
为了支持手动设置IP,需要给此虚拟机设置静态IP(如何设置请参考 为instance设置静态IP)
我们基于OpenStack O版进行测试,先创建虚拟机 test1 ,并设置静态IP 172.16.100.16
test2 ping test1 可以通,说明静态IP设置成功
然后给此虚拟机的eth0网卡设置第二个IP 172.16.100.15 并重启
可以看到 eth0 有两个 IP 地址,分别为 172.16.100.16 和 172.16.100.15
再次 test2 ping test1 ip 172.16.100.16 可以通,但是 ping ip 172.16.100.15 不通
为什么不通?
先看 test1 在哪个计算节点
然后查看此节点的 iptables filter 规则,有下面两条
意思是,对 IP 地址为 172.16.100.16 MAC 地址为 FA:16:3E:34:12:A1 的流量通过,其他的都 Drop 掉,所以 IP 172.16.100.15 就不通了
[root@compute1 ~]# iptables -t filter -L
如何解决呢?
通过 allowed-address-pairs 来扩展端口属性,允许指定端口的MAC和IP地址对的流量通过
先查看 IP 172.16.100.16 对应的 port ID
执行 neutron port-update 命令(或 openstack port set 命令)
[root@controller ~]# neutron port-update 065fb66a-0b78-4392-95d4-5a2e2c4784ba --allowed-address-pairs type=dict list=true ip_address=172.16.100.15
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
Updated port: 065fb66a-0b78-4392-95d4-5a2e2c4784ba
查看 update 后的 port
再查看计算节点的 iptables filter 规则,果然有变化
[root@compute1 ~]# iptables -t filter -L
验证一下 test2 ping test1 的 172.16.100.15 地址
通过!