OVN 外部端口

本页的目的是描述 ML2/OVN 如何利用 OVN 的 外部端口 功能。

它是什么

OVN 中的外部端口功能允许设置一个端口,该端口位于实例外部,并负责代表实例回复 ARP 请求(DHCP、内部 DNS、IPv6 路由器请求等)。目前,此功能在 ML2/OVN 的两种用例中使用

  1. SR-IOV

  2. 裸机配置

ML2/OVN 将为具有以下 VNIC 的端口创建类型为 external 的端口

  • direct

  • direct-physical

  • macvtap

  • baremetal

可以使用以下命令在 OVN 中列出这些端口

$ ovn-nbctl find Logical_Switch_Port type=external
_uuid               : 105e83ae-252d-401b-a1a7-8d28ec28a359
ha_chassis_group    : [43047e7b-4c78-4984-9788-6263fcc69885]
type                : external
...

下一节将更详细地介绍这些端口的不同配置以及它们在 OVN 数据库中的表示方式。

调度和数据库信息

类型为 external 的端口将在标记为托管这些类型端口的节点上进行调度,通过 ovn-cms-options 配置。这些节点支持两种配置

  1. enable-chassis-as-extport-host

  2. enable-chassis-as-gw

可以通过在将充当托管这些端口的候选节点的每个节点上本地运行以下命令来设置这些选项

$ ovs-vsctl set Open_vSwitch . external-ids:ovn-cms-options=\"enable-chassis-as-extport-host\"

$ ovs-vsctl set Open_vSwitch . external-ids:ovn-cms-options=\"enable-chassis-as-gw\"

以下部分将解释这两种配置值之间的区别。

配置:enable-chassis-as-extport-host

当集群中的节点标记为 enable-chassis-as-extport-host 配置时,ML2/OVN 驱动程序会将外部端口调度到这些节点上。此配置优先于 enable-chassis-as-gw

使用此配置,ML2/OVN 驱动程序将为每个外部端口创建一个 HA_Chassis_Group,并将其命名为 neutron-extport-<Neutron Port UUID>。例如

$ ovn-sbctl list Chassis
_uuid               : fa24d475-9664-4a62-bb1c-52a6fa4966f7
external_ids        : {ovn-cms-options=enable-chassis-as-extport-host, ...}
hostname            : compute-0
name                : "6fd9cef6-4e9d-4bde-ab82-016c2461957b"
...
_uuid               : a29ee8f6-5301-45f5-b280-a43e533d4d65
external_ids        : {ovn-cms-options=enable-chassis-as-extport-host, ...}
hostname            : compute-1
name                : "4fa76c10-c6ea-4ae9-b31c-bc69103fe6f9"
...
$ ovn-nbctl list HA_Chassis_Group neutron-extport-392a77f9-7c48-4ad0-bd06-8b55bba00bd1
_uuid               : 1249b761-24e3-414e-ae10-7e880e9d3cf8
external_ids        : {"neutron:availability_zone_hints"=""}
ha_chassis          : [0d6b9718-7718-45d2-a838-1deb40131442, ae6e64e7-f948-49b3-a171-c9cfb58c8b31]
name                : neutron-extport-392a77f9-7c48-4ad0-bd06-8b55bba00bd1

此外,为了实现 HA,每个 HA_Chassis_Group 的 Chassis 数量限制为五个,这意味着即使标记为 enable-chassis-as-extport-host 选项的节点更多,每个组最多包含五个成员。施加此限制是因为 OVN 使用 BFD 监控每个组成员的连接性,并且拥有无限数量的成员可能会给 OVN 带来很大的压力。

通常,当对 external 端口有特定要求,并且它们无法在控制器或网关节点上调度时,使用此选项。下一个配置则相反,使用标记为网关的节点来调度 external 端口。

配置:enable-chassis-as-gw

对于大多数用例,如果没有对 external 端口有特殊要求,并且它们可以与网关端口共存,则应使用此配置。

