在 tripleo-heat-templates 中移动证书管理¶
Launchpad蓝图
https://blueprints.launchpad.net/tripleo/+spec/ansible-certmonger
问题描述¶
当前使用 Puppet 和 Certmonger 管理证书的方式存在多个问题,尤其是在容器化环境中
多个容器使用相同的证书
在证书更新时,很难确定需要重启哪些容器
共享证书不好
目前的主要问题是 “pkill” 的使用,特别是对于 httpd 服务。由于 Certmonger 不知道哪个容器正在运行 httpd 服务,它会使用一个大范围的“捕蝇纸”,希望所有相关的服务都能有效地使用新的证书重新加载。
在强制 SELinux 主机上,Certmonger 使用 “pkill” 的行为是被阻止的。
提议的变更¶
引言¶
虽然 certmonger 的使用没有问题,但我们使用它的方式有问题。
本文档的目标是描述我们如何改变这种使用方式,从而提供更好的安全性,同时允许 Certmonger 只重启必要的容器,并以一种简单的方式实现。
在 Ansible 中实现 certmonger¶
第一步是在 Ansible 中实现一个 certmonger “模块”。 有两种方法可以做到这一点
可重用角色
原生 Ansible 模块
虽然前者实现起来更快,但后者更好,因为它将允许提供一种干净的方式来管理证书。
将证书管理移动到 tripleo-heat-templates¶
一旦我们有了在 Ansible 中管理 Certmonger 的方法,我们就可以将调用直接移动到相关的 tripleo-heat-templates 文件中,从而生成每个容器的证书。
这样做也将允许 Certmonger 确切地知道在证书更新时重启哪个容器,使用一个简单的 “container_cli kill” 命令。
替代方案¶
提出了一种替代方案
维护一个列表¶
我们可以保持代码不变,并添加一个需要重启/重新加载的容器列表。 Certmonger 将循环遍历该列表,并在证书更新时执行其操作。
这不是一个好的解决方案,因为该列表最终会缺乏更新,这将导致新的问题,而不是解决当前的问题。
此外,它不允许获取每个容器的证书,这是不好的。
建议路线图¶
在 Stein 中
在 tripleo-common 中创建 “tripleo-certmonger” Ansible 可重用角色
在 Train 中
将证书管理/生成移动到 tripleo-heat-templates 中。
评估转向 Certmonger 的适当 Ansible 模块的好处。
如果评估良好并且有时间,则实现它并更新当前代码。
在 “U” 版本中
检查是否有任何内容依赖于 puppet-certmonger,如果不是,则删除此模块。
安全影响¶
我们将通过避免共享 x509 密钥对来提供更好的安全级别。
升级影响¶
每个使用共享证书的容器都将被重启,以便加载新的专用证书。
我们将必须确保 nova 元数据得到正确更新,以便让 novajoin 在 FreeIPA 中创建服务,从而允许请求每个服务的证书。
还应该对 novajoin 更新/升级进行测试,以确保一切正常工作。
如果容器已经在使用专用证书,则预计不会有其他影响。
最终⽤户影响¶
在升级期间,预计会有标准的短时间停机,除非使用 HA 进行部署。
性能影响¶
预计不会有重大的性能影响。
部署者影响¶
预计不会有重大的部署器影响。
开发人员影响¶
添加需要证书的新服务的人需要在新的 tripleo-heat-templates 文件中调用 Certmonger 模块/角色。
他们还需要确保生成新的元数据,以便让 novajoin 在 FreeIPA 中创建相关的服务。
实现¶
贡献者¶
Cédric Jeanneret
Grzegorz Grasza
Nathan Kinder
工作项¶
实现 Certmonger 的可重用角色
将证书管理移动到 tripleo-heat-templates
从 Puppet 中删除 certmonger 部分
更新/创建有关证书管理所需的文档
稍后:* 实现一个适当的 Ansible 模块 * 更新角色以包装模块调用
依赖项¶
无 - 目前,不存在用于 Ansible 的 Certmonger 模块。
测试¶
我们必须确保生成具有正确内容的专用证书,并确保它由正确的容器提供。
我们可以使用 openssl CLI 来实现,也许可以在 tripleo-quickstart-extras 中的新角色中添加一个新的检查。
这与 novajoin 密切相关,因此我们必须确保它按预期工作。
文档影响¶
我们需要记录如何管理证书。