[ English | Indonesia | русский ]
密码轮换¶
警告
这些 playbook 并不能保证在现有环境中实现零停机时间的密码轮换。在后端重置密码和重启服务以应用新值之间,预计服务会有停机时间。
所有服务密码都定义并存储为 OpenStack-Ansible 中的 Ansible 变量。这允许操作员使用 Ansible Vault 以加密格式存储密码,或者将它们定义为指向 SOPS 或 OpenBao 的查找。
典型的密码更改流程包括以下步骤
在 Ansible 变量中定义新密码(或定义查找指向的位置)。
更改基础设施后端上的密码(例如 MariaDB、RabbitMQ 等)。
使用新密码更新服务配置文件。
重启服务以应用新的配置。
由于可以用于存储和定义 Ansible 变量的方法多种多样,因此我们将密码定义更改的过程排除在此文章的范围之外,并将重点仅放在将新密码应用于环境的过程上。
将新密码应用于服务¶
典型的服务在“infra”后端中有一组用于身份验证的密码,包括但不限于
Keystone
MariaDB
RabbitMQ
由于密码更改后预计服务会有停机时间(通常发生在每个角色的最开始),因此确保 playbook 执行速度尽可能快非常重要。为此,我们将为每个“后端”单独使用一组特定的标签和变量。
对于以下示例,我们将 Nova 作为示例服务,因为 Nova 可能由于需要更新的主机数量而面临 playbook 运行时间最长的问题。
作为一种常见技术,我们将禁用默认启用的 serial 执行,因为后端密码将在第一个主机运行时重置,因此其余主机无论使用何种 serial 均无法正常通信。
以下所有部分的一个共同点是使用 post-install 标签。它是在 2024.1 (Caracal) 版本中引入的,仅应用于 <service>_post_install.yml 任务,即发生配置文件模板化的任务。
更改服务的 Keystone 密码¶
为了触发服务中 Keystone 的密码更新,我们需要提供 service_update_password 变量。要执行类似 Nova 的服务的 Keystone 密码轮换,您需要执行如下 playbook
openstack-ansible openstack.osa.nova -e nova_conductor_serial=100% -e nova_compute_serial=100% \
-e service_update_password=true --tags common-service,post-install
更改服务的 MariaDB 密码¶
要执行类似 Nova 的服务的 MariaDB 密码轮换,您需要执行如下 playbook
openstack-ansible openstack.osa.nova -e nova_conductor_serial=100% -e nova_compute_serial=100% \
--tags common-db,post-install
更改服务的 RabbitMQ 密码¶
要执行类似 Nova 的服务的 MariaDB 密码轮换,您需要执行如下 playbook
openstack-ansible openstack.osa.nova -e nova_conductor_serial=100% -e nova_compute_serial=100% \
--tags common-mq,post-install
一次性更改服务的全部密码¶
值得一提的是,操作员可以将它们组合在一起,以同时执行所有后端的密码轮换。虽然这会增加 playbook 运行时间(从而增加停机时间),但如果需要更改所有密码,仍然会更有效。
要更新前面部分中提到的所有密码,我们将简单地组合所有使用的标签和变量
openstack-ansible openstack.osa.nova -e nova_conductor_serial=100% -e nova_compute_serial=100% \
-e service_update_password=true --tags common-service,common-db,common-mq,post-install