×

您可以创建使用托管控制平面 (HCP) 集群的 AWS 上的 Red Hat OpenShift 服务 (ROSA),这些集群使用外部 OpenID Connect (OIDC) 身份提供程序来颁发用于身份验证的令牌,从而替换内置的 OpenShift OAuth 服务器。虽然内置的 OpenShift OAuth 服务器支持与各种身份提供程序集成,包括外部 OIDC 身份提供程序,但它仅限于 OAuth 服务器本身的功能。您可以直接将外部 OIDC 身份提供程序与使用 HCP 集群的 ROSA 集成,以便促进机器到机器的工作流,例如 CLI,并提供使用内置 OpenShift OAuth 服务器时不可用的其他功能。

由于无法将现有 ROSA 集群升级或转换为托管控制平面架构,因此必须创建一个新集群才能使用带有 HCP 功能的 ROSA。您也不能将创建为使用外部身份验证提供程序的集群转换为使用内部 OAuth2 服务器。您也必须创建一个新集群。

跨多个 AWS 账户共享 VPC目前不支持使用 HCP 的 ROSA。请勿将使用 HCP 的 ROSA 集群安装到从其他 AWS 账户共享的子网中。有关更多信息,请参阅"单个 VPC 中是否支持多个 ROSA 集群?"

使用 HCP 的 ROSA 集群仅支持安全令牌服务 (STS) 身份验证。

进一步阅读

使用 HCP 的 ROSA 预备条件

要创建使用 HCP 集群的 ROSA,必须完成以下步骤

创建使用外部身份验证提供程序的带有 HCP 集群的 ROSA

在 ROSA CLI 中使用--external-auth-providers-enabled标志创建使用外部身份验证服务的集群。

创建使用 HCP 集群的 ROSA 时,默认机器无类域间路由 (CIDR) 为10.0.0.0/16。如果这与 VPC 子网的 CIDR 范围不对应,请将--machine-cidr <address_block>添加到以下命令中。

步骤
  • 如果您使用OIDC_IDSUBNET_IDSOPERATOR_ROLES_PREFIX变量准备环境,则可以在创建集群时继续使用这些变量。例如,运行以下命令

    $ rosa create cluster --hosted-cp --subnet-ids=$SUBNET_IDS \
       --oidc-config-id=$OIDC_ID --cluster-name=<cluster_name> \
       --operator-roles-prefix=$OPERATOR_ROLES_PREFIX \
       --external-auth-providers-enabled
  • 如果您未设置环境变量,请运行以下命令

    $ rosa create cluster --cluster-name=<cluster_name> --sts --mode=auto \
        --hosted-cp --operator-roles-prefix <operator-role-prefix> \
        --oidc-config-id <ID-of-OIDC-configuration> \
        --external-auth-providers-enabled \
        --subnet-ids=<public-subnet-id>,<private-subnet-id>
验证
  • 通过运行以下命令验证集群详细信息中是否启用了外部身份验证

    $ rosa describe cluster --cluster=<cluster_name>
    示例输出
    Name:                       rosa-ext-test
    Display Name:               rosa-ext-test
    ID:                         <cluster_id>
    External ID:                <cluster_ext_id>
    Control Plane:              ROSA Service Hosted
    OpenShift Version:          4.17.0
    Channel Group:              stable
    DNS:                        <dns>
    AWS Account:                <AWS_id>
    AWS Billing Account:        <AWS_id>
    API URL:                    <ocm_api>
    Console URL:
    Region:                     us-east-1
    Availability:
     - Control Plane:           MultiAZ
     - Data Plane:              SingleAZ
    
    Nodes:
     - Compute (desired):       2
     - Compute (current):       0
    Network:
     - Type:                    OVNKubernetes
     - Service CIDR:            <service_cidr>
     - Machine CIDR:            <machine_cidr>
     - Pod CIDR:                <pod_cidr>
     - Host Prefix:             /23
     - Subnets:                 <subnet_ids>
    EC2 Metadata Http Tokens:   optional
    Role (STS) ARN:             arn:aws:iam::<AWS_id>:role/<account_roles_prefix>-HCP-ROSA-Installer-Role
    Support Role ARN:           arn:aws:iam::<AWS_id>:role/<account_roles_prefix>-HCP-ROSA-Support-Role
    Instance IAM Roles:
     - Worker:                  arn:aws:iam::<AWS_id>:role/<account_roles_prefix>-HCP-ROSA-Worker-Role
    Operator IAM Roles:
     - arn:aws:iam::<AWS_id>:role/<operator_roles_prefix>-openshift-cloud-network-config-controller-clo
     - arn:aws:iam::<AWS_id>:role/<operator_roles_prefix>-kube-system-capa-controller-manager
     - arn:aws:iam::<AWS_id>:role/<operator_roles_prefix>-kube-system-control-plane-operator
     - arn:aws:iam::<AWS_id>:role/<operator_roles_prefix>-kube-system-kms-provider
     - arn:aws:iam::<AWS_id>:role/<operator_roles_prefix>-kube-system-kube-controller-manager
     - arn:aws:iam::<AWS_id>:role/<operator_roles_prefix>-openshift-image-registry-installer-cloud-cred
     - arn:aws:iam::<AWS_id>:role/<operator_roles_prefix>-openshift-ingress-operator-cloud-credentials
     - arn:aws:iam::<AWS_id>:role/<operator_roles_prefix>-openshift-cluster-csi-drivers-ebs-cloud-crede
    Managed Policies:           Yes
    State:                      ready
    Private:                    No
    Created:                    Mar 29 2024 14:25:52 UTC
    User Workload Monitoring:   Enabled
    Details Page:               https://<url>
    OIDC Endpoint URL:          https://<endpoint> (Managed)
    Audit Log Forwarding:       Disabled
    External Authentication:    Enabled (1)
    
    1 已启用外部身份验证标志,您现在可以创建外部身份验证提供程序。

