关于OpenStack虚拟机支持单网卡多IP问题

来源:互联网 发布:明末农民战争史 知乎 编辑:程序博客网 时间:2024/05/21 13:54

问题:有的场景需要虚拟机支持单网卡多IP,该如何设置

解决:如果是物理机或VMware虚拟机,则可以这样设置(以ubuntu14.04为例)

vi /etc/network/interfaces

auto eth0iface eth0 inet staticaddress 192.168.128.10netmask 255.255.255.0gateway 192.168.128.2auto eth0:1iface eth0:1 inet staticaddress 192.168.128.11netmask 255.255.255.0

保存后重启

同网段的IP无论是 ping 192.168.128.10 还是 ping 192.168.128.10 均能 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.15neutron 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 地址
这里写图片描述

通过!

原创粉丝点击