场景 - 使用 Open vSwitch¶
概述¶
操作员可以选择使用 Open vSwitch 代替 Linux Bridge 作为 neutron ML2 agent。 这提供了不同的功能和与 neutron 的集成点。 本文档概述了如何在您的环境中进行设置。
推荐阅读¶
在继续操作之前,我们建议您阅读以下文档
Neutron 文档关于 Open vSwitch OpenStack 部署: https://docs.openstack.org/2025.2/networking-guide/scenario-classic-ovs.html
关于 OpenStack-Ansible 如何与 Open vSwitch 协同工作的博客文章: https://medium.com/@travistruman/configuring-openstack-ansible-for-open-vswitch-b7e70e26009d
先决条件¶
所有计算节点必须配置桥接器
br-mgmtbr-vlan(可选 - 用于 VLAN 网络)br-vxlan(可选 - 用于 VXLAN tenant 网络)br-storage(可选 - 用于某些存储设备)
这些桥接器可以配置为 Linux Bridge(这将连接到 neutron 控制的 Open vSwitch)或 Open vSwitch。
配置桥接器(Linux Bridge)¶
以下是如何在 Ubuntu 16.04 LTS 上使用 Linux Bridge 配置桥接器(示例:br-mgmt)的示例
/etc/network/interfaces
auto lo
iface lo inet loopback
# Management network
auto eth0
iface eth0 inet manual
# VLAN network
auto eth1
iface eth1 inet manual
source /etc/network/interfaces.d/*.cfg
/etc/network/interfaces.d/br-mgmt.cfg
# OpenStack Management network bridge
auto br-mgmt
iface br-mgmt inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports eth0
address MANAGEMENT_NETWORK_IP
netmask 255.255.255.0
对于每个桥接器都需要一个 br-<type>.cfg。 如果系统上的物理适配器有限,可以使用 VLAN 接口来支持 br-<type> 桥接器。
配置桥接器(Open vSwitch)¶
另一种配置方法是将所有内容都通过 Open vSwitch 路由。 桥接器(示例:br-mgmt)本身可以是 Open vSwitch。
以下是如何在 Ubuntu 16.04 LTS 上使用 Open vSwitch 配置桥接器(示例:br-mgmt)的示例: *
/etc/network/interfaces
auto lo
iface lo inet loopback
source /etc/network/interfaces.d/*.cfg
# Management network
allow-br-mgmt eth0
iface eth0 inet manual
ovs_bridge br-mgmt
ovs_type OVSPort
# VLAN network
allow-br-vlan eth1
iface eth1 inet manual
ovs_bridge br-vlan
ovs_type OVSPort
/etc/network/interfaces.d/br-mgmt.cfg
# OpenStack Management network bridge
auto br-mgmt
allow-ovs br-mgmt
iface br-mgmt inet static
address MANAGEMENT_NETWORK_IP
netmask 255.255.255.0
ovs_type OVSBridge
ovs_ports eth0
对于每个桥接器都需要一个 br-<type>.cfg。 如果系统上的物理适配器有限,可以使用 VLAN 接口来支持 br-<type> 桥接器。
OpenStack-Ansible 用户变量¶
为您的网络主机创建 group var 文件 /etc/openstack_deploy/group_vars/network_hosts。它必须包含
# Ensure the openvswitch kernel module is loaded
openstack_host_specific_kernel_modules:
- name: "openvswitch"
pattern: "CONFIG_OPENVSWITCH"
在您的 /etc/openstack_deploy/openstack_user_config.yml 中指定 provider 网络定义,这些定义定义一个或多个 Neutron provider bridge 以及相关配置。
注意
此处指定的桥接器将自动创建。 如果定义了 network_interface,则该接口将自动放置到桥接器中。
- network:
container_bridge: "br-provider"
container_type: "veth"
type: "vlan"
range: "101:200,301:400"
net_name: "physnet1"
network_interface: "bond1"
group_binds:
- neutron_openvswitch_agent
- network:
container_bridge: "br-provider2"
container_type: "veth"
type: "vlan"
range: "203:203,467:500"
net_name: "physnet2"
network_interface: "bond2"
group_binds:
- neutron_openvswitch_agent
在使用 flat 提供商网络时,请相应地修改网络类型
- network:
container_bridge: "br-publicnet"
container_type: "veth"
type: "flat"
net_name: "flat"
group_binds:
- neutron_openvswitch_agent
在您的 /etc/openstack_deploy/openstack_user_config.yml 中指定一个叠加网络定义,该定义定义了与叠加网络相关的配置
注意
桥接器名称应对应于预先创建的 Linux 桥接器或 OVS 桥接器。
- network:
container_bridge: "br-vxlan"
container_type: "veth"
container_interface: "eth10"
ip_from_q: "tunnel"
type: "vxlan"
range: "1:1000"
net_name: "vxlan"
group_binds:
- neutron_openvswitch_agent
在您的 /etc/openstack_deploy/user_variables.yml 中设置以下用户变量
neutron_plugin_type: ml2.ovs
neutron_ml2_drivers_type: "flat,vlan,vxlan"
neutron_plugin_base:
- router
- metering
这些覆盖指令指示 Ansible 部署 OVS 机制驱动程序和相关的 OVS 组件。 这是通过将 neutron_plugin_type 设置为 ml2.ovs 来完成的。
neutron_ml2_drivers_type 覆盖提供对 OVS 支持的所有常见类型驱动程序的支持。
neutron_plugin_base 用于定义将启用的插件列表。
如果需要在全局或每主机基础上对提供商网络进行覆盖,则可以使用以下格式在 user_variables.yml 或在每主机上的 openstack_user_config.yml 中使用。
注意
在 openstack_user_config.yml 文件中定义全局提供商网络时,通常不需要这些覆盖。
# When configuring Neutron to support vxlan tenant networks and
# vlan provider networks the configuration may resemble the following:
neutron_provider_networks:
network_types: "vxlan"
network_vxlan_ranges: "1:1000"
network_vlan_ranges: "physnet1:102:199"
network_mappings: "physnet1:br-provider"
network_interface_mappings: "br-provider:bond1"
# When configuring Neutron to support only vlan tenant networks and
# vlan provider networks the configuration may resemble the following:
neutron_provider_networks:
network_types: "vlan"
network_vlan_ranges: "physnet1:102:199"
network_mappings: "physnet1:br-provider"
network_interface_mappings: "br-provider:bond1"
# When configuring Neutron to support multiple vlan provider networks
# the configuration may resemble the following:
neutron_provider_networks:
network_types: "vlan"
network_vlan_ranges: "physnet1:102:199,physnet2:2000:2999"
network_mappings: "physnet1:br-provider,physnet2:br-provider2"
network_interface_mappings: "br-provider:bond1,br-provider2:bond2"
# When configuring Neutron to support multiple vlan and flat provider
# networks the configuration may resemble the following:
neutron_provider_networks:
network_flat_networks: "*"
network_types: "vlan"
network_vlan_ranges: "physnet1:102:199,physnet2:2000:2999"
network_mappings: "physnet1:br-provider,physnet2:br-provider2"
network_interface_mappings: "br-provider:bond1,br-provider2:bond2"
Open Virtual Switch (OVS) 命令¶
以下命令可用于提供有关 Open vSwitch 网络和配置状态的有用信息。
ovs-vsctl show 命令提供有关主机上当前配置的虚拟交换机和连接端口的信息
root@infra01:~# ovs-vsctl show
4ef304ff-b803-4d09-95f5-59a076323949
Manager "ptcp:6640:127.0.0.1"
is_connected: true
Bridge br-int
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
Port "tap2e7e0507-e4"
tag: 2
Interface "tap2e7e0507-e4"
type: internal
Port int-br-vlan
Interface int-br-vlan
type: patch
options: {peer=phy-br-provider}
Port br-int
Interface br-int
type: internal
Port "tap7796ab3d-e9"
tag: 5
Interface "tap7796ab3d-e9"
type: internal
Port patch-tun
Interface patch-tun
type: patch
options: {peer=patch-int}
Bridge br-tun
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
Port "vxlan-ac1df015"
Interface "vxlan-ac1df015"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.29.240.20", out_key=flow, remote_ip="172.29.240.21"}
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
Port "vxlan-ac1df017"
Interface "vxlan-ac1df017"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.29.240.20", out_key=flow, remote_ip="172.29.240.23"}
Port br-tun
Interface br-tun
type: internal
Bridge br-provider
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
Port "ens192"
Interface "ens192"
Port br-provider
Interface br-provider
type: internal
Port phy-br-provider
Interface phy-br-provider
type: patch
options: {peer=int-br-provider}
ovs_version: "2.10.0"
可以在上游 Open vSwitch 文档中找到其他命令。
说明¶
neutron-openvswitch-agent 服务将注册为代理,可以使用 openstack network agent list 命令进行观察
root@infra01-utility-container-ce1509fd:~# openstack network agent list --agent-type open-vswitch
+--------------------------------------+--------------------+-------------+-------------------+-------+-------+---------------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+--------------------+-------------+-------------------+-------+-------+---------------------------+
| 4dcef710-ec0c-4925-a940-dc319cd6849f | Open vSwitch agent | compute03 | None | :-) | UP | neutron-openvswitch-agent |
| 5e1f8670-b90e-49c3-84ff-e981aeccb171 | Open vSwitch agent | compute02 | None | :-) | UP | neutron-openvswitch-agent |
| 78746672-d77a-4d8a-bb48-f659251fa246 | Open vSwitch agent | compute01 | None | :-) | UP | neutron-openvswitch-agent |
| eebab5da-3ef5-4582-84c5-f29e2472a44a | Open vSwitch agent | infra01 | None | :-) | UP | neutron-openvswitch-agent |
+--------------------------------------+--------------------+-------------+-------------------+-------+-------+---------------------------+