创建外部身份验证提供程序

创建启用外部身份验证提供程序选项的使用 HCP 集群的 ROSA 后,必须使用 ROSA CLI 创建提供程序。

与 ROSA CLI 中的rosa create|delete|list idp[s]命令类似,您无法编辑使用rosa create external-auth-provider创建的现有身份提供程序。您必须删除外部身份验证提供程序并创建一个新的提供程序。

下表显示了创建外部身份验证提供程序时可以使用的一些 CLI 标志

CLI 标志 描述

--cluster

您的集群的名称或 ID。

--name

用于引用外部身份验证提供程序的名称。

--console-client-secret

此字符串是用于将您的帐户与应用程序关联的客户端密钥。如果您不包含客户端密钥,则此命令将使用公共 OIDC OAuthClient。

--issuer-audiences

这是一个用逗号分隔的令牌访问者列表。

--issuer-url

令牌发行者的 URL。

--claim-mapping-username-claim

应用于为集群身份构建用户名的主张名称。

--claim-mapping-groups-claim

应用于为集群身份构建组名称的主张名称。

步骤
  • 要使用交互式命令界面,请运行以下命令

    $ rosa create external-auth-provider -c <cluster_name>
    示例输出
    I: Enabling interactive mode
    ? Name: (1)
    ? Issuer audiences: (2)
    ? The serving url of the token issuer: (3)
    ? CA file path (optional): (4)
    ? Claim mapping username: (5)
    ? Claim mapping groups: (6)
    ? Claim validation rule (optional): (7)
    ? Console client id (optional): (8)
    
    1 您的外部身份验证提供程序的名称。此名称应为小写字母、数字和短划线。
    2 此身份验证提供程序为此发放令牌的访问者 ID。
    3 提供令牌的发行者的 URL。
    4 可选:发出请求时要使用的证书文件。
    5 用于为集群身份构建用户名的主张名称,例如使用email
    6 将 ID 令牌转换为集群身份的方法,例如使用groups
    7 可选:有助于验证身份验证用户的令牌声明的规则。此字段应格式化为:<required_value>
    8 可选:您的应用程序注册用于控制台的应用程序或客户端 ID。
  • 您可以包含所需的 ID,以使用以下命令创建您的外部身份验证提供程序

    rosa create external-auth-provider --cluster=<cluster_id> \
        --name=<provider_name> --issuer-url=<issuing_url> \
        --issuer-audiences=<audience_id> \
        --claim-mapping-username-claim=email \
        --claim-mapping-groups-claim=groups \
        --console-client-id=<client_id_for_app_registration> \
        --console-client-secret=<client_secret>
    示例输出
    I: Successfully created an external authentication provider for cluster '<cluster_id>'
验证
  • 要验证您的外部身份验证提供程序,请运行以下选项之一

    • 使用以下命令列出指定集群上的外部身份验证配置

      $ rosa list external-auth-provider -c <cluster_name>
      示例输出

      以下示例显示已配置的 Microsoft Entra ID 外部身份验证提供程序

      NAME        ISSUER URL
      m-entra-id  https://login.microsoftonline.com/<group_id>/v2.0
    • 使用以下命令显示指定集群上的外部身份验证配置

      $ rosa describe external-auth-provider \
          -c <cluster_name> --name <name_of_external_authentication>
      示例输出
      ID:                          ms-entra-id
      Cluster ID:                  <cluster_id>
      Issuer audiences:
                                   - <audience_id>
      Issuer Url:                  https://login.microsoftonline.com/<group_id>/v2.0
      Claim mappings group:        groups
      Claim mappings username:     email
