×

使用自定义 AWS 密钥管理服务 (KMS) 密钥创建使用托管控制平面 (HCP) 集群的 AWS 上的 Red Hat OpenShift 服务 (ROSA)。

使用 HCP 预配置的 ROSA

要创建使用 HCP 集群的 ROSA,您必须具备以下内容:

  • 已配置的虚拟私有云 (VPC)

  • 帐户范围的角色

  • OIDC 配置

  • Operator 角色

为您的使用 HCP 集群的 ROSA 创建虚拟私有云

您必须拥有虚拟私有云 (VPC) 才能创建使用 HCP 集群的 ROSA。您可以使用以下方法创建 VPC:

  • 使用 Terraform 模板创建 VPC

  • 在 AWS 控制台中手动创建 VPC 资源

Terraform 说明用于测试和演示目的。您自己的安装需要对 VPC 进行一些修改才能满足您自己的使用需求。您还应确保在使用此 Terraform 脚本时,它位于您打算安装集群的同一区域中。在这些示例中,使用us-east-2

目前不支持在多个 AWS 帐户之间共享 VPC用于使用 HCP 的 ROSA。请勿将使用 HCP 的 ROSA 集群安装到从另一个 AWS 帐户共享的子网中。有关更多信息,请参阅"单个 VPC 中是否支持多个 ROSA 集群?"

使用 Terraform 创建虚拟私有云

Terraform 是一种允许您使用已建立的模板创建各种资源的工具。以下过程使用默认选项,这是创建使用 HCP 集群的 ROSA 所必需的。有关使用 Terraform 的更多信息,请参阅其他资源。

先决条件
  • 您已在您的机器上安装了 1.4.0 或更高版本的 Terraform。

  • 您已在您的机器上安装了 Git。

步骤
  1. 打开 shell 提示符并通过运行以下命令克隆 Terraform VPC 存储库:

    $ git clone https://github.com/openshift-cs/terraform-vpc-example
  2. 通过运行以下命令导航到已创建的目录:

    $ cd terraform-vpc-example
  3. 通过运行以下命令初始化 Terraform 文件:

    $ terraform init

    此过程完成后,会显示一条确认初始化的消息。

  4. 要根据现有的 Terraform 模板构建您的 VPC Terraform 计划,请运行plan命令。您必须包含您的 AWS 区域。您可以选择指定集群名称。terraform plan完成后,hypershift-tf目录中会添加一个rosa.tfplan文件。有关更详细的选项,请参阅Terraform VPC 存储库的自述文件

    $ terraform plan -out rosa.tfplan -var region=<region>
  5. 通过运行以下命令应用此计划文件来构建您的 VPC:

    $ terraform apply rosa.tfplan
    1. 可选:您可以将 Terraform 预配的私有、公共和机器池子网 ID 的值捕获为环境变量,以便在创建使用 HCP 集群的 ROSA 时使用,方法是运行以下命令:

      $ export SUBNET_IDS=$(terraform output -raw cluster-subnets-string)
    2. 使用以下命令验证变量是否已正确设置:

      $ echo $SUBNET_IDS
      示例输出
      $ subnet-0a6a57e0f784171aa,subnet-078e84e5b10ecf5b0
其他资源
  • 请参阅Terraform VPC存储库,了解在自定义 VPC 以满足您的需求时可用的所有选项的详细列表。

手动创建虚拟私有云

如果您选择手动创建虚拟私有云 (VPC) 而不是使用 Terraform,请访问AWS 控制台中的 VPC 页面。您的 VPC 必须满足下表中显示的要求。

表 1. VPC 的要求
要求 详细信息

VPC 名称

创建集群时,您需要具有特定的 VPC 名称和 ID。

CIDR 范围

您的 VPC CIDR 范围应与您的机器 CIDR 匹配。

可用区

单区域需要一个可用区,多区域需要三个可用区。

公共子网

