OpenStack的网络管理指南第五部分
Open vSwitch
This example uses VLAN isolation on the switches to isolate tenant networks. This configuration labels the physical network associated with the public network as physnet1
, and the physical network associated with the data network as physnet2
, which leads to the following configuration options in ovs_neutron_plugin.ini
:
1
2
3
4
5
|
[ovs]
tenant_network_type = vlan
network_vlan_ranges = physnet2:100:110
integration_bridge = br
-int
bridge_mappings = physnet2:br-eth1
|
![](http://docs.openstack.org/trunk/openstack-network/admin/content/figures/2/figures/under-the-hood-scenario-1.png)
$ tenant=$(keystone tenant-list | awk '/service/ {print $2}') $ neutron router-create router01 $ neutron net-create --tenant-id $tenant public01 \ --provider:network_type flat \ --provider:physical_network physnet1 \ --router:external=True $ neutron subnet-create --tenant-id $tenant --name public01_subnet01 \ --gateway 10.64.201.254 public01 10.64.201.0/24 --enable_dhcp False $ neutron router-gateway-set router01 public01
根据演示用户租户,建立专用网络net01和相应的子网,把它连接到router01路由器上。配置它来使用物理交换机上ID101的 VLAN 。
$ tenant=$(keystone tenant-list|awk '/demo/ {print $2}' $ neutron net-create --tenant-id $tenant net01 \ --provider:network_type vlan \ --provider:physical_network physnet2 \ --provider:segmentation_id 101 $ neutron subnet-create --tenant-id $tenant --name net01_subnet01 net01 192.168.101.0/24 $ neutron router-interface-add router01 net01_subnet01
同样,对于net02 ,采用物理交换机上 ID为102 的VLAN:
$ neutron net-create --tenant-id $tenant net02 \ --provider:network_type vlan \ --provider:physical_network physnet2 \ --provider:segmentation_id 102 $ neutron subnet-create --tenant-id $tenant --name net02_subnet01 net02 192.168.102.0/24 $ neutron router-interface-add router01 net02_subnet01下图显示了如何配置计算主机上的 各种Linux的网络设备 :
![](http://docs.openstack.org/trunk/openstack-network/admin/content/figures/2/figures/under-the-hood-scenario-1-ovs-compute.png)
各种类型的网络设备
![]() | Note |
---|---|
有四种不同类型的虚拟网络设备: TAP设备, VETH pair,Linux网桥,和Open vSwitch网桥。举个例子,对于一个以太网帧从虚拟机VM01的网卡eth0到物理网络,它必须通过主机内的9台设备:TAP vnet0,Linux bridge qbrnnn, veth pair(qvbnnn, qvonnn), Open vSwitch bridge br-int, veth pair (int-br-eth1, phy-br-eth1), and, finally, the physical network interface card eth1. |
一个VETH pair是一对直接连接在一起虚拟网络接口,一个以太网帧从一个VETH发送到另一个VETH pair。Openstack的网络使用VETH pair作为虚拟网桥之间的虚拟电缆。
一个Linux网桥的行为像一个枢纽:您可以将多个(物理或虚拟)网络接口设备连接到Linux网桥上,从网桥上任何一个端口发送过来的以太网帧都会被发送到所有其他设备上。
一个open vSwitch网桥的行为就像一个虚拟的交换机:网络接口设备连接到vSwitch网桥的端口上,这个端口可以想物理交换机一样配置,包括VLAN的配置。
br-int OpenvSwitch网桥是整合网桥,计算主机上的所有客户都连接这座网桥,Openstack网络实现网络隔离通过配置br-int的端口。
物理连接网桥
br-eth1提供桥连到物理网卡eth1上,它通过VETH pair连接到整合网桥br-int上( INT- BR- eth1的,PHY - BR- eth1 )。
VLAN 转换
在这个例子中, net01和net02 VLAN的ID分别为1和2。然而,在我们的例子中的物理网络仅支持VLAN ID的取值范围为101至110 。The Open vSwitch 代理负责为br-int和br-eth1做VLAN转换。当br-eth1的接收帧标记VLAN ID为1,PHY- BR- eth1的相关联的端口,它会修改帧的VLAN ID 为 101。同样,当BR- INT接收帧标记VLAN ID为101,INT- BR- eth1的相关联的端口,它会修改帧的VLAN ID 1 。
安全组: iptables和Linux网桥
在理想的情况下,TAP设备vnet0将会直接连接到br-int上边。不幸的是,这是不可能的,因为Openstack安全组的存在,Openstack在TAP设备比如vnet0上使用iptables规则来实现安全组,Open vSwitch 不直接和iptables规则兼容而提供了TAP设备连接的Open vSwitch端口
OpenStack的网络使用一个额外的Linux网桥和VETH pair作为这个问题的解决方法。vnet0连接到linux网桥而不是直接连接到Open vSwitch桥上,qbrXXX。此网桥通过(qvbXXX, qvoXXX) veth pair连接到br-int
网络主机配置
网络主机运行neutron-openvswitch-plugin-agent,the neutron-dhcp-agent, neutron-l3-agent, 和 neutron-metadata-agent 等服务。
在网络主机上,假设eth0连接到外部网络,eth1连接到数据网络,ovs_neutron_plugin.ini文件应该如下配置
1
2
3
4
5
|
[ovs]
tenant_network_type = vlan
network_vlan_ranges = physnet2:101:110
integration_bridge = br
-int
bridge_mappings = physnet1:br-ex,physnet2:br-eth1
|
![](http://docs.openstack.org/trunk/openstack-network/admin/content/figures/2/figures/under-the-hood-scenario-1-ovs-network.png)
另外一个Open vSwitch bridge,,br-ex,被连接到外部网络的物理接口上。在这个例子中,物理接口是eth0。
![]() | Note |
---|---|
内部网桥和外部网桥通过veth pair(int-br-ex,phy-br-ex)连接,这个例子中使用第三层来路由从内部网络到外部网络的数据包。这个例子中没有数据包穿过veth pair。 |