Ansible角色,用于管理TripleO的IPSEC隧道
项目描述
tripleo-ipsec
Ansible角色,用于为TripleO配置IPSEC隧道
此操作会设置软件包和防火墙设置。
在overcloud节点上设置IPSEC隧道的配置。
解析给定的配置文件并启动IPSEC隧道。
在最后一步,当启用pacemaker时,它为每个虚拟IP启用资源代理,根据VIP位置建立/拆除IPSEC隧道。
注意,截至最新代码,现在它依赖于TripleO的动态清单。这意味着它期望清单告诉角色哪些网络正在设置以及主机具有哪些IP。如果相关的变量不是来自清单,该角色将尝试使用旧版设置,该设置会自动发现这些。但是,如果您使用自定义网络,此设置不可靠。
角色变量
ipsec_psk:用于IPSEC隧道的预共享密钥。请注意,这是敏感信息,建议将其安全地存储在运行playbook的主机上,例如使用Ansible Vault。可以使用以下命令生成此变量:openssl rand -base64 48
ipsec_algorithm:定义用于隧道phase2alg配置选项的加密算法。默认为:aes_gcm128-null。可能的值应在libreswan的文档中检查。
ipsec_configure_vips:确定是否应配置VIP隧道。默认为:true。
ipsec_skip_firewall_rules:确定是否跳过防火墙规则。默认为:false。
ipsec_uninstall_tunnels:确定是否移除之前设置的IPSEC隧道。默认为:false。
ipsec_upgrade_tunnels:确定是否升级之前设置的IPSEC隧道。这意味着它会移除之前运行中创建的所有隧道并替换它们。默认为:false。
ipsec_setup_resource_agents:确定是否创建pacemaker资源代理。默认为:true。
ipsec_skip_networks:确定哪些网络应被跳过。默认为:[]。
ipsec_force_install_legacy:强制使用旧版安装。默认为:false。
overcloud_controller_identifier:这确定了集群中哪些节点是控制器以及哪些不是,并且应该包含在控制器的主机名中。默认为:'controller'。强烈建议有明确识别这些节点的方法。请注意,这仅在旧版设置中使用。
示例Playbook
样本
- hosts: servers roles: - tripleo-ipsec
在TripleO中启用ipsec隧道
要在overcloud节点上运行的主要Playbook是
tests/deploy-ipsec-tripleo.yml
这将部署IPSEC到overcloud节点上的内部API网络。
我们将使用PSK和一个AES128加密。
将PSK添加到ansible var文件中
cat <<EOF > ipsec-psk.yml ipsec_psk: $(openssl rand -base64 48) EOF
使用ansible-vault加密文件(请注意,它将提示输入密码)
ansible-vault encrypt ipsec-psk.yml
完成此操作后,现在可以运行playbook
ansible-playbook -i /usr/bin/tripleo-ansible-inventory --ask-vault-pass \ -e @ipsec-psk.yml tests/deploy-ipsec-tripleo.yml
生成inventory
脚本/usr/bin/tripleo-ansible-inventory生成一个具有overcloud中节点的动态inventory。然而,它附带了一些不便
在Pike之前的部署中,运行可能有点慢。为了解决这个问题,在Ocata和Pike中,可以从该命令的输出中生成一个静态inventory
/usr/bin/tripleo-ansible-inventory --static-inventory nodes.txt
这将创建一个名为nodes.txt的静态inventory,我们可以现在使用它并节省时间。
Newton遗憾的是,该命令仅考虑了计算器和控制器。因此,对于此部署,我们需要生成自己的inventory。我们可以使用以下命令完成此操作
cat <<EOF > nodes.txt [undercloud] localhost [undercloud:vars] ansible_connection = local [overcloud:vars] ansible_ssh_user = heat-admin [overcloud] $( openstack server list -c Networks -f value | sed 's/ctlplane=//') EOF
这假设您从undercloud本身部署此playbook。因此,包含localhost的undercloud组。
跳过网络
ipsec_skip_networks变量允许用户跳过某些网络的隧道设置。这是通过使用网络名称实现的,该名称可能因您的设置类型而异。
使用动态inventory(Queens及其以后版本)
当使用动态inventory时,网络名称将基于您在tripleo-heat-templates中设置的名称。如tripleo-heat-templates中所述,此文件将确定您在整体TripleO部署中设置的网络,甚至指定哪些网络具有VIP。
要用于ipsec_skip_networks变量的网络名称将位于每个网络定义的name_lower部分。
例如,如果您想跳过存储管理网络,您会看到如下条目
- name: StorageMgmt name_lower: storage_mgmt vip: true vlan: 40 ip_subnet: '172.16.3.0/24' allocation_pools: [{'start': '172.16.3.4', 'end': '172.16.3.250'}] ipv6_subnet: 'fd00:fd00:fd00:4000::/64' ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}]
因此,在这种情况下,您将放在您的ansible变量文件中的变量将具有以下条目
ipsec_skip_networks: - storage_mgmt
您可以通过向该列表添加更多条目来添加更多网络。
旧版设置
如果您使用的是旧版设置(这在Newton中有效),请注意网络名称是硬编码的;因此,您有以下选项可用
internalapi
storage
storagemgmt
ctlplane
您还可以通过向列表中添加redis一词来显式跳过创建Redis VIP。
如果您想要跳过存储和存储管理网络,您在ansible变量文件中设置的变量将包含以下条目
ipsec_skip_networks: - storage - storagemgmt