Octavia Charm¶
问题描述¶
目前,我们对 LBaaS 的支持使用了 neutron-lbaas service_plugin 和 service_provider 驱动程序。在现有实现中,负载均衡器代码(是数据平面的一部分)直接在 neutron 网关单元的命名空间中运行。
从 Queens OpenStack 发布周期开始,neutron-lbaas 和 neutron-lbaas-dashboard 项目已被标记为已弃用,并且已停止接收更新。它们将在未来的某个时间点完全删除。
我们对 neutron-lbaas 驱动程序的用法也为需要 TLS 的用户提供了次优的配置。
提议的变更¶
neutron-lbaas 项目已被 octavia、octavia-dashboard 和 python-octaviaclient 取代。
octavia 具有单独的 API 端点,并实现了 LBaaS v2 API 的超集。对于现有用户的迁移,有一个 lbaasv2-proxy service plugin,它允许 neutron API 端点在迁移期间将 LBaaS v2 API 调用转发到 octavia 端点。
与 neutron-lbaas 实现相反,octavia 将数据平面负载均衡器代码作为云中的实例运行。这在负载均衡器软件本身的选择自由度和服务的动态扩展方面都提供了更丰富的灵活性。
在扩展方面,octavia 的大多数(如果不是全部)服务都受益于根据正在运行的负载均衡器数量和负载均衡器生命周期事件按比例扩展。因此,将 API、Worker、Health Manager 和 Housekeeping Manager 守护进程放置在同一个 charm 单元中,并通过增加部署的 charm 单元数量来扩展是有意义的。
有一个基于 Ubuntu 云镜像运行 HAProxy 的参考实现负载均衡器,称为 amphorae。
备选方案¶
由于我们当前提供 LBaaS 的依赖项已被弃用并将在未来某个日期删除,因此没有真正的替代方案来完成这项工作。
实现¶
负责人¶
- 主要负责人
fnordahl
Gerrit Topic¶
对于与此规范相关的所有补丁,请使用 Gerrit 主题“octavia-charm”。
git-review -t octavia-charm
工作项¶
实现一个新的 principal
octaviacharm,它将部署octaviaAPI、Worker、Health Manager 和 Housekeeping Manager 守护进程。该 charm 必须具有您期望的 OpenStack API charm 的所有特征,例如 TLS、HA、暂停/恢复操作、升级等。对
neutroncharms 进行必要的更改,以便与octavia配合使用。对
openstack-dashboardcharm 进行必要的更改,以将neutron-lbaas-dashboard替换为octavia-dashboard。实现支持将 TLS 私钥保存在
Vault中,无论是通过与barbican的关系,还是通过直接利用castellan库来实现。实现支持在部署后配置和连接
octavia与其部署的负载均衡器实例之间的专用管理网络。这将通过与neutronAPI 交互并使用 charm 部署neutron-openvswitchsubordinate 来完成。neutron-openvswitchsubordinate 将自动处理创建访问覆盖网络的必要隧道,然后我们可以在部署octavia服务的单元上创建OpenvSwitch端口。提供文档和/或必要的操作,以获取、配置或(如果需要)构建
amphorae负载均衡器软件镜像。提供文档和/或必要的操作,以迁移现有的负载均衡器工作负载到
octavia。
仓库¶
需要一个新的 git 仓库来存放 octavia charm。
https://git.openstack.org/openstack/charm-octavia
文档¶
octavia charm 应该包含一个 README,其中包含有关部署 charm 的说明。
安全性¶
提供 TLS 终止流量是负载均衡器服务的基本功能。随之而来的是对敏感信息(如私钥)的安全处理和存储的责任。
将实施处理和存储这些密钥的最佳实践。
如果我们向用户提供构建
amphorae镜像的机制,必须明确构建镜像的安全性和及时更新的责任完全在于我们的用户。在 undercloud 控制平面中放置的
octavia单元与 overcloud 中的负载均衡器实例之间的直接网络隧道是一种我们以前未遇到过的构造。我们必须仔细考虑所有方面,并牢记安全性和完整性。
测试¶
编写或更改的代码将涵盖在单元测试中;功能测试将使用 Zaza 完成。
依赖项¶
为了能够在
LXD容器中支持部署octaviacharm,我们依赖于Juju对 charm 控制的LXDprofile 更新 规范 的实现。