ML2+OVS+DVR 和 OVN 的融合

Launchpad Bug: https://bugs.launchpad.net/neutron/+bug/1828607

在当前状态下,DVR 缺乏一些对操作人员有益的功能。在寻找解决这些问题的方法时,我们发现 DVR 在 ML2+OVS 上的期望状态和 OVN 之间存在大量功能重叠。本规范旨在概述这些重叠区域以及 OVN 或 ML2+OVS+DVR 缺乏功能的区域,然后描述一个融合这两个解决方案的计划。

问题描述

在当前状态下,ML2+OVS+DVR 存在以下差距

  • 当处理大量端口以及大量节点参与 neutron 部署时,控制平面可扩展性。

  • 在与 BGP 和/或 neutron-dynamic-routing 结合使用 IPv6 时,对分布式入口/出口的支持。

  • 由于其使用 linux 命名空间,DVR 无法使用智能网卡技术或用户空间工具进行干净地卸载。

除了上述缺点之外,DVR 还可以从以下增强功能中受益

  • 如果操作人员选择,支持在没有网络节点的情况下运行

  • 支持分布式 DHCP(本地 DHCP 响应器) [1]

  • 支持分布式 SNAT

在考虑增强控制平面可扩展性、分布式 DHCP 以及将所有转发策略推送到 OVS 以进行潜在的硬件卸载时,我们注意到 OVN 已经实现了其中许多功能。OVN 也缺乏 ML2+OVS+DVR 具有的一些功能,例如完全分布式的入口和出口,这使得可以将所有南北流量直接路由到适当的计算节点,绕过中央网络节点。

提议的变更

为了解决之前讨论的问题,ML2+OVS+DVR 解决方案将与 networking-ovn 解决方案合并。作为期望的最终状态,neutron 将 OVN 作为基于 OVS 的环境的参考 ML2 插件。这具有以下好处

  • Neutron 可以利用 OVN 提供的控制平面性能优化。

  • 消除了核心 neutron 开发人员和 networking-ovn 开发人员的工作重复,并允许针对解决规模、数据平面性能和 neutron 中可用性问题的想法进行交叉传播。

  • 使支持 neutron 和 OVN 的开发人员社区保持一致,扩大了 neutron 的潜在贡献者基础。

为了使这项工作成功并最大限度地减少对用户的干扰,应考虑以下事项

  • 用户实际上会观察到更好的控制平面扩展性吗?

  • 用户会失去对任何用例的支持吗?

  • 迁移路径是什么?迁移会造成多大的破坏?如何简化它?

以下部分试图回答这些问题,并概述 ML2+OVS+DVR 和 networking-ovn 融合的程序和技术方面。

功能差距分析

这是 ML2/OVS 和 OVN 之间当前已知差距的列表。它不是一个完整的列表,但足以作为实现人员在弥合这些差距时使用的起点。OVN 的 TODO 列表位于 [2]

  • 分片和巨型帧支持

    • 上游工作已在 OVS/OVN 代码中完成,networking-ovn 仓库中还需要额外的工作才能启用它。更改在 [3]

  • 端口转发

    • 目前 ML2/OVS 支持南北方向的端口转发。浮动 IP 的特定 L4 端口可以定向到 VM 的特定固定 IP:端口号,以便在 VM 中运行的不同服务可以隔离,并且可以轻松地与外部网络通信。

    • 这是一个相对较新的扩展,需要向 OVN 添加支持。

      一种可能的方法是使用 OVN 原生负载均衡功能。OVN 负载均衡器表示在 OVN 北向负载均衡器表中。通常,VIP 及其成员表示为 [4]

      VIP:PORT = MEMBER1:MPORT1, MEMBER2:MPORT2

      可以将其扩展为端口转发,如下所示

      FIP:PORT = PRIVATE_IP:PRIV_PORT

  • 安全组日志 API

    • ML2/OVS 支持一个日志文件,其中记录了安全组事件,供安全实体使用。这允许用户检查实例是否正在尝试执行受限制的操作,或访问远程服务器上的受限制端口。

    • 这是一个相对较新的扩展,需要向 OVN 添加支持。

  • QoS DSCP 支持

    • 目前 ML2/OVS 支持 QoS DSCP 标记和出口带宽限制。这些是基本的 QoS 功能,虽然集成在 OVS/OVN C 核心中,但尚未集成(或完全测试)在 neutron OVN 机制驱动程序中。

  • QoS 用于 Layer 3 IP

    • 目前 ML2/OVS 支持基于 Linux TC 的浮动 IP 和网关 IP 带宽限制。Networking-ovn 具有原型实现 [5],基于 openvswitch 的计量器 [6] 实用程序,仅在用户空间数据路径中支持,或内核版本 4.15+ [7]

  • QoS 最小带宽支持

    • 目前 ML2/OVS 支持 QoS 最小带宽限制,但 OVN 不支持。

  • BGP 支持

    • 目前 ML2/OVS 支持通过 BGP 使租户子网可路由,并可以为浮动和固定 IP 地址通告主机路由。

性能影响