其他资源

为具有 HCP 集群的 ROSA 创建应急凭据

作为具有 HCP 集群的 ROSA 所有者,您可以使用应急凭据创建临时管理员客户端凭据,以访问配置了自定义 OpenID Connect (OIDC) 令牌发行者的集群。创建应急凭据会生成一个新的 cluster-admin kubeconfig 文件。kubeconfig 文件包含有关集群的信息,CLI 使用这些信息将客户端连接到正确的集群和 API 服务器。您可以使用新生成的kubeconfig 文件来允许访问具有 HCP 集群的 ROSA。

先决条件
  • 您已创建启用了外部身份验证的具有 HCP 集群的 ROSA。有关更多信息,请参阅创建使用外部身份验证提供程序的具有 HCP 集群的 ROSA

  • 您已创建外部身份验证提供程序。有关更多信息,请参阅创建外部身份验证提供程序

  • 您拥有具有cluster admin权限的帐户。

步骤
  1. 使用以下命令之一创建应急凭据

    • 要使用交互式命令界面以交互方式指定自定义设置来创建应急凭据,请运行以下命令

      $ rosa create break-glass-credential -c <cluster_name> -i (1)
      1 将<cluster_name>替换为您的集群名称。

      此命令启动交互式 CLI 进程

      示例输出
      I: Enabling interactive mode
      ? Username (optional): (1)
      ? Expiration duration (optional): (2)
      I: Successfully created a break glass credential for cluster 'ac-hcp-test'.
      1 如果留空,则username中的值将具有随机生成的用户名值。
      2 应急凭据的最小有效期为 10 分钟,最大有效期为 24 小时。如果留空,则到期持续时间值默认为 24 小时。
    • 要为名为mycluster的集群创建具有指定值的应急凭据

      $ rosa create break-glass-credential -c mycluster --username test-username --expiration 1h
  2. 通过运行以下命令列出名为mycluster的集群可用的应急凭据 ID、状态和关联用户

    $ rosa list break-glass-credential -c mycluster
    示例输出
    ID                                USERNAME    STATUS
    2a7jli9n4phe6c02ul7ti91djtv2o51d  test-user   issued

    您还可以通过向命令添加-o json参数来查看 JSON 输出中的凭据。

  3. 要查看应急凭据的状态,请运行以下命令,并将<break_glass_credential_id>替换为应急凭据 ID

    $ rosa describe break-glass-credential <break_glass_credential_id> -c <cluster_name>
    示例输出
    ID:                                    2a7jli9n4phe6c02ul7ti91djtv2o51d
    Username:                              test-user
    Expire at:                             Dec 28 2026 10:23:05 EDT
    Status:                                issued

    以下是可能的Status字段值列表

    • issued 应急凭据已发出,可以使用了。

    • expired 应急凭据已过期,无法再使用了。

    • failed 应急凭据创建失败。在这种情况下,您会收到详细说明失败的服务日志。有关服务日志的更多信息,请参阅访问 AWS 集群上的 Red Hat OpenShift 服务的服务日志。有关联系 Red Hat 支持寻求帮助的步骤,请参阅获取支持

    • awaiting_revocation 应急凭据当前正在撤销,这意味着它无法使用。

    • revoked 应急凭据已被撤销,无法再使用了。

  4. 要检索kubeconfig,请运行以下命令

    • 创建一个kubeconfigs目录

      $ mkdir ~/kubeconfigs
    • 导出新生成的kubeconfig文件,将<cluster_name>替换为您的集群名称

      $ export CLUSTER_NAME=<cluster_name> && export KUBECONFIG=~/kubeconfigs/break-glass-${CLUSTER_NAME}.kubeconfig
    • 查看kubeconfig

      $ rosa describe break-glass-credential <break_glass_credential_id> -c mycluster --kubeconfig
      示例输出
      apiVersion: v1
      clusters:
      - cluster:
          server: <server_url>
        name: cluster
      contexts:
      - context:
          cluster: cluster
          namespace: default
          user: test-username
        name: admin
      current-context: admin
      kind: Config
      preferences: {}
      users:
      - name: test-user
        user:
          client-certificate-data: <client-certificate-data> (1)
          client-key-data: <client-key-data> (2)
      
      1 客户端证书包含由 Kubernetes 证书颁发机构 (CA) 签名的用户证书。
      2 客户端密钥包含签署客户端证书的密钥。
  5. 可选:要保存kubeconfig,请运行以下命令

    $ rosa describe break-glass-credential <break_glass_credential_id> -c mycluster --kubeconfig > $KUBECONFIG
其他资源

