LBaaS 重构 HAProxy 命名空间驱动

https://blueprints.launchpad.net/neutron/+spec/lbaas-refactor-haproxy-namespace-driver-to-new-driver-interface

使用新的 LBaaS 对象模型和驱动接口,我们不再拥有可用的参考实现。

问题描述

现有的 HAProxy 命名空间驱动未实现新的 LBaaS 驱动 API,也不支持新的 LBaaS 对象模型支持的具有多个监听器的负载均衡器。

提议的变更

重构 LBaaS HAProxy 命名空间驱动以使用新的对象模型驱动接口。

使用 Jinja2 渲染 HAProxy 配置文件模板,而不是自定义的配置生成。

HAProxy 配置可以在单个 HAProxy 进程中包含每个负载均衡器的多个监听器。

在 $state_path/lbaas/$lb_uuid/ 中创建单独的文件,并将 HAProxy 写入的文件放置在 $state_path/lbaas/$lb_uuid/run 下,以便为在 $state_path/lbaas/$lb_uuid/ 下存储 TLS 私钥做准备。重命名存储在 $state_path/lbaas/$lb_uuid/ 中的配置文件、PID 文件和统计套接字,以避免与 Stunnel 发生名称冲突。进一步的 TLS 相关更改不在本规范的范围内。新的目录结构如下

$state_path/lbaas/$lb_uuid/
$state_path/lbaas/$lb_uuid/haproxy.conf
$state_path/lbaas/$lb_uuid/run/
$state_path/lbaas/$lb_uuid/run/haproxy.pid
$state_path/lbaas/$lb_uuid/run/haproxy_stats.sock

驱动程序需要检测套接字和/或 PID 文件是否不存在于新的位置,并升级正在运行的负载均衡器命名空间到新的文件系统。这将导致负载均衡器服务在 HAProxy 关闭和配置更新时出现短暂的中断。

进一步的 TLS 和第 7 层内容过滤/操作不在本规范的范围内,但其他规范可能依赖于此。

数据模型影响

REST API 影响

安全影响

限制对 $state_path/lbaas/$lb_uuid/ 的写入访问权限为 root,并将 HAProxy 修改的文件放置在 $state_path/lbaas/$lb_uuid/run/ 中。

通知影响

其他最终用户影响

性能影响

性能应与现有的 HAProxy 命名空间驱动程序相似。

IPv6 影响

其他部署者影响

部署者在升级数据库模式和 RPC 协议时,需要在重启 neutron-server 之前停止 lbaas-agent。

部署者还应注意负载均衡器服务的中断以及每个命名空间的的文件系统更新为新的配置。

为 HAProxy 命名空间驱动程序功能添加 Jinja2 要求,这已在 Neutron 的 VPNaaS 驱动程序中使用。

开发人员影响

这将显著影响 HAProxy 命名空间驱动程序,以适应新的驱动接口和多个监听器。

为 LBaaS 添加 Jinja2 要求可能需要 DevStack 更新。

社区影响

此更改自 Juno 以来一直在审查中。 IRC 和邮件列表中进行了大量讨论。

备选方案

实现不同的 LBaaS 参考驱动程序。

实现

负责人

主要负责人

https://launchpad.net/~dlundquist

其他贡献者

https://launchpad.net/~phillip-toohill

工作项

  • 开发 HAProxy 配置的 Jinja2 模板。

  • 更新 HAProxy 命名空间驱动程序。

依赖项

  • LBaaS API 和对象模型改进

  • LBaaS 对象模型驱动程序更改

测试

实施本规范将允许端到端测试新的 LBaaS 对象模型。

Tempest 测试

  • 应修改现有的 LBaaS 测试以测试 LBaaS v2

功能测试

  • 端到端 LBaaS v2 测试

API 测试

文档影响

用户文档

需要更新现有的 LBaaS 参考驱动程序文档。

开发人员文档

参考资料

  • specs/juno/lbaas-api-and-objmodel-improvement.rst

  • specs/juno/lbaas-objmodel-driver-changes.rst