场景 - 使用 Open vSwitch

概述

操作员可以选择使用 Open vSwitch 代替 Linux Bridge 作为 neutron ML2 agent。 这提供了不同的功能和与 neutron 的集成点。 本文档概述了如何在您的环境中进行设置。

先决条件

所有计算节点必须配置桥接器

  • br-mgmt

  • br-vlan (可选 - 用于 VLAN 网络)

  • br-vxlan (可选 - 用于 VXLAN tenant 网络)

  • br-storage (可选 - 用于某些存储设备)

更多信息请参见: https://docs.openstack.org/project-deploy-guide/openstack-ansible/2025.2/targethosts-networkconfig.html

这些桥接器可以配置为 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 |
+--------------------------------------+--------------------+-------------+-------------------+-------+-------+---------------------------+