连接到 EKS 关联集群

本文档介绍连接到 EKS 关联集群的三种方法:

这三种连接到已注册集群的方法由名为“连接网关”的 Google 服务启用。如需详细了解 Connect 网关,请参阅使用 Connect 网关连接到已注册的集群

准备工作

在执行任何方法之前,请确保您已关联集群。如需了解详情,请参阅关联 EKS 集群

在继续执行方法 2 或方法 3 之前,您需要满足其他前提条件。如需了解详情,请参阅以下各部分。

方法 2 的准备工作

如需使用方法 2 连接到关联集群,请确保满足以下前提条件:

  • 最新版本的 Google Cloud CLI。如需了解如何更新 gcloud CLI,请参阅 gcloud components update
  • 关联的集群版本 1.26.0-gke.8、1.27.0-gke.5、1.28.0-gke.2 或更高版本。

方法 3 的准备工作

如需使用方法 3 连接到关联集群,请确保满足以下前提条件:

  1. 确保您拥有最新版本的 Google Cloud CLI。如需了解如何更新 gcloud CLI,请参阅 gcloud components update

  2. 确保您使用的是挂接的集群版本 1.27.0-gke.5、1.28.0-gke.2 或更高版本。

  3. 配置员工身份联合(以便外部用户或群组可以使用 GKE 关联集群 API):

  4. 可选:为外部用户或群组分配适当的 Identity and Access Management (IAM) 角色。仅当您要向用户或群组授予创建或更新集群的权限时,才需要执行此步骤;仅访问集群时不需要

    请注意,角色是权限的集合。为实体(用户、群组或服务账号)分配角色时,您将为该实体授予该角色包含的所有权限。

    用户

    对于单个用户,您需要分配 gkemulticloud.admin 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject SUBJECT_VALUE"
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • WORKFORCE_POOL_ID:唯一标识 Google Cloud 中的员工身份池的 ID。设置 ID 格式时,请确保遵循 IAM 文档中查询参数下提供的推荐准则。
    • SUBJECT_VALUE:唯一标识外部用户的 ID。例如,ID 可以是电子邮件地址(如 alex@cymbalgroup.com)。

    群组

    对于群组,您需要分配 gkemulticloud.admin 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • WORKFORCE_POOL_ID:唯一标识 Google Cloud 中的员工身份池的 ID。设置 ID 格式时,请确保遵循 IAM 文档中查询参数下提供的推荐准则。
    • GROUP_ID:唯一标识外部群组的 ID。

    如需详细了解 GKE 关联集群所需的 API 角色和权限,请参阅 API 角色和权限

方法 1:以 Google 用户身份连接到关联集群

如需以 Google 用户身份连接到另行关联的集群,请按以下步骤操作:

  1. 使用以下命令启用 connectgatewaycloudresourcemanager API:

     gcloud services enable --project=PROJECT_ID \
         connectgateway.googleapis.com \
         cloudresourcemanager.googleapis.com
    

    PROJECT_ID 替换为您的 Google Cloud 项目的 ID。

  2. 自动或手动设置和应用 RBAC 规则:

    • 自动方法:如果您在关联集群时在 gcloud container attached clusters register 命令的 --admin-users 字段中指定了 Google 用户,则这些用户会被自动授予集群的管理员权限。因此,您可以跳过此步骤。

    • 手动方法:通过创建 Kubernetes YAML 清单,手动为各个 Google 用户设置 RBAC 规则。如需了解详情,请参阅使用 RBAC 授权

  3. 使用以下命令获取 Kubernetes kubeconfig 配置文件:

    gcloud container fleet memberships get-credentials CLUSTER_NAME
    

    CLUSTER_NAME 替换为您需要其连接凭据的集群的名称。

执行这些步骤后,您便可以作为 Google 用户连接到关联集群。

方法 2:使用 Google 群组连接到关联集群

此方法使您可以作为 Google 群组的成员连接到关联集群。换句话说,您向一个 Google 群组授予集群的访问权限,属于该 Google 群组的任何用户都有权访问该集群。

