11.18. 使用 nbde_client RHEL 系统角色建立多个 Clevis 客户端

使用 nbde_client RHEL 系统角色,您可以在多个系统上准备并应用包含 Clevis 客户端设置的 Ansible playbook。

注意

nbde_client 系统角色只支持 Tang 绑定。这意味着您目前无法将其用于 TPM2 绑定。

先决条件

  • 您已准备好控制节点和受管节点
  • 以可在受管主机上运行 playbook 的用户登录到控制节点。
  • 用于连接到受管节点的帐户具有 sudo 权限。
  • 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。

步骤

  1. 准备包含用于 Clevis 客户端设置的 playbook。您可以从头开始,或使用 /usr/share/ansible/roles/rhel-system-roles.nbde_client/examples/ 目录中的一个 playbook 示例。

    # cp /usr/share/ansible/roles/rhel-system-roles.nbde_client/examples/high_availability.yml ~/my-clevis-playbook.yml
  2. 在您选择的文本编辑器中编辑 playbook,例如:

    # vi ~/my-clevis-playbook.yml
  3. 添加所需参数。以下 playbook 示例配置 Clevis 客户端,以便在两个 Tang 服务器中至少有一个可用时自动解锁两个 LUKS 加密卷:

    ---
    - hosts: all
    
      vars:
        nbde_client_bindings:
          - device: /dev/rhel/root
            encryption_key_src: /etc/luks/keyfile
            servers:
              - http://server1.example.com
              - http://server2.example.com
          - device: /dev/rhel/swap
            encryption_key_src: /etc/luks/keyfile
            servers:
              - http://server1.example.com
              - http://server2.example.com
    
      roles:
        - rhel-system-roles.nbde_client
  4. 验证 playbook 语法:

    # ansible-playbook ~/my-clevis-playbook.yml --syntax-check

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  5. 应用完成的 playbook:

    # ansible-playbook ~/my-clevis-playbook.yml
重要

当前 nbde_client 系统角色只支持动态主机配置协议(DHCP)的场景。要将 NBDE 用于具有静态 IP 配置的客户端,请执行以下一个操作:

  • 将网络配置传给 dracut 命令,例如:

    # dracut -fv --regenerate-all --kernel-cmdline "ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none"
  • 或者,在 /etc/dracut.conf.d/ 目录中创建一个具有静态网络信息的 .conf 文件,例如:

    # cat /etc/dracut.conf.d/static_ip.conf
    kernel_cmdline="ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none"

    然后,重新生成初始 RAM 磁盘镜像。

  • 您还可以在 playbook 中添加以下代码片段:

      tasks:
      - name: Configure a client with a static IP address during early boot
        ansible.builtin.command:
          cmd: grubby --update-kernel=ALL --args='GRUB_CMDLINE_LINUX_DEFAULT="ip={{ <ansible_default_ipv4.address> }}::{{ <ansible_default_ipv4.gateway> }}:{{ <ansible_default_ipv4.netmask> }}::{{ <ansible_default_ipv4.alias> }}:none"'

    在前面的代码片段中,将 <ansible_default_ipv4.*> 字符串替换为您网络的 IP 地址,例如:ip={{ 192.0.2.10 }}::{{ 192.0.2.1 }}:{{ 255.255.255.0 }}::{{ ens3 }}:none

其他资源