第 13 章 配置网桥映射
本章介绍了如何在 RHEL OpenStack Platform 中配置网桥映射。
13.1. 网桥映射的作用
网桥映射允许供应商网络流量到达相关的物理网络。网络数据会从路由器的 qg-xxx 接口离开供应商网络,并到达 br-int。br-int 和 br-ex 间的 veth pair 允许网络数据通过供应商网络的网桥,并到达物理网络。
13.1.1. 配置网桥映射
以下是 br-int 和 br-ex 间的一个 veth pair 示例:
int-br-ex <-> phy-br-ex
这个连接在 bridge_mappings 设置中配置。例如:
bridge_mappings = physnet1:br-ex,physnet2:br-ex2
如果没有 bridge_mapping 项,则不存在网络的连接,从而无法和外部网络进行交流。
这个配置的第一个项使用 patch peer 在 br-int 和 br-ex 间创建了一个连接;第 2 个项为 br-ex2 创建了一个 patch peer。
13.1.2. 配置控制器节点
bridge_mappings 的设置需要和控制器节点上的 network_vlan_ranges 选项相匹配。对于上面的例子,控制器节点的配置如下:
network_vlan_ranges = physnet1,physnet2
这些值创建了用来代表相关外部网络的供应商网络,外部网络通过路由器接口与租户网络进行连接。因此,需要在运行路由器的网络节点上配置 bridge_mappings。这意味着,路由器上的网络数据可以使用正确的、由供应商网络代表的物理网络(如 physnet1)向外发送。
13.1.3. 网络数据传输
除了创建连接外,这个设置还在 br-int 和 br-ex 上配置了 OVS 流来允许和外部网络进行通讯。每个外部网络由一个内部 VLAN id 代表,VLAN id 被 tag 到路由器的 qg-xxx 端口。当数据包到达 phy-br-ex 时,br-ex 端口会去掉 VLAN tag,并把数据包移到物理接口,然后发送到外部网络。从外部网络返回的数据包会首先到达 br-ex,然后使用 phy-br-ex <→ int-br-ex 移到 br-int。当数据包到达 int-br-ex 时,br-int 中的另外一个流会向数据包添加内部的 vlan tag。这样,这个数据包就可以被 qg-xxx 接受。
13.2. 维护网桥映射
在删除任何映射后,都需要进行一个 patch-port 清理的操作,这保证了错误的项已从网桥配置中删除。这个操作可以通过两个方法进行:
- 手工端口清除 - 需要仔细地手工删除无用的端口。这个方法不需要在停止网络连接的情况下进行。
- 使用 neutron-ovs-cleanup 自动进行端口删除 - 自动进行端口删除,但需要停止系统的正常工作,并添加所需的映射信息。如果您的环境允许停止网络连接服务,则可以使用这个方法。
下面给出了这两种方法的使用示例:
13.2.1. 手工进行端口清除
手工端口清除的操作可以在不停止系统运行的情况下,删除不需要的端口。您可以使用它们的命名规则指定这些端口:在 br-$external_bridge 中,它们被命名为 "phy-"$external_bridge
;在 br-int 中,它们被命名为 "int-"$external_bridge
。
这个例子会从 bridge_mappings 中删除一个网桥,并清理相关的端口。1. 编辑 ovs_neutron_plugin.ini,从 bridge_mappings 中删除 physnet2:br-ex2 的项:
bridge_mappings = physnet1:br-ex,physnet2:br-ex2
删除 physnet2:br-ex2 的项。bridge_mappings 将变为如下所示:
bridge_mappings = physnet1:br-ex
2. 使用 ovs-vsctl 删除与已被删除的 physnet2:br-ex2 项相关联的 patch 端口:
# ovs-vsctl del-port br-ex2 phy-br-ex2 # ovs-vsctl del-port br-int int-br-ex2
如果整个 bridge_mappings 项都被删除,或被注释掉,则需要为每个项都运行清除命令。
2. 重启 neutron-openvswitch-agent:
# service neutron-openvswitch-agent restart
13.2.2. 自动进行端口清除
这个操作使用带有 --ovs_all_ports 标识的 neutron-ovs-cleanup 命令。重启 neutron 服务或整个节点来使网桥返回到正常的工作状态。这个过程需要完全停止网络服务。
neutron-ovs-cleanup 命令从所有 OVS 网桥中"拔掉"全部端口(实例、qdhcp/qrouter 以及其它)。使用 --ovs_all_ports 标识将会从 br-int 上删除所有端口,从 br-tun 中清理隧道端点,以及从网桥到网桥的端口连接。另外,物理接口(如 eth0、eth1)也会从网桥(如 br-ex、br-ex2)中删除。因此,在使用 ovs-vsctl 把这些端口重新手工添加前,到实例的连接都会丢失:
# ovs-vsctl add-port br-ex eth1
13.2.2.1. neutron-ovs-cleanup 使用示例:
1. 把 ovs_neutron_plugin.ini 中的 bridge_mapping 项进行一个备份。
2. 使用 --ovs_all_ports 标识运行 neutron-ovs-cleanup。请注意,这一步会导致整个网络停止工作。
# /usr/bin/neutron-ovs-cleanup --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini --log-file /var/log/neutron/ovs-cleanup.log --ovs_all_ports
3. 重启 OpenStack Networking 服务:
# systemctl restart neutron-openvswitch-agent # systemctl restart neutron-l3-agent.service # systemctl restart neutron-dhcp-agent.service
4. 重新把 bridge_mapping 项添加到 ovs_neutron_plugin.ini 来恢复网络连接。
5. 重启 neutron-openvswitch-agent 服务:
# systemctl restart neutron-openvswitch-agent
当 OVS agent 重启时,它并不会影响到没有出现在 bridge_mappings 中的连接。因此,如果您有 br-int 连接到 br-ex2,br-ex2 在它上面有数据流,把它从 bridge_mappings 配置中删除(或把它注释掉)不会断开这两个网桥(无论您是否重启了服务或整个节点)。