第 11 章 配置网桥映射
本章介绍了如何在 Red Hat OpenStack Platform 中配置网桥映射。
11.1. 网桥映射的作用
网桥映射允许供应商网络流量到达相关的物理网络。网络数据会从路由器的 qg-xxx 接口离开供应商网络,并到达 br-int。br-int 和 br-ex 间的 veth pair 允许网络数据通过供应商网络的网桥,并到达物理网络。
11.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。
11.1.2. 配置控制器节点
bridge_mappings 的设置需要和控制器节点上的 network_vlan_ranges 选项相匹配。对于上面的例子,控制器节点的配置如下:
network_vlan_ranges = physnet1,physnet2
这些值创建了用来代表相关外部网络的供应商网络,外部网络通过路由器接口与租户网络进行连接。因此,需要在运行路由器的网络节点上配置 bridge_mappings。这意味着,路由器上的网络数据可以使用正确的、由供应商网络代表的物理网络(如 physnet1)向外发送。
11.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 接受。
11.2. 维护网桥映射
在删除任何映射后,都需要进行一个 patch-port 清理的操作,这保证了错误的项已从网桥配置中删除。这个操作可以通过两个方法进行:
- 手工端口清除 - 需要仔细地手工删除无用的端口。这个方法不需要在停止网络连接的情况下进行。
- 使用 neutron-ovs-cleanup 自动进行端口删除 - 自动进行端口删除,但需要停止系统的正常工作,并添加所需的映射信息。如果您的环境允许停止网络连接服务,则可以使用这个方法。
下面给出了这两种方法的使用示例:
11.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
11.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
11.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 配置中删除(或把它注释掉)不会断开这两个网桥(无论您是否重启了服务或整个节点)。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.