使用应急凭据访问具有 HCP 集群的 ROSA

使用应急凭据中的新kubeconfig获得对具有 HCP 集群的 ROSA 的临时管理员访问权限。

先决条件
  • 您可以访问启用了外部身份验证的具有 HCP 集群的 ROSA。有关更多信息,请参阅创建使用外部身份验证提供程序的具有 HCP 集群的 ROSA

  • 您已安装ockubectl CLI。

  • 您已配置新的kubeconfig。更多信息,请参见为具有 HCP 集群的 ROSA 创建应急凭据

步骤
  1. 访问集群详细信息

    $ rosa describe break-glass-credential <break_glass_credential_id> -c <cluster_name>  --kubeconfig > $KUBECONFIG
  2. 列出集群中的节点

    $ oc get nodes
    示例输出
    NAME                        STATUS   ROLES   AGE   VERSION
    ip-10-0-0-27.ec2.internal   Ready    worker  8m    v1.28.7+f1b5f6c
    ip-10-0-0-67.ec2.internal   Ready    worker  9m    v1.28.7+f1b5f6c
  3. 验证您拥有正确的凭据

    $ kubectl auth whoami
    示例输出
    ATTRIBUTE    VALUE
    Username     system:customer-break-glass:test-user
    Groups       [system:masters system:authenticated]
  4. 为在外部 OIDC 提供商中定义的组应用ClusterRoleBindingClusterRoleBinding 将在 Microsoft Entra ID 中创建的rosa-hcp-admins组映射到 ROSA 与 HCP 集群中的一个组。

    $ oc apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: rosa-hcp-admins
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - apiGroup: rbac.authorization.k8s.io
      kind: Group
      name: f715c264-ab90-45d5-8a29-2e91a609a895
    EOF
    示例输出
    clusterrolebinding.rbac.authorization.k8s.io/rosa-hcp-admins created

    应用ClusterRoleBinding后,具有 HCP 集群的 ROSA 即配置完成,并且rosa CLI 和Red Hat Hybrid Cloud Console 通过外部 OpenID Connect (OIDC) 提供商进行身份验证。您现在可以开始分配角色并在集群上部署应用程序。

其他资源

吊销具有 HCP 集群的 ROSA 的应急凭据

您可以随时使用revoke break-glass-credentials命令吊销您已预配的任何应急凭据的访问权限。

先决条件
  • 您已创建应急凭据。

  • 您是集群所有者。

步骤
  • 通过运行以下命令来吊销具有 HCP 集群的 ROSA 的应急凭据。

    运行此命令将吊销与集群相关的所有应急凭据的访问权限。

    $ rosa revoke break-glass-credentials -c <cluster_name> (1)
    1 将<cluster_name>替换为您的集群名称。
    示例输出
    ? Are you sure you want to revoke all the break glass credentials on cluster 'my-cluster'?: Yes
    I: Successfully requested revocation for all break glass credentials from cluster 'my-cluster'
验证
  • 吊销过程可能需要几分钟时间。您可以通过运行以下命令之一来验证集群的应急凭据是否已被吊销

    • 列出所有应急凭据并检查每个凭据的状态

      $ rosa list break-glass-credential -c <cluster_name>
      示例输出
      ID                                USERNAME    STATUS
      2330dbs0n8m3chkkr25gkkcd8pnj3lk2  test-user   awaiting_revocation
    • 您也可以通过检查单个凭据来验证状态

      $ rosa describe break-glass-credential <break_glass_credential_id> -c <cluster_name>
      示例输出
      ID:                                    2330dbs0n8m3chkkr25gkkcd8pnj3lk2
      Username:                              test-user
      Expire at:                             Dec 28 2026 10:23:05 EDT
      Status:                                issued
      Revoked at:                            Dec 27 2026 15:30:33 EDT

删除外部身份验证提供程序

使用 ROSA CLI 删除外部身份验证提供程序。

步骤
  1. 通过运行以下命令来显示集群上的外部身份验证提供程序

    $ rosa list external-auth-provider -c <cluster_name>
    示例输出
    NAME        ISSUER URL
    entra-test  https://login.microsoftonline.com/<group_id>/v2.0
  2. 通过运行以下命令来删除外部身份验证提供程序

    $ rosa delete external-auth-provider <name_of_provider> -c <cluster_name>
    示例输出
    ? Are you sure you want to delete external authentication provider entra-test on cluster rosa-ext-test? Yes
    I: Successfully deleted external authentication provider 'entra-test' from cluster 'rosa-ext-test'
验证
  1. 通过运行以下命令来查询集群上的任何外部身份验证提供程序

    $ rosa list external-auth-provider -c <cluster_name>
    示例输出
    E: there are no external authentication providers for this cluster

其他资源