为多主 Tacker 添加默认 VIM 密钥支持¶
https://blueprints.launchpad.net/tacker/+spec/vim-key-for-multi-master
本规范建议支持默认密钥,作为在多主 Tacker 集群内共享 VIM 密钥的简单功能。
问题描述¶
当 Tacker 作为负载均衡的多主集群部署时,无法执行 VIM 操作,例如删除或更新由另一个 Tacker 节点创建的资源。例如,如果 tacker-0 创建了一个资源,尝试从 tacker-1 删除它将会失败。
这是因为 Tacker 为每次 VIM 注册生成一个新的 fernet_key,并且没有办法在节点之间共享或同步密钥。为了避免身份验证失败,必须手动将密钥复制到节点之间。
提议的变更¶
添加一个选项,以指定 Tacker 节点之间通用的默认 VIM 密钥。
为了实现这一点,将在 tacker.conf 的 [vim_keys] 下添加一个新的 default_secret_key 参数。
管理员将提前生成一个默认 Fernet 密钥文件(例如 default.key),将其放置在现有的 openstack 目录中(默认:/etc/tacker/vim/fernet_keys),在每个 Tacker 节点上,并使用 default_secret_key 选项指定文件名。
tacker.conf 示例
[vim_keys]
default_secret_key = default.key
此设置允许 Tacker conductor 在注册 VIM 时使用指定的默认密钥。 default_secret_key 的值被解释为位于 openstack 目录中的一个文件。如果未设置该参数,则当前行为(为每个 VIM 自动生成密钥)保持不变。
要设置每个 Tacker 节点上的默认密钥,管理员可以使用任何方法生成 Fernet 密钥。
例如
python3 -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())' > /etc/tacker/vim/fernet_keys/default.key
作为此改进的一部分,我们还计划提供一个官方工具(例如,一个新的 tacker-db-manage 选项或 tools/ 下的脚本),该工具执行此密钥生成。虽然管理员仍然可以手动生成密钥,如上所示,但建议使用提供的工具以确保一致性。
相同的密钥文件(“default.key”)放置在每个 Tacker 节点上。这种方法比配置持续的密钥同步(例如,使用 rsync 或 NFS)更简单,并且适用于密钥不需要频繁更改的环境,例如封闭或静态部署。
备选方案¶
设置一种额外的同步 VIM 密钥的方法(例如,使用 rsync 或 NFS)。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
此功能具有轻微的安全影响,因为共享的密钥必须安全地生成、存储和分发到 Tacker 节点之间。但是,这是可选的,并且通常在封闭网络中使用时是安全的。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
升级影响¶
无
实现¶
负责人¶
- 主要负责人
Hitomi Koba <hi-koba@kddi.com>
工作项¶
更新文档 (文档影响)。
更新 OpenStack 驱动程序 (tacker/nfvo/drivers/vim/openstack_driver.py) 以检查 default_secret_key 配置值并相应地分支逻辑。
根据需要修改其他相关部分。
依赖项¶
无
测试¶
添加单元测试。