对于公共集群,您必须拥有一个具有互联网网关的公共子网。

私有子网

您必须在每个可用区 (AZ) 中都拥有一个私有子网,用于在 ROSA HCP 集群中安装机器池。可以将 NAT 网关与该子网关联,以便为实例允许出站互联网访问。私有集群不需要公共子网。

DNS 主机名和解析

您必须确保已启用 DNS 主机名和解析。

创建帐户范围的 STS 角色和策略

在使用 AWS 上的 Red Hat OpenShift 服务 (ROSA) 命令行界面 (rosa) 创建使用托管控制平面 (HCP) 集群的 AWS 上的 Red Hat OpenShift 服务 (ROSA) 之前,请创建所需的帐户范围角色和策略,包括 Operator 策略。

使用 HCP 集群的 ROSA 需要附加了 AWS 托管策略的帐户和 Operator 角色。不支持客户管理的策略。有关使用 HCP 集群的 ROSA 的 AWS 托管策略的更多信息,请参阅ROSA 帐户角色的 AWS 托管策略

先决条件
  • 您已完成使用 HCP 的 ROSA 的 AWS 预配置。

  • 您拥有可用的 AWS 服务配额。

  • 您已在 AWS 控制台中启用 ROSA 服务。

  • 您已在安装主机上安装并配置了最新的 ROSA 命令行界面 (rosa)。

  • 您已使用 ROSA 命令行界面登录到您的 Red Hat 帐户。

步骤
  1. 如果它们不存在于您的 AWS 帐户中,请通过运行以下命令创建所需的帐户范围 STS 角色并附加策略:

    $ rosa create account-roles --hosted-cp
  2. 可选:通过运行以下命令将您的前缀设置为环境变量:

    $ export ACCOUNT_ROLES_PREFIX=<account_role_prefix>
    • 通过运行以下命令查看变量的值:

      $ echo $ACCOUNT_ROLES_PREFIX
      示例输出
      ManagedOpenShift

有关 ROSA 的 AWS 托管 IAM 策略的更多信息,请参阅ROSA 的 AWS 托管 IAM 策略

创建 OpenID Connect 配置

使用 AWS 上的 Red Hat OpenShift 服务集群时,您可以在创建集群之前创建 OpenID Connect (OIDC) 配置。此配置已注册以与 OpenShift 集群管理器一起使用。

先决条件
  • 您已在安装主机上安装并配置了最新的 AWS 上的 Red Hat OpenShift 服务 (ROSA) 命令行界面 rosa

步骤
  1. 要与 AWS 资源一起创建您的 OIDC 配置,请运行以下命令:

    $ rosa create oidc-config --mode=auto --yes

    此命令将返回以下信息。

    示例输出
    ? Would you like to create a Managed (Red Hat hosted) OIDC Configuration Yes
    I: Setting up managed OIDC configuration
    I: To create Operator Roles for this OIDC Configuration, run the following command and remember to replace <user-defined> with a prefix of your choice:
    	rosa create operator-roles --prefix <user-defined> --oidc-config-id 13cdr6b
    If you are going to create a Hosted Control Plane cluster please include '--hosted-cp'
    I: Creating OIDC provider using 'arn:aws:iam::4540112244:user/userName'
    ? Create the OIDC provider? Yes
    I: Created OIDC provider with ARN 'arn:aws:iam::4540112244:oidc-provider/dvbwgdztaeq9o.cloudfront.net/13cdr6b'

    创建集群时,您必须提供 OIDC 配置 ID。CLI 输出为--mode auto提供此值,否则您必须根据awsCLI 输出确定这些值,以用于--mode manual

  2. 可选:您可以将 OIDC 配置 ID 保存为变量,以便稍后使用。运行以下命令保存变量:

    $ export OIDC_ID=<oidc_config_id>(1)
    1 在上例输出中,OIDC 配置 ID 为 13cdr6b。
    • 通过运行以下命令查看变量的值:

      $ echo $OIDC_ID
      示例输出
      13cdr6b
