本文档介绍连接到符合 CNCF 要求的关联集群的三种方法:
这三种连接到已注册的集群的方法通过名为 Connect 网关的 Google 服务实现。如需详细了解 Connect 网关,请参阅使用 Connect 网关连接到已注册的集群。
准备工作
在执行任何方法之前,请确保您已关联集群。如需了解详情,请参阅关联符合 CNCF 要求的集群。
在继续执行方法 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 连接到关联集群,请确保满足以下前提条件:
确保您拥有最新版本的 Google Cloud CLI。如需了解如何更新 gcloud CLI,请参阅
gcloud components update
。确保您使用的是关联集群版本 1.27.0-gke.5、1.28.0-gke.2 或更高版本。
配置员工身份联合(以便外部用户或群组可以使用 GKE 关联集群 API):
- 对于 Azure 用户,请参阅使用 Azure AD 配置员工身份联合。
- 对于 Okta 用户,请参阅使用 Okta 配置员工身份联合。
- 对于其他平台的用户,请参阅配置员工身份联合。
可选:为外部用户或群组分配适当的 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"
替换以下内容:
群组
对于群组,您需要分配
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"
替换以下内容:
如需详细了解 GKE 关联集群所需的 API 角色和权限,请参阅 API 角色和权限。
方法 1:以 Google 用户身份连接到关联集群
如需以 Google 用户身份连接到另行关联的集群,请按以下步骤操作:
使用以下命令启用
connectgateway
和cloudresourcemanager
API:gcloud services enable --project=PROJECT_ID \ connectgateway.googleapis.com \ cloudresourcemanager.googleapis.com
将
PROJECT_ID
替换为您的 Google Cloud 项目的 ID。自动或手动设置和应用 RBAC 规则:
自动方法:如果您在关联集群时在
gcloud container attached clusters register
命令的--admin-users
字段中指定了 Google 用户,则这些用户会被自动授予集群的管理员权限。因此,您可以跳过此步骤。手动方法:通过创建 Kubernetes YAML 清单,手动为各个 Google 用户设置 RBAC 规则。如需了解详情,请参阅使用 RBAC 授权。
使用以下命令获取 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 群组连接到关联集群,请按照以下步骤操作:
使用以下命令启用
connectgateway
和cloudresourcemanager
API:gcloud services enable --project=PROJECT_ID \ connectgateway.googleapis.com \ cloudresourcemanager.googleapis.com
将
PROJECT_ID
替换为您的 Google Cloud 项目的 ID。在项目的网域中创建一个名为
gke-security-groups
的群组(如果该群组尚不存在)。在
gke-security-groups
群组中创建一个或多个子群组以进行集群身份验证。将用户添加到新创建的子群组。
向 Google 群组授予 IAM 角色:
为群组选择适当的角色。此角色决定了群组与 Connect 网关的交互方式。角色可以是以下之一:
roles/gkehub.gatewayAdmin
、roles/gkehub.gatewayEditor
或roles/gkehub.gatewayReader
。(请注意,在此步骤中,您不授予对关联集群的权限,该步骤将在后面执行。)在这里,您只是确定群组用户操作 Connect 网关的方式。运行以下命令,向群组授予角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=group:GROUP_NAME@DOMAIN \ --role=GATEWAY_ROLE
替换以下内容:
PROJECT_ID
:您的 Google 项目 IDGROUP_NAME
:要授予访问权限的群组的名称DOMAIN
:您的 Google Workspace 网域GATEWAY_ROLE
:所选角色。例如roles/gkehub.gatewayAdmin
、roles/gkehub.gatewayEditor
或roles/gkehub.gatewayReader
。
在 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
通过运行以下命令将清单保存为文件并应用于集群:
kubectl apply -kubeconfig=KUBECONFIG_PATH -f FILENAME
替换以下内容:
KUBECONFIG_PATH
:kubeconfig
文件的路径。FILENAME
:您创建的清单文件的名称。
执行这些步骤后,属于特定 Google 群组的用户便可以连接到关联集群。在此示例中,属于 Google 群组 cluster-admin-team
的用户可以作为管理员连接到集群。
方法 3:在关联或更新集群时向外部身份授予访问权限
方法 3 会在关联或更新集群时向外部身份授予访问权限。
如需关联符合 CNCF 要求的集群,请按照关联符合 CNCF 要求的集群中的步骤操作。如需更新符合 CNCF 要求的集群,请按照更新符合 CNCF 要求的集群中的步骤操作。
运行 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 身份登录。