移除 neutron-LBaaS,又名 LBaaS 项目拆分

Octavia 项目在创建新的 LBaaS 参考实现的同时,也以标准的 pecan/wsgi OpenStack 端点实现了 LBaaS API。

Octavia LBaaS API 将与 Neutron LBaaS v2 API 完全相同且兼容,除了缺少 /lbaas 根 URL token。

现有 neutron API 端点的用户在两个周期内不会看到任何差异,这意味着可能在 P 或 Q 版本中移除,具体取决于这项工作何时完成。请注意,如果 shim 维护成本足够低,它可能会存在更长时间;这取决于 neutron PTL 和核心团队的决定。

本规范描述了移除 LBaaS 作为 neutron 扩展,并使其成为一个独立项目的过程。

问题描述

Octavia 提供了一个与 neutron-lbaas 提供的 API 和插件机制几乎完全相同的 API 和插件机制,而无需紧密耦合,这引发了我们现在为什么要维护两者的疑问,现在 lbaasv1 已经过时。本次拆分的的主要目标是简化两者的管理和实现,同时为操作员和最终用户提供尽可能无缝的体验。

拆分 LBaaS 项目的原因有很多

  • 将您的服务塞进 neutron-server 的内部,而您的代码却在单独的仓库中,这一直是一个相当脆弱的方案。

    • 核心 neutron 的重构可能会破坏 LBaaS。

    • 共同 gate 会增加两个项目的 gate 不稳定性,并且可以移除。

    • Neutron 扩展会妨碍微版本管理,并使迁移变得混乱。

  • 我们将不再重复测试几乎相同的功能,并且消耗更多的基础设施和测试资源。

  • LBaaS 和 neutron 的活跃团队几乎没有重叠,因此管理两者的额外开销对 neutron 没有好处,并且会减慢 LBaaS 的速度。

  • Octavia 有自己的 REST API,所以为什么还要维护两个,如果我们可以使它们兼容呢?

反对的理由

  • 完成准备成为一个完全独立的项目的繁琐工作量很大,如下面的提议变更中所列,但两个更简单的项目的回报似乎是值得的。

  • 将所有“网络”API 放在一个伞形下有一定的价值,但也有先例表明更高级别的服务位于外部(DNSaaS)。

提议的变更

此更改列表将分为“第一阶段”和“第二阶段”。第一阶段是进行治理变更和停止维护 neutron-lbaas 的最低限度的更改,而第二阶段是任何独立 OpenStack 项目所需的逻辑后续步骤。

Octavia 是一个 API 服务器、LBaaS 的服务 VM 框架,以及 LBaaS 的参考实现。目前仅支持以服务 VM 为中心的驱动程序

第一阶段

  • 在 Octavia 中,需要添加一个接口,以便可以在 API 服务器后面使用非服务 VM 驱动程序(例如硬件设备或现有的 lbaas 驱动程序)。此驱动程序接口应直接接受当前的 neutron LBaaS v2 驱动程序,前提是这些驱动程序仅限于传递的对象和公共 lbaas 插件接口。当前的 neutron lbaasv2 驱动程序将被移动到 octavia 仓库中,但任何深入 neutron 内部的驱动程序很可能会破坏。所以,不要深入内部。

  • 修改 neutron-LBaaS API 扩展,使其成为直接的代理传递到 octavia api 控制器。

  • 通知供应商验证他们的驱动程序是否与 Octavia API 控制器兼容,并迁移他们的第三方 CI。

  • 通知使用 LBaaS 的其他项目,特别是 Heat。

  • 移除 neutron-LBaaS/neutron 共同 gate。

  • 验证从用户和 API 角度的最低文档覆盖率。

  • 申请从 neutron stadium 到 big tent 的治理变更。这包括将 neutron-lbaas 移动到 octavia 中,除非 neutron /lbaas 代理是 neutron 自身的 pecan 路由,然后 neutron-lbaas 可以简单地被移除/发送到 attic。

第二阶段

  • 创建客户端库,和/或在 openstackclient/sdk 中直接支持。现有的 ‘openstack loadbalancer’ 会发生什么?它只是在几个版本中 neutron 的代理吗?从长远来看,它将是一个 OSC 插件。

  • 创建/验证/移动已经为 neutron-lbaas 编写的 API/安装指南/用户文档。

在此过渡期间,以及此之后一段时间内,neutron /lbaas 代理将使这对于用户来说是透明的。

参考资料

概述 Octavia 需要进行此更改的规范

https://review.openstack.org/#/c/310667/

提议的 neutron-lbaas 代理 shim 层

https://review.openstack.org/#/c/328053/

Brandon 在 Octavia 中创建 lbaasv2 驱动程序层的工作

https://review.openstack.org/#/c/311586/

WIP 治理补丁,在第一阶段接近完成时将保持 WIP 状态

https://review.openstack.org/#/c/313056/

Octavia 的 ‘api_handler’ 接口,与当前的 lbaasv2 驱动程序接口类似(参见 311586,了解如何使这与当前驱动程序无缝衔接)

https://github.com/openstack/octavia/blob/master/octavia/api/v1/handlers/abstract_handler.py