14.2.3.2. 启用 Tang 磁盘加密

使用以下步骤在 OpenShift Container Platform 安装过程中启用 Tang 模式磁盘加密。

先决条件

  • 您已在安装节点上下载了 OpenShift Container Platform 安装程序。
  • 您可以使用 Red Hat Enterprise Linux (RHEL) 8 机器来生成 Tang Exchange 密钥的指纹。

流程

  1. 设置 Tang 服务器或访问现有服务器。具体步骤请查看网络绑定磁盘加密
  2. 添加内核参数来配置集群在安装 Red Hat Enterprise Linux CoreOS(RHCOS)时的网络。例如:在内核命令行中添加参数来配置 DHCP 网络,指定 ip=dhcp,或者设置静态网络。对于 DHCP 和静态网络,您必须提供 rd.neednet=1 内核参数。

    重要

    跳过这一步会导致第二次引导失败。

  1. 如果尚未安装,在 RHEL 8 机器上安装 clevis 软件包:

    $ sudo yum install clevis
  1. 在 RHEL 8 计算机上,运行以下命令来生成交换密钥的指纹。使用 Tang 服务器的 URL 替换 http://tang.example.com:7500

    $ clevis-encrypt-tang '{"url":"http://tang.example.com:7500"}' < /dev/null > /dev/null 1
    1
    在本例中,tangd.socket 侦听 Tang 服务器上的端口 7500
    注意

    此步骤中仅使用 clevis-encrypt-tang 命令,以生成交换密钥的指纹。此时不会将数据传递给命令以进行加密,因此 /dev/null 作为输入而不是纯文本提供。加密的输出也会发送到 /dev/null,因为此过程不需要它。

    输出示例

    The advertisement contains the following signing keys:
    
    PLjNyRdGw03zlRoGjQYMahSZGu9 1

    1
    Exchange 键的指纹。

    当出现 Do you wish to trust these keys? [ynYN] 提示时,输入 Y

    注意

    RHEL 8 提供 Clevis 版本 15,它使用 SHA-1 哈希算法来生成指纹。些其他发行版提供 Clevis 版本 17 或更高版本,它们使用 SHA-256 哈希算法进行指纹。您必须使用 SHA-1 创建 thumbprint 的 Clevis 版本来防止在 OpenShift Container Platform 集群节点上安装 Red Hat Enterprise Linux CoreOS (RHCOS) 时出现 Clevis 绑定问题。

  2. 创建 Base64 编码文件,使用新生成的 Tang server 替换 url,thumbprint 替换thp

    $ (cat <<EOM
    {
     "url": "http://tang.example.com:7500", 1
     "thp": "PLjNyRdGw03zlRoGjQYMahSZGu9" 2
    }
    EOM
    ) | base64 -w0
    1
    指定 Tang 服务器的 URL。在本例中,tangd.socket 侦听 Tang 服务器上的端口 7500
    2
    指定上一步中生成的 Exchange key thumbprint。

    输出示例

    ewogInVybCI6ICJodHRwOi8vdGFuZy5leGFtcGxlLmNvbTo3NTAwIiwgCiAidGhwIjogIlBMak55UmRHdzAzemxSb0dqUVlNYWhTWkd1OSIgCn0K

  3. 如果您还没有生成 Kubernetes 清单,请切换到安装节点上包含安装程序的目录,并创建它们:

    输出示例

    $ ./openshift-install create manifests --dir <installation_directory> 1

    1
    <installation_directory> 替换为您要存储安装文件的目录的路径。
  4. 使用 Tang 加密模式,为 control plane 或计算节点创建机器配置文件来加密引导磁盘。

    • 要在 control plane 节点上配置加密,请将以下机器配置示例保存到 <installation_directory>/openshift 目录中的一个文件中。例如,将文件命名为 99-openshift-master-tang-encryption.yaml

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        name: master-tang
        labels:
          machineconfiguration.openshift.io/role: master
      spec:
        config:
          ignition:
            version: 3.1.0
          storage:
            files:
            - contents:
                source: data:text/plain;base64,e30K
                source: data:text/plain;base64,ewogInVybCI6ICJodHRwOi8vdGFuZy5leGFtcGxlLmNvbTo3NTAwIiwgCiAidGhwIjogIlBMak55UmRHdzAzemxSb0dqUVlNYWhTWkd1OSIgCn0K 1
              mode: 420
              overwrite: true
              path: /etc/clevis.json
        kernelArguments:
          - rd.neednet=1 2
      1
      指定在上一步中生成的以 Base64 编码的字符串。
      2
      添加 rd.neednet=1 内核参数,以在 initramfs 中启动网络。此参数是必需的。
    • 要在计算节点上配置加密,请将以下机器配置示例保存到 <installation_directory>/openshift 目录中的文件中。例如,将文件命名为 99-openshift-worker-tang-encryption.yaml

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        name: worker-tang
        labels:
          machineconfiguration.openshift.io/role: worker
      spec:
        config:
          ignition:
            version: 3.1.0
          storage:
            files:
            - contents:
                source: data:text/plain;base64,e30K
                source: data:text/plain;base64,ewogInVybCI6ICJodHRwOi8vdGFuZy5leGFtcGxlLmNvbTo3NTAwIiwgCiAidGhwIjogIlBMak55UmRHdzAzemxSb0dqUVlNYWhTWkd1OSIgCn0K 1
              mode: 420
              overwrite: true
              path: /etc/clevis.json
        kernelArguments:
          - rd.neednet=1 2
      1
      指定在上一步中生成的以 Base64 编码的字符串。
      2
      添加 rd.neednet=1 内核参数,以在 initramfs 中启动网络。此参数是必需的。
  5. 创建 YAML 文件的备份副本。创建 Ignition 配置文件时会消耗原始 YAML 文件。
  6. 继续进行 OpenShift Container Platform 安装的其余部分。