验证
  • 您可以列出与您的用户组织关联的集群可用的所有 OIDC 配置。运行以下命令:

    $ rosa list oidc-config
    示例输出
    ID                                MANAGED  ISSUER URL                                                             SECRET ARN
    2330dbs0n8m3chkkr25gkkcd8pnj3lk2  true     https://dvbwgdztaeq9o.cloudfront.net/2330dbs0n8m3chkkr25gkkcd8pnj3lk2
    233hvnrjoqu14jltk6lhbhf2tj11f8un  false    https://oidc-r7u1.s3.us-east-1.amazonaws.com                           aws:secretsmanager:us-east-1:242819244:secret:rosa-private-key-oidc-r7u1-tM3MDN
    

创建 Operator 角色和策略

使用使用 HCP 集群的 ROSA 时,您必须创建 AWS 上的 Red Hat OpenShift 服务 (ROSA) 使用托管控制平面 (HCP) 部署所需的 Operator IAM 角色。集群 Operator 使用 Operator 角色来获取执行集群操作(例如管理后端存储、云提供商凭据和对集群的外部访问)所需的临时权限。

先决条件
  • 您已完成使用 HCP 的 ROSA 的 AWS 预配置。

  • 您已在安装主机上安装并配置了最新的 AWS 上的 Red Hat OpenShift 服务 ROSA 命令行界面 (rosa)。

  • 您已创建帐户范围的 AWS 角色。

步骤
  1. 使用以下命令将您的前缀名称设置为环境变量

    $ export OPERATOR_ROLES_PREFIX=<prefix_name>
  2. 要创建您的 Operator 角色,请运行以下命令

    $ rosa create operator-roles --hosted-cp --prefix=$OPERATOR_ROLES_PREFIX --oidc-config-id=$OIDC_ID --installer-role-arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/${ACCOUNT_ROLES_PREFIX}-HCP-ROSA-Installer-Role

    以下细分提供了 Operator 角色创建的选项。

    $ rosa create operator-roles --hosted-cp
    	--prefix=$OPERATOR_ROLES_PREFIX (1)
    	--oidc-config-id=$OIDC_ID (2)
    	--installer-role-arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/${ACCOUNT_ROLES_PREFIX}-HCP-ROSA-Installer-Role (3)
    1 创建这些 Operator 角色时,必须提供前缀。否则会产生错误。有关 Operator 前缀的信息,请参阅本节的“其他资源”。
    2 此值为您为 ROSA with HCP 集群创建的 OIDC 配置 ID。
    3 此值为创建 ROSA 帐户角色时创建的安装程序角色 ARN。

    必须包含--hosted-cp 参数才能为 ROSA with HCP 集群创建正确的角色。此命令返回以下信息。

    示例输出
    ? Role creation mode: auto
    ? Operator roles prefix: <pre-filled_prefix> (1)
    ? OIDC Configuration ID: 23soa2bgvpek9kmes9s7os0a39i13qm4 | https://dvbwgdztaeq9o.cloudfront.net/23soa2bgvpek9kmes9s7os0a39i13qm4 (2)
    ? Create hosted control plane operator roles: Yes
    W: More than one Installer role found
    ? Installer role ARN: arn:aws:iam::4540112244:role/<prefix>-HCP-ROSA-Installer-Role
    ? Permissions boundary ARN (optional):
    I: Reusable OIDC Configuration detected. Validating trusted relationships to operator roles:
    I: Creating roles using 'arn:aws:iam::4540112244:user/<userName>'
    I: Created role '<prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials'
    I: Created role '<prefix>-openshift-cloud-network-config-controller-cloud-credenti' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-cloud-network-config-controller-cloud-credenti'
    I: Created role '<prefix>-kube-system-kube-controller-manager' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-kube-controller-manager'
    I: Created role '<prefix>-kube-system-capa-controller-manager' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-capa-controller-manager'
    I: Created role '<prefix>-kube-system-control-plane-operator' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-control-plane-operator'
    I: Created role '<prefix>-kube-system-kms-provider' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-kms-provider'
    I: Created role '<prefix>-openshift-image-registry-installer-cloud-credentials' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-image-registry-installer-cloud-credentials'
    I: Created role '<prefix>-openshift-ingress-operator-cloud-credentials' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-ingress-operator-cloud-credentials'
    I: To create a cluster with these roles, run the following command:
    	rosa create cluster --sts --oidc-config-id 23soa2bgvpek9kmes9s7os0a39i13qm4 --operator-roles-prefix <prefix> --hosted-cp
    1 此字段预填充了您在初始创建命令中设置的前缀。
    2 此字段要求您选择为 ROSA with HCP 集群创建的 OIDC 配置。

    Operator 角色现已创建,并可用于创建您的 ROSA with HCP 集群。

