第 11 章 配置网桥映射

本章介绍了如何在 Red Hat OpenStack Platform 中配置网桥映射

11.1. 网桥映射的作用

网桥映射允许供应商网络流量到达相关的物理网络。网络数据会从路由器的 qg-xxx 接口离开供应商网络,并到达 br-intbr-intbr-ex 间的 veth pair 允许网络数据通过供应商网络的网桥,并到达物理网络。

11.1.1. 配置网桥映射

以下是 br-intbr-ex 间的一个 veth pair 示例:

int-br-ex <-> phy-br-ex

这个连接在 bridge_mappings 设置中配置。例如:

bridge_mappings = physnet1:br-ex,physnet2:br-ex2
注意

如果没有 bridge_mapping 项,则不存在网络的连接,从而无法和外部网络进行交流。

这个配置的第一个项使用 patch peer 在 br-intbr-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-intbr-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-ex2br-ex2 在它上面有数据流,把它从 bridge_mappings 配置中删除(或把它注释掉)不会断开这两个网桥(无论您是否重启了服务或整个节点)。