与为各个用户创建单独的授权相比,使用 Google 群组授予集群访问权限更为高效。例如,假设您要将 50 个用户添加到集群 Administrator 群组,将 75 个用户添加到 Editor 群组,将 100 个用户添加到 Reader 群组。如果使用本文档中介绍的方法 1,您将需要在 Kubernetes 清单文件中为 225 个用户创建 RBAC 规则。但是,方法 2 可以节省时间,因为您只需要为三个 Google 群组创建 RBAC 规则。

如需授权 Google 群组连接到关联集群,请按照以下步骤操作:

  1. 使用以下命令启用 connectgatewaycloudresourcemanager API:

      gcloud services enable --project=PROJECT_ID \
          connectgateway.googleapis.com \
          cloudresourcemanager.googleapis.com
    

    PROJECT_ID 替换为您的 Google Cloud 项目的 ID。

  2. 在项目的网域中创建一个名为 gke-security-groups 的群组(如果该群组尚不存在)。

  3. gke-security-groups 群组中创建一个或多个子群组以进行集群身份验证。

  4. 将用户添加到新创建的子群组。

  5. 向 Google 群组授予 IAM 角色:

    1. 为群组选择适当的角色。此角色决定了群组与 Connect 网关的交互方式。角色可以是以下之一:roles/gkehub.gatewayAdminroles/gkehub.gatewayEditorroles/gkehub.gatewayReader。(请注意,在此步骤中,您不授予对关联集群的权限,该步骤将在后面执行。)在这里,您只是确定群组用户操作 Connect 网关的方式。

    2. 运行以下命令,向群组授予角色:

      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=group:GROUP_NAME@DOMAIN \
        --role=GATEWAY_ROLE
      

      替换以下内容:

      • PROJECT_ID:您的 Google 项目 ID
      • GROUP_NAME:要授予访问权限的群组的名称
      • DOMAIN:您的 Google Workspace 网域
      • GATEWAY_ROLE:所选角色。例如 roles/gkehub.gatewayAdminroles/gkehub.gatewayEditorroles/gkehub.gatewayReader
  6. 在 Kubernetes 清单中,定义每个 Google 群组拥有的集群权限类型。例如,以下清单向 Google 群组 cluster-admin-team 授予集群管理员角色:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-group
    subjects:
    - kind: Group
      name: cluster-admin-team@example.com
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    
  7. 通过运行以下命令将清单保存为文件并应用于集群:

    kubectl apply -kubeconfig=KUBECONFIG_PATH -f FILENAME
    

    替换以下内容:

    • KUBECONFIG_PATHkubeconfig 文件的路径。
    • FILENAME:您创建的清单文件的名称。

执行这些步骤后,属于特定 Google 群组的用户便可以连接到关联集群。在此示例中,属于 Google 群组 cluster-admin-team 的用户可以作为管理员连接到集群。

方法 3:在关联或更新集群时向外部身份授予访问权限

方法 3 会在关联或更新集群时向外部身份授予访问权限。

如需关联 EKS 集群,请按照关联 EKS 集群中的步骤操作。如需更新 EKS 集群,请按照更新 EKS 集群中的步骤操作。

运行 gcloud CLI 命令以注册或更新集群时,请指定 admin-users 和/或 admin-groups 参数,如下所示:

gcloud container attached clusters [register|update] CLUSTER_NAME \
    --admin-users=principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject SUBJECT_VALUE \
    --admin-groups=principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID

替换以下内容:

  • CLUSTER_NAME:您的集群的名称。
  • WORKFORCE_POOL_ID:唯一标识 Google Cloud 中的员工身份池的 ID。设置 ID 格式时,请确保遵循 IAM 文档中查询参数下提供的推荐准则。
  • SUBJECT_VALUE:唯一标识外部用户的 ID。例如,ID 可以是电子邮件地址(如 alex@cymbalgroup.com)。
  • GROUP_ID:唯一标识外部群组的 ID。

后续步骤

如需使用 Cloud Identity 从 Google Cloud 控制台管理集群,请参阅使用 Google Cloud 身份登录