openstack添加多个不同物理出口的private网络

在生产环境中我们有些虚拟机需要同时需要接入两个二层网络,一个生产网络,一个DMZ网络,通常情况下这两个网络也是对应两个不同的物理交换机的,所以对应的计算节点也应该是两个不同的物理出口。

以上图的环境为例
compute-2上的虚拟机需要同时接入两个网络,生产网和DMZ网络,所以在对compute-2接完线后,还需要配置neutron,让br-int根对应的br-dmz桥通过ovs的patch口连接起来,同时生成对应的流表控制,修改openvswitch配置文件使得physnetX根br-dmz mapping。
需要注意的是
这里control-1接dmz的网络主要是为了dhcp 地址、metadata注入、和根三层网络的NAT。你可以通过neutron availability zone的方式把把dhcp和metadata和l3部署在网络能通的计算节点,这样就不需要控制节点接线了。

配置方法(组件为openvswitch)

这里假设compute-2的br-dmz物理出口为br-ovs-bond2
控制节点和计算节点都执行
创建ovs桥

1
ovs-vsctl add-br br-dmz

添加端口

1
ovs-ovsctl add-port br-dmz br-dmz--br-ovs-bond2

设置端口类型为patch

1
ovs-vsctl set interface br-dmz--br-ovs-bond2 type=patch

设置patch口的peer端

1
ovs-vsctl set interface br-dmz--br-ovs-bond2 options:peer=br-ovs-bond2--br-dmz

在br-ovs-bond2上配置另外一个path口
添加端口

1
ovs-vsctl add-port br-ovs-bond2 br-ovs-bond2--br-dmz

设置端口类型为patch

1
ovs-vsctl set interface br-ovs-bond2--br-dmz type=patch

设置patch口的peer端

1
ovs-vsctl set interface br-ovs-bond2--br-dmz options:peer=br-dmz--br-ovs-bond2

控制节点配置

vim /etc/neutron/plugins/ml2/ml2_conf.ini

1
network_vlan_ranges =physnet2:1000:2000,physnet3   #在原来基础上新增个physnet3为我新增的,没有明确vlan-id范围可以不写

vim /etc/neutron/plugins/ml2/openvswitch_agent.ini

1
bridge_mappings=physnet2:br-prv,physnet3:br-dmz  #在原来基础上新增个physnet3:br-dmz

重启neutron-server和neutron-openvswitch-agent

1
systemctl restart neutron-server  
1
systemctl restart neutron-openvswitch-agent

计算节点配置

vim /etc/neutron/plugins/ml2/openvswitch_agent.ini

1
bridge_mappings=physnet2:br-prv,physnet3:br-dmz  #在原来基础上新增个physnet3:br-dmz

重启neutron-openvswitch-agent

1
systemctl restart neutron-openvswitch-agent

创建网络,输入对应的physnet

1
neutron net-create dmz_net --router:external=true --provider:network_type=vlan --provider:physical_network=physnet3 --provider:segmentation_id=108
1
neutron subnet-create --gateway 20.52.15.254 --allocation-pool start=20.52.15.30,end=20.52.15.40 --disable-dhcp dmz_net 20.52.15.0/24