验证
  • 您可以列出与您的 ROSA 帐户关联的 Operator 角色。运行以下命令

    $ rosa list operator-roles
    示例输出
    I: Fetching operator roles
    ROLE PREFIX  AMOUNT IN BUNDLE
    <prefix>      8
    ? Would you like to detail a specific prefix Yes (1)
    ? Operator Role Prefix: <prefix>
    ROLE NAME                                                         ROLE ARN                                                                                         VERSION  MANAGED
    <prefix>-kube-system-capa-controller-manager                       arn:aws:iam::4540112244:role/<prefix>-kube-system-capa-controller-manager                       4.13     No
    <prefix>-kube-system-control-plane-operator                        arn:aws:iam::4540112244:role/<prefix>-kube-system-control-plane-operator                        4.13     No
    <prefix>-kube-system-kms-provider                                  arn:aws:iam::4540112244:role/<prefix>-kube-system-kms-provider                                  4.13     No
    <prefix>-kube-system-kube-controller-manager                       arn:aws:iam::4540112244:role/<prefix>-kube-system-kube-controller-manager                       4.13     No
    <prefix>-openshift-cloud-network-config-controller-cloud-credenti  arn:aws:iam::4540112244:role/<prefix>-openshift-cloud-network-config-controller-cloud-credenti  4.13     No
    <prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials       arn:aws:iam::4540112244:role/<prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials       4.13     No
    <prefix>-openshift-image-registry-installer-cloud-credentials      arn:aws:iam::4540112244:role/<prefix>-openshift-image-registry-installer-cloud-credentials      4.13     No
    <prefix>-openshift-ingress-operator-cloud-credentials              arn:aws:iam::4540112244:role/<prefix>-openshift-ingress-operator-cloud-credentials              4.13     No
    1 命令运行后,它将显示与您的 AWS 帐户关联的所有前缀,并说明有多少角色与该前缀关联。如果您需要查看所有这些角色及其详细信息,请在详细信息提示符上输入“是”以列出这些角色的详细信息。

使用自定义 AWS KMS 密钥创建 ROSA 集群

您可以使用客户提供的 KMS 密钥创建 AWS 上的 Red Hat OpenShift 服务 (ROSA) 集群,该密钥用于加密节点根卷、etcd 数据库或两者。可以为每个选项提供不同的 KMS 密钥 ARN。

ROSA with HCP 不会自动配置default存储类以使用客户提供的 KMS 密钥加密持久卷。这可以在安装后在集群内进行配置。

