密码轮换¶
本指南描述了如何更改 Kolla-Ansible 使用的 passwords.yml 文件中的内部密钥。它不涵盖每个可能的 passwords.yml 变量,仅涵盖最常见的变量。
警告
在进行任何更改之前,请务必备份您的 passwords.yml 文件。否则,很容易犯下无法恢复的错误。
警告
本指南依赖于 Kolla 和 Kolla-Ansible 的最新更改。如果将本指南应用于较旧的部署,您可能会遇到错误。建议在继续操作之前,将您的容器和 kolla-ansible 更新到最新版本。
重新生成密钥¶
可以使用 kolla-genpwd 快速重新生成密码。
假设存在一个 /etc/kolla/passwords.yml 文件,请进行备份
cp /etc/kolla/passwords.yml ./passwords.yml.bak
编辑 passwords.yml 文件,以删除需要重新生成的任何密钥的密码字符串,例如,将 foo: "bar" 更改为 foo:。
重新生成已删除的密码
kolla-genpwd -p /etc/kolla/passwords.yml
应用重新生成的密钥¶
大多数密钥可以通过使用 kolla-ansible reconfigure 重新配置服务来应用。以下是可以通过这种方式应用密钥的列表。
*_keystone_password*_database_password(不包括nova_database_password)*_ssh_key(不包括kolla_ssh_key)keystone_admin_passworddesignate_rndc_keykeepalived_passwordlibvirt_sasl_passwordmetadata_secretopensearch_dashboards_passwordosprofiler_secretprometheus_alertmanager_passwordqdrouterd_passwordvalkey_master_password
可以更改更多密钥,但有些需要手动步骤。手动步骤因密钥而异。它们按应更改它们的时间顺序在下面列出。完成所有手动步骤后,重新配置服务(kolla-ansible reconfigure)。
为了简单起见,本指南假定正在使用 Docker。通过将所有相关命令中的 docker 实例替换为 podman,相同的命令也应适用于 Podman 部署。
Kolla SSH 密钥¶
目前,Kolla-Ansible 中没有机制可以轮换 kolla_ssh_key。但是,使用标准的 Ansible playbook 执行此任务相对简单,或者可以在较小的部署中手动执行。
Horizon 密钥¶
Horizon 密钥(horizon_secret_key)是唯一的,因为它明确支持轮换。实际上,它是一个 Django 密钥,用于加密签名,例如生成密码恢复链接。为了最大限度地减少对用户的影响,可以一次设置两个密钥。新的密钥将用于生成新的工件,而旧的密钥仍将接受现有工件。
记下旧密码,生成新密码,并记下它。
将其添加到 passwords.yml 文件中,以及旧密钥,格式如下(包括中间的引号)
horizon_secret_key: newsecret' 'oldsecret
重要的是要记住,在所有旧工件过期后(例如,大约一到两周后),删除旧密钥并再次重新配置服务。
Grafana 管理员密码¶
Grafana 管理员密码(grafana_admin_password)必须手动轮换。
生成新的 Grafana 管理员密码。
在
passwords.yml中替换旧密码。执行到任何 Grafana 容器
docker exec -it grafana bash
运行密码重置命令,然后输入新密码
grafana-cli admin reset-admin-password --password-from-stdin
数据库密码¶
数据库管理员密码(database_password)必须手动轮换。
生成新的数据库密码。
在
passwords.yml中替换旧密码,记下新旧密码。SSH 到运行 MariaDB 容器的主机。
执行到 MariaDB 容器
docker exec -it mariadb bash
登录到数据库。系统将提示您输入密码。使用
database_password的旧值mysql --batch -uroot -p
检查
root用户的当前状态SELECT Host,User,Password FROM mysql.user WHERE User='root';
更新
root用户的密码SET PASSWORD FOR 'root'@'%' = PASSWORD('newpassword');
检查用户列表中密码哈希是否已更改
SELECT Host,User,Password FROM mysql.user WHERE User='root';
如果有任何剩余的 root 用户使用旧密码,例如
root@localhost,也更改他们的密码。
Nova 数据库密码¶
nova 数据库管理员用户密码(nova_database_password)必须手动轮换。
警告
从此时开始,API 服务可能会中断。
生成新的 Nova 数据库密码。
在
passwords.yml中替换旧密码。执行到
nova_conductor容器docker exec -it nova_conductor bash
列出单元
nova-manage cell_v2 list_cells --verbose
找到
cell0的条目,复制数据库连接值,将字符串中的密码替换为新值,并使用以下命令更新它nova-manage cell_v2 update_cell --cell_uuid 00000000-0000-0000-0000-000000000000 --database_connection "CONNECTION WITH NEW PASSWORD HERE" --transport-url "none:///"
(如果
cell0的cell_uuid不是00000000-0000-0000-0000-000000000000,请相应地更改上述命令)
Heat 域管理员密码¶
keystone 中 heat 域管理员服务用户的密码(heat_domain_admin_password)必须手动轮换。
它可以由管理员像任何其他标准的 OpenStack 用户密码一样更改。生成新密码,替换 passwords.yml 中的旧密码,然后手动应用更改
openstack user set --password <password> heat_domain_admin --domain heat_user_domain
RabbitMQ 密钥¶
RabbitMQ 使用两个主要密钥。用于集群成员资格的 Erlang cookie(rabbitmq_cluster_cookie),以及 RabbitMQ 管理用户密码(rabbitmq_password)。目前没有记录的流程可以无缝轮换这些密钥。许多 OpenStack 服务使用 RabbitMQ 进行通信,并使用新凭据重新配置它们可能需要一些时间,从而导致相对较长的 API 中断。
建议先停止所有服务,然后停止并销毁 RabbitMQ 容器和卷。由于销毁了 RabbitMQ 容器,应使用 kolla-ansible deploy 重新启动服务,而不是 kolla-ansible reconfigure。详细步骤如下
生成新的
rabbitmq_cluster_cookie和rabbitmq_password。替换
passwords.yml中的旧值。停止 OpenStack 服务
kolla-ansible stop -i inventory
在每个运行 RabbitMQ 的节点上,销毁其容器和卷
docker stop rabbitmq docker rm rabbitmq docker volume rm rabbitmq
重新部署服务
kolla-ansible deploy -i inventory
重新部署后的更改¶
服务重新部署后,应刷新现有的 Memcached 数据。旧的 Memcached 密码将不再使用,因此使用它存储的任何数据都将无法访问。
以下说明必须从可以访问 Memcached 容器的网络的主机运行。如果您不确定,请从正在运行 Memcached 的主机运行它们。
安装 telnet 客户端
apt/dnf install telnet
检查 Memcached 使用的 IP 和端口的配置(在每个运行 Memcached 的主机上)
sudo grep command /etc/kolla/memcached/config.json
IP 和端口将分别在
-l和-p之后打印对于每个容器,启动 Telnet 会话,清除所有数据,然后退出
telnet <ip> <port> flush_all quit
已知超出范围的密钥¶
以下是已知超出本指南范围的密码列表。
docker_registry_password- kolla-ansible 无法管理 docker 注册表。