11.2. 在 ML2/OVN 部署中启用 VLAN 透明性

如果您需要在虚拟机(VM)实例之间发送 VLAN 标记的流量,请启用 VLAN 透明。在 VLAN 透明网络中,您可以直接在虚拟机中配置 VLANS,而无需在 neutron 中配置它们。

先决条件

  • 部署 Red Hat OpenStack Platform 16.1 或更高版本,使用 ML2/OVN 作为机制驱动程序。
  • VLAN 或 Geneve 类型的提供商网络。不要在扁平类型提供商网络部署中使用 VLAN 透明性。
  • 确保外部交换机支持在两个 VLAN 上使用 ethertype 0x8100 的 802.1q VLAN 堆栈。OVN VLAN 透明性不支持将外部供应商 VLAN ethertype 设置为 0x88A8 或 0x9100 的 802.1ad QinQ。
  • 您必须具有 RHOSP 管理员特权。

流程

  1. 以 stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 在 undercloud 节点上的环境文件中,将 EnableVLANTransparency 参数设置为 true。例如,将以下行添加到 ovn-extras.yaml 中。

    parameter_defaults:
        EnableVLANTransparency: true
  4. openstack overcloud deploy 命令中包含环境文件以及与您环境相关的任何其他环境文件并部署 overcloud:

    $ openstack overcloud deploy \
    --templates \
    …
    -e <other_overcloud_environment_files> \
    
    -e ovn-extras.yaml \
    …

    <other_overcloud_environment_files> 替换为属于您现有部署的环境文件列表。

  5. 使用 --transparent-vlan 参数创建网络。

    示例

    $ openstack network create network-name --transparent-vlan

  6. 在每个参与的虚拟机上设置一个 VLAN 接口。

    将接口 MTU 设置为比 underlay 网络的 MTU 小 4 字节,以适应 VLAN 透明度所需的额外标记。例如,如果 underlay 网络 MTU 为 1500,则将接口 MTU 设置为 1496。

    以下示例命令在 eth0 上添加了一个 MTU 为 1496 的 VLAN 接口。VLAN 为 50,接口名称为 vlan50

    示例

    $ ip link add link eth0 name vlan50 type vlan id 50 mtu 1496
    $ ip link set vlan50 up
    $ ip addr add 192.128.111.3/24 dev vlan50

  7. 对于您在虚拟机内在 VLAN 接口(第 4 步)中创建的 IP 地址,选择这些替代方案之一:

    • 在虚拟机端口上设置允许的地址对。

      示例

      以下示例在端口 fv82gwk3-qq2e-yu93-go31-56w7sf476mm0 上设置了允许的地址对,并使用 192.128.111.3,并选择性地添加 MAC 地址 00:40:96:a8:45:c4:

      $ openstack port set --allowed-address \
      ip-address=192.128.111.3,mac-address=00:40:96:a8:45:c4 \
      fv82gwk3-qq2e-yu93-go31-56w7sf476mm0
    • 禁用端口上的端口安全性。

      当无法列出允许的地址对中所有可能的组合时,禁用端口安全性会提供实际的替代方法。

      示例

      以下示例禁用端口 fv82gwk3-qq2e-yu93-go31-56w7sf476mm0 的端口安全性:

      $ openstack port set --no-security-group \
      --disable-port-security \
      fv82gwk3-qq2e-yu93-go31-56w7sf476mm0

验证

  1. 使用 vlan50 IP 地址在 VLAN 上的两个虚拟机之间 ping。
  2. eth0 上使用 tcpdump 以查看数据包是否到达 VLAN 标签是否完好。