步骤
  1. 运行以下命令创建自定义 AWS 客户托管 KMS 密钥

    $ KMS_ARN=$(aws kms create-key --region $AWS_REGION --description 'Custom ROSA Encryption Key' --tags TagKey=red-hat,TagValue=true --query KeyMetadata.Arn --output text)

    此命令将保存此自定义密钥的 Amazon 资源名称 (ARN) 输出,以备后续步骤使用。

    客户必须提供--tags TagKey=red-hat,TagValue=true参数,这是客户 KMS 密钥所需的。

  2. 运行以下命令验证 KMS 密钥是否已创建

    $ echo $KMS_ARN
  3. 将您的 AWS 帐户 ID 设置为环境变量。

    $ AWS_ACCOUNT_ID=<aws_account_id>
  4. 将您在上一步中创建的帐户范围安装程序角色和运算符角色的 ARN 添加到文件中的Statement.Principal.AWS部分。在以下示例中,添加了默认ManagedOpenShift-HCP-ROSA-Installer-Role角色的 ARN

    {
      "Version": "2012-10-17",
      "Id": "key-rosa-policy-1",
      "Statement": [
      {
                  "Sid": "Enable IAM User Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:root"
                  },
                  "Action": "kms:*",
                  "Resource": "*"
              },
            {
                  "Sid": "Installer Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:role/ManagedOpenShift-HCP-ROSA-Installer-Role"
                  },
                  "Action": [
                      "kms:CreateGrant",
                      "kms:DescribeKey",
                      "kms:GenerateDataKeyWithoutPlaintext"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "ROSA KubeControllerManager Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:role/<operator_role_prefix>-kube-system-kube-controller-manager"
    
                  },
                  "Action": "kms:DescribeKey",
                  "Resource": "*"
              },
              {
                  "Sid": "ROSA KMS Provider Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:role/<operator_role_prefix>-kube-system-kms-provider"
                  },
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:DescribeKey"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "ROSA NodeManager Permissions",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::${AWS_ACCOUNT_ID}:role/<operator_role_prefix>-kube-system-capa-controller-manager"
                  },
                  "Action": [
                      "kms:DescribeKey",
                      "kms:GenerateDataKeyWithoutPlaintext",
                      "kms:CreateGrant"
                  ],
                  "Resource": "*"
              }
          ]
      }
  5. 运行以下命令确认已创建的策略文件的详细信息

    $ cat rosa-key-policy.json
  6. 运行以下命令将新生成的密钥策略应用于自定义 KMS 密钥

    $ aws kms put-key-policy --key-id $KMS_ARN \
    --policy file://rosa-key-policy.json \
    --policy-name default
  7. 运行以下命令创建集群

    如果您的集群名称超过 15 个字符,则它将包含一个自动生成的域名前缀作为您在*.openshiftapps.com上预配的集群的子域名。

    要自定义子域名,请使用--domain-prefix标志。域名前缀不能超过 15 个字符,必须唯一,并且在集群创建后不能更改。

    $ rosa create cluster --cluster-name <cluster_name> \
    --subnet-ids <private_subnet_id>,<public_subnet_id> \
    --sts \
    --mode auto \
    --machine-cidr 10.0.0.0/16 \
    --compute-machine-type m5.xlarge \
    --hosted-cp \
    --region <aws_region> \
    --oidc-config-id $OIDC_ID \
    --kms-key-arn $KMS_ARN \ (1)
    --etcd-encryption-kms-arn $KMS_ARN \ (2)
    --operator-roles-prefix $OPERATOR_ROLES_PREFIX
    1 此 KMS 密钥 ARN 用于加密所有工作节点根卷。如果只需要 etcd 数据库加密,则不需要此密钥。
    2 此 KMS 密钥 ARN 用于加密 etcd 数据库。etcd 数据库默认始终使用 AES 密码块加密,但也可以改为使用 KMS 密钥加密。如果只需要节点根卷加密,则不需要此密钥。
验证

您可以使用OpenShift 集群管理器验证您的 KMS 密钥是否有效。

  1. 导航到OpenShift 集群管理器并选择**实例**。

  2. 选择您的实例。

  3. 单击**存储**选项卡。

  4. 复制**KMS 密钥 ID**。

  5. 搜索并选择**密钥管理服务**。

  6. 在**筛选器**字段中输入您复制的KMS 密钥 ID

后续步骤

其他资源