在 2018 年底进行的性能测试表明,OVN 在大多数操作中都优于 ML2/OVS [8]。只有创建网络和列出端口的速度较慢,这主要是因为 OVN 在创建网络时会创建一个额外的端口(用于元数据),因此对于 OVN 案例,相同 rally 任务列出的端口数量是 2 倍。

此外,OVN 中的资源利用率较低 [9] 与 ML2/OVS [10],主要是由于缺乏代理以及不使用 RPC。

一个提出的问题是 OVN 使用 Geneve 而不是 VXLAN,以及这是否会引入任何性能问题。研究表明这没有问题。通常,支持 VXLAN 的网卡也支持 Geneve 硬件卸载。有趣的是,即使在不支持的情况下,由于 Geneve 受益的其他优化,使用 Geneve 的性能也更好。更多信息可以在 Russell Bryant 的博客中找到 [11],他在这方面做了大量工作。

其他部署者影响

从 ML2/OVS 迁移到 OVN 取决于使用的部署工具。目前,TripleO 上的迁移文档位于 [12],其中一些可能适用于其他部署工具。将信息重写为不同的部分 - 一部分是通用的高级描述,说明需要哪些步骤,另一部分是特定于部署的说明,将有助于其他人添加更多工具。

开发人员影响

  • 将 networking-ovn 代码移动到 neutron 仓库并将 OVN 作为树内驱动程序

    • 将 networking-ovn 移动到 neutron 仓库是支持融合的第一步。

    • 一个 etherpad 用于跟踪信息和工作项,位于 [13]

  • IPv6 的分布式入口/出口

    • 在当前状态下,DVR 支持使用 IPv4 时的分布式入口和出口。当使用浮动 IP 时,它可以路由到计算节点上的 fip-xxxxx 命名空间中的 /32 主机路由(在使用 neutron-dynamic-routing 时),或者可以从 fip-xxxxx 命名空间发送 gratuitous ARP。

    • 当使用 IPv6 时,所有云入口和出口流量都通过集中式路由器发送。这意味着无法将流量直接引导到计算节点。

    • 为了解决这个问题,将实现 IPv6 的分布式入口/出口(也称为“快速退出”)。这将允许到达 fip-xxxxx 命名空间中的 IPv6 数据包通过计算节点上的适当 qrouter-xxxxx 命名空间路由,绕过托管在网络节点上的集中式路由器。

    • 存在一个现有的 RFE,请参阅 [14]

  • 支持智能网卡或用户空间卸载

    • 这涉及将所有 DVR 转发策略推送到 OVS 并通过 OpenFlow 实现它。

    • 由于所有转发/安全策略都直接推送到 OVS,因此应评估当前卸载到硬件的哪些流规则,如果可能的话。如果可能,应重写应针对优化卸载潜力进行调整的任何规则以支持卸载。

    • neutron 中存在一个基于 openflow 的 DVR 的蓝图,请参阅 [15],但概念验证补丁已被放弃 [16]

  • 允许完全去中心化操作

    • 这涉及使操作人员能够在不引入网络节点概念的情况下运行其环境。

    • 这意味着支持分布式 SNAT、分布式 DHCP 以及 IPv4 和 IPv6 的分布式入口/出口。

    • 与 neutron-dynamic-routing 兼容,直接路由到租户网络 [17]

    • 在完全去中心化的部署中,路由器作为逻辑结构,不需要被认为是“HA”或“分布式”,因为它本质上都是由 virtue of 在每个计算节点上实例化。

  • 分布式 SNAT

    • 这涉及允许 SNAT 直接在计算节点上发生,而不是将其集中在网络节点上。

    • 为了在使用基于命名空间的 DVR 实现时提供适当的租户隔离,SNAT 将执行两次(插入图表并详细说明此处)。

    • 未解决的问题

      • SNAT 流量是否应使用 FIP 网关 IP 作为源地址,或者是否应使用与租户路由器相关的 IP 地址?使用 FIP 网关 IP 似乎更简单,并减少了地址使用(尽管子网服务类型使这个问题不太重要)。另一方面,与路由器关联的地址允许更好地审查网络流量,因为流量可以与特定的项目和路由器相关联。

      • 允许操作人员选择是否使用分布式 SNAT 是前进的最佳方式。

    • 有关一些历史背景和详细信息,请参阅 [18]

CLI 影响

预计不会对 CLI 产生影响。将继续支持所有现有的 CLI 命令。

API 影响和所需的扩展

OVN 插件支持的扩展与 ML2+OVS 相比,应在数据平面功能方面提供等效的功能,例如 trunks、路由网络、地址范围等。在所有情况下,匹配对每个特定扩展的支持不是必需的。例如,OVN 在其实现中提供 DVR 功能,而无需实现 DVR 引入的 API 扩展。

实现

负责人

工作项

  • 将 networking-ovn 移动到 neutron 树中。

  • 确保为功能差距和开发人员影响部分中的所有项目创建了 RFE。

  • 用于捕获使用 OVN 的控制平面性能的 Rally 作业。

参考资料