路由

南北向

不同的配置详述在 参考架构 中。

非分布式 FIP

南北向流量通过每个路由器的活动机箱进行 SNAT 流量和 FIP 流量。

L3 North South non-distributed FIP

当连接到路由器的外部网络表示为 FLAT 或 VLAN 网络类型时,活动机箱由外部逻辑路由器端口标识。实际上这意味着,LRP 将在外部 LRP 的 hosting-chassis 属性中设置 status 行。您还可以使用 lrp-get-gateway-chassis 命令检查 LRP 的机箱优先级。更改优先级将导致流量故障转移到另一个机箱。

如果将另一个 Geneve 网络作为外部网络连接到路由器(通过为该网络创建 access_as_external RBAC 规则),路由器本身将被固定到机箱,而不是它的 LRP。在这种情况下,逻辑路由器在 options 行中定义了 chassis 属性。有了这个 GATEWAY_PORT 将不会为为 FIP 创建的 dnat_and_snat 规则定义,因为这将导致流量通过未绑定到任何机箱的 LRP 传递。

分布式浮动 IP

在下面的图中,我们可以看到没有浮动 IP 的虚拟机 (VM1, VM6) 仍然通过边缘路由器 R1 和 R2 上的 SNAT 通过网关节点进行通信。

而 VM3、VM4 和 VM5 具有分配的浮动 IP,其流量直接通过本地提供商桥接/接口流向外部网络。

L3 North South distributed FIP

L3HA 支持

Ovn 驱动程序以透明的方式实现 L3 高可用性。您无需启用任何配置标志。只要有多个能够充当连接到路由器的特定外部网络的 l3 网关的机箱,它就会将路由器网关端口调度到多个机箱,从而利用 OVN 的 Logical_Router_Port 表中的 gateway_chassis 列。

为了获得外部连接,要么

  • 一些网关节点在 Open_vSwitch 表的 external_ids 列中具有值为 enable-chassis-as-gwovn-cms-options,或者

  • 如果没有网关节点将 external ids 列设置为该值,那么所有节点都有资格托管网关机箱。

如何启用机箱托管网关的示例
$ ovs-vsctl set open . external-ids:ovn-cms-options="enable-chassis-as-gw"

在较低级别,功能大部分由具有 bundle active_passive 输出的 OpenFlow 规则实现。ARP 响应器和路由器启用/禁用由 ovn-controller 处理。FIP 和路由器外部地址的 Gratuitous ARP 由 ovn-controller 本身定期发送。

BFD 监控

OVN 通过 BFD 协议监控机箱的可用性,该协议封装在机箱到机箱之间建立的 Geneve 隧道之上。

L3HA BFD monitoring

标记为网关机箱的每个机箱将监控部署中的所有其他网关机箱以及计算节点机箱,以便让网关启用/禁用数据包和 ARP 响应/公告的路由。

每个计算节点机箱将通过 BFD 监控每个网关机箱,以自动将外部流量(snat/dnat)引导到给定路由器的活动机箱。

L3HA BFD monitoring (3 gateway nodes)

网关节点以星型拓扑相互监控。计算节点不相互监控,因为这没有必要。

故障转移(由 BFD 检测)

查看以下示例

L3HA BFD monitoring failover

计算节点对网关节点的 BFD 监控将检测到通往网关节点 1 的隧道端点已关闭,因此。因此,需要通过路由器进入外部网络的流量将被定向到 R1 的较低优先级机箱。R2 保持不变,因为网关节点 2 已经是 R2 的最高优先级机箱。

网关节点 2 将检测到通往网关节点 1 的隧道端点已关闭,因此它将负责 R1 的外部部分,并且它的 ovn-controller 将填充外部 ARP 响应器、流量转发 (N/S) 和定期 Gratuitous ARP 的流程。

网关节点 2 还会绑定路由器的外部端口(表示为南向数据库中的 chassis-redirect 端口)。

如果网关节点 1 仍然存活,将检测到接口 2 的故障转移,因为它没有看到任何其他节点。

目前还没有检测外部网络故障的机制,因此作为检测网络故障的最佳实践,我们建议所有接口都通过单个绑定接口和 VLAN 进行处理。

支持的故障模式是
  • 网关机箱断开与网络的连接(隧道接口)

  • ovs-vswitchd 已停止(它负责 BFD 信号)

  • ovn-controller 已停止,因为 ovn-controller 会将自身从注册机箱中删除。

注意

作为补充说明,重要的是要理解,就像 VRRP 或 CARP 协议一样,这种检测机制仅适用于链路故障,而不适用于路由故障。

故障恢复

OVN 中的 L3HA 行为是抢占性的(至少目前是这样),因为这将路由器平衡回原始机箱,避免任何网关节点成为瓶颈。

L3HA BFD monitoring (Fail back)

东西向

ovn 驱动程序上的东西向流量完全分布式,这意味着路由将在计算节点上内部发生,无需通过网关节点。

通过虚拟路由器传输流量,不同的子网

通过虚拟路由器传输流量,并且从一个虚拟网络/子网到另一个虚拟网络/子网的流量将直接从计算节点到计算节点进行封装,而所有路由操作(如 TTL 减小或 MAC 地址交换)将在数据包源主机上的 OpenFlow 中处理。

East/West traffic across subnets

相同子网之间的流量

相同子网之间的流量将如以下图所示进行,尽管这种通信方式不使用路由(仅封装),但为了完整性起见,已包含在内。

East/West traffic same subnet

如果两个实例位于同一主机上(VM1 和 VM2),则流量将直接从实例到实例通过 br-int 传输,或者当位于不同主机上时(VM3 和 VM4)通过封装传输。

数据包分片

Neutron 配置文件变量 [ovn]ovn_emit_need_to_frag 配置 OVN 在 MTU 不匹配时发出“需要分片”数据包。此配置选项允许 Neutron 在路由器网关 Logical_Router_Port 中设置选项“gateway_mtu”。如果来自任何网络的包到达网关 Logical_Router_Port,OVN 将发送“需要分片”消息。

为了允许任何 E/W 或 N/S 流量穿过路由器, “gateway_mtu” 的值将具有连接到路由器的所有网络的最低 MTU 值。如果定义的 MTU 较低,这可能会影响使用连接到路由器的网络的流量的性能。但是,用户可以取消设置 Neutron 配置标志,以避免分片,但代价是限制具有不同 MTU 的网络之间的通信。