LBaaS 参考实现 TLS 支持¶
https://blueprints.launchpad.net/neutron/+spec/lbaas-ref-impl-tls-support
LBaaS 参考 HAProxy 实现需要改进以支持 TLS,包括 SNI。
此蓝图描述了应该对 HAProxy 参考实现进行的更改,以允许以下蓝图提供的功能:https://blueprints.launchpad.net/neutron/+spec/lbaas-ssl-termination https://blueprints.launchpad.net/neutron/+spec/lbaas-refactor-haproxy-namespace-driver-to-new-driver-interface 及其后续版本得以实现。
问题描述¶
当前参考驱动程序及其工具不支持“高级”功能,从而阻碍了‘lbaas-ssl-termination’蓝图建议的更高级 API 功能的进一步开发。
为了支持 TLS 卸载配置,参考驱动程序 (HAProxy) 必须更新,以确保适当的“后端”行为和能力。
- HAProxy 1.4 (当前稳定版) 中当前不支持的功能
TLS 终止。
TLS 源 IP 会话持久性
TLS 连接的 X-Forwarded-For 标头。
TLS 源 IP 负载均衡方法
TLS 重加密
此规范不包括 L7、源 IP 会话持久性、TLS 会话 ID 会话持久性、源 IP 负载均衡算法、TLS 重加密以及 x-forwarded-for 或基于证书的客户端身份验证的范围。
此规范的范围包括 TLS,包括 SNI 支持。
提议的变更¶
当前的参考驱动程序名为‘namespace_driver’,使用 HAProxy 1.4。更新为使用 HAProxy 1.5(取决于打包)。
为了实现这些功能,需要完成以下几点
1. 更新 HAProxy 配置文件。配置将使用规范中指定的 Jinja 构建:“https://blueprints.launchpad.net/neutron/+spec/ lbaas-refactor-haproxy-namespace-driver-to-new-driver-interface” 并对其进行扩展,以包含 TLS 功能。
配置工具将配置新的目录和文件,用于 HAProxy 和证书,结构如下。这将确保不会发生名称冲突。
$state_path/lbaas/$lb_uuid/
$state_path/lbaas/$lb_uuid/$cert1_barbican_id.pem
$state_path/lbaas/$lb_uuid/$cert2_barbican_id.pem
$state_path/lbaas/$lb_uuid/$certN_barbican_id.pem
$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
2. 包含私钥的 pem 文件将以只允许 root 读取的权限写入,以保护安全凭据。
修改 neutron.agent.linux.util#replace_file 以接受一个可选的‘file_mode’参数,以指定其他于默认‘0644’的权限。这可以防止攻击者在文件权限设置之前读取私钥的竞争条件。
3. 还有一些拆卸方法,即 undeploy_instance,需要更新以进行适当的清理。(杀死进程)。
其他想法:使用 devstack 的用户将无法使用此功能,除非手动安装或 devstack 本身已更新。在某个时候需要在该方面进行更新。
数据模型影响¶
无
REST API 影响¶
无。此蓝图旨在提供未来 REST API 版本中可以支持的功能。
安全影响¶
用户的私钥将被写入网络节点本地文件系统上 root 可读的文件中。
通知影响¶
无
其他最终用户影响¶
Devstack 需要更新以安装新的软件包(HAProxy 1.5)。
性能影响¶
必须进行额外的调用才能生成额外的实例。
TLS 卸载会增加网络节点的开销。
IPv6 影响¶
无
其他部署者影响¶
部署者需要确保安装新的依赖项。
开发人员影响¶
开发人员需要确保他们正在使用基于 lb 配置的附加工具。
开发人员需要创建一个实用程序来检索 Barbican 密钥/数据。
社区影响¶
此更改自 Juno 以来一直在审查中。 IRC 和邮件列表中进行了大量讨论。
备选方案¶
或者,如果我们想支持不同的 TLS 卸载工具,例如 Stud,我们可以支持在 HAProxy 前面加载的插件或扩展。
实现¶
负责人¶
- 主要负责人
phillip-toohill
- 其他贡献者
dlundquist
工作项¶
更新 haproxy ‘haproxy.conf’ 和 jinja 模板以处理新的配置。更新 namespace_driver 方法以进行新的操作。测试。
依赖项¶
测试¶
Tempest 测试¶
将 TLS 添加到现有的 LBaaS tempest 测试
功能测试¶
测试以验证 SSL 终止
API 测试¶
无
文档影响¶
用户文档¶
记录重构参考实现的行为和功能。
开发人员文档¶
记录重构参考实现的行为和功能。
参考资料¶
https://haproxy.cn/ https://blueprints.launchpad.net/neutron/+spec/lbaas-api-and-objmodel-improvement https://blueprints.launchpad.net/neutron/+spec/lbaas-refactor-haproxy-namespace-driver-to-new-driver-interface https://blueprints.launchpad.net/neutron/+spec/lbaas-ssl-termination