[ English | Indonesia | русский ]

密码轮换

警告

这些 playbook 并不能保证在现有环境中实现零停机时间的密码轮换。在后端重置密码和重启服务以应用新值之间,预计服务会有停机时间。

所有服务密码都定义并存储为 OpenStack-Ansible 中的 Ansible 变量。这允许操作员使用 Ansible Vault 以加密格式存储密码,或者将它们定义为指向 SOPSOpenBao 的查找。

典型的密码更改流程包括以下步骤

  1. 在 Ansible 变量中定义新密码(或定义查找指向的位置)。

  2. 更改基础设施后端上的密码(例如 MariaDB、RabbitMQ 等)。

  3. 使用新密码更新服务配置文件。

  4. 重启服务以应用新的配置。

由于可以用于存储和定义 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