网关节点由 enable-chassis-as-gwovn-bridge-mappings 配置标识

$ ovn-sbctl list Chassis
_uuid               : 12b13aff-a821-4cde-a4ac-d9cf8e2c91bc
external_ids        : {ovn-cms-options=enable-chassis-as-gw, ovn-bridge-mappings="public:br-ex", ...}
hostname            : controller-0
name                : "1a462946-ccfd-46a6-8abf-9dca9eb558fb"
...

它是什么 部分所述,每次创建具有特定 VNIC 的 Neutron 端口时,OVN 驱动程序都会在 OVN Northbound 数据库中创建一个类型为 external 的端口。

当使用 enable-chassis-as-gw 配置时,ML2/OVN 驱动程序将为每个网络创建一个 HA_Chassis_Group(而不是像前一种情况那样为每个外部端口创建一个),并将其命名为 neutron-<Neutron Network UUID>

属于此网络的所有 external 端口将共享相同的 HA_Chassis_Group,并且该组的成员数量也限制为最多五个,以实现 HA。

$ ovn-nbctl list HA_Chassis_Group
_uuid               : 43047e7b-4c78-4984-9788-6263fcc69885
external_ids        : {"neutron:availability_zone_hints"=""}
ha_chassis          : [3005bf84-fc95-4361-866d-bfa1c980adc8, 72c7671e-dd48-4100-9741-c47221672961]
name                : neutron-4b2944ca-c7a3-4cf6-a9c8-6aa541a20535

高可用性

如上所述,ML2/OVN 驱动程序确实为 external 端口提供高可用性。这是通过 OVN 的 HA_Chassis_Group 机制完成的。

在每个 external 端口上,将有一列名为 ha_chassis_group,它指向该端口所属的 HA_Chassis_Group

$ ovn-nbctl find logical_switch_port type=external
ha_chassis_group    : 924fd0fe-3e84-4eaa-aa1d-41103ec511e5
name                : "287040d6-0936-4363-ae0a-2d5a239e55fa"
type                : external
...

HA_Chassis_Group 中,每个组的成员在 ha_chassis 列中列出

$ ovn-nbctl list HA_Chassis_Group 924fd0fe-3e84-4eaa-aa1d-41103ec511e5
_uuid               : 924fd0fe-3e84-4eaa-aa1d-41103ec511e5
external_ids        : {"neutron:availability_zone_hints"=""}
ha_chassis          : [3005bf84-fc95-4361-866d-bfa1c980adc8, 72c7671e-dd48-4100-9741-c47221672961]
name                : neutron-extport-287040d6-0936-4363-ae0a-2d5a239e55fa

注意

每个组的成员数量最多为五个,施加此限制是因为 OVN 使用 BFD 监控每个成员的连接性,并且拥有无限数量的成员可能会给 OVN 带来很大的压力。

在列出组的成员时,将有一列名为 priority,其中包含一个数值,具有最高 priority 的成员是托管端口的 Chassis。OVN 将通过 BFD 协议监控每个成员,如果托管端口的 Chassis 发生故障,端口将自动调度到下一个优先级最高的活动 Chassis 上。

$ ovn-nbctl list HA_Chassis 3005bf84-fc95-4361-866d-bfa1c980adc8 72c7671e-dd48-4100-9741-c47221672961
_uuid               : 3005bf84-fc95-4361-866d-bfa1c980adc8
chassis_name        : "1a462946-ccfd-46a6-8abf-9dca9eb558fb"
external_ids        : {}
priority            : 32767

_uuid               : 72c7671e-dd48-4100-9741-c47221672961
chassis_name        : "a0cb9d55-a6da-4f84-857f-d4b674088c8c"
external_ids        : {}
priority            : 32766

在上面的示例中,UUID 为 1a462946-ccfd-46a6-8abf-9dca9eb558fb 的 Chassis 是托管外部端口 287040d6-0936-4363-ae0a-2d5a239e55fa 的 Chassis。