本页面介绍如何将 Google Cloud 上的 GKE 集群添加到舰队。根据您的项目和使用场景,您可以使用 Google Cloud 控制台、Terraform、Config Connector 或 Google Cloud CLI 进行注册。 您还可以使用 Google Cloud CLI、Google Cloud 控制台或 Terraform 一步创建并注册新集群。
准备工作
确保您已按照一般前提条件注册集群。
根据您的应用场景,注册 Google Cloud 上的 GKE 集群可能还有以下要求:
- 如果您希望已注册的集群启用舰队工作负载身份联合(推荐),请确保已在集群上启用适用于 GKE 的工作负载身份联合。默认情况下,Autopilot 集群会启用适用于 GKE 的工作负载身份联合。
- 如果您要将集群注册到其他项目中的舰队(也称为跨项目注册),请确保您已设置必要的权限。 请注意,如果您要将 GKE Enterprise 功能与跨项目的已注册集群搭配使用,则必须在所选舰队宿主项目中启用 GKE Enterprise;在集群的项目中启用它没有任何效果。
- 如果您要使用 Terraform 或 Config Connector 注册集群,请确保已为该工具设置 Google Cloud 服务账号并进行了配置,以便该工具能够向 Google Cloud 进行身份验证:
注册 GKE on Google Cloud 集群
如前提条件中所述,我们建议在启用舰队适用于 GKE 的工作负载身份联合的情况下注册 GKE 集群,这可为应用提供向 Google Cloud API 和服务进行身份验证的一致方法。如需详细了解启用舰队适用于 GKE 的工作负载身份联合的优势,请参阅使用舰队适用于 GKE 的工作负载身份联合。使用以下任一选项注册集群可让您根据需要启用舰队适用于 GKE 的工作负载身份联合。
您可以选择在集群创建期间注册新集群,也可以注册现有集群。
注册新集群
如果您已启用 GKE Enterprise,我们强烈建议您在集群创建期间将新集群注册到舰队。这是因为这些“在舰队中生成”的集群在创建时使用了您为许多企业功能所选择的舰队级默认设置,并且已启用了推荐的日志和指标。您可以通过以下指南详细了解这些内容:
如果您尚未启用 GKE Enterprise,您仍然可以按照这些说明在集群创建期间注册集群,但无法获得任何舰队级默认配置。
控制台
在 Google Cloud 控制台中,转到相关的集群创建页面。
如需创建 Autopilot 集群,请转到创建 Autopilot 集群页面。
如需创建 Standard 区域级或 Standard 可用区级集群,请转到创建一个 Kubernetes 集群页面。
按照 GKE 文档中的说明,在 Google Cloud 控制台中完成创建 Autopilot 集群、Standard 区域级集群或 Standard 可用区级集群的部分。
在舰队注册部分中,选中注册到舰队复选框。默认情况下,舰队名称基于您的项目 ID。
填写其余部分。
如果您已选择创建 Standard 集群并且希望已注册的集群使用舰队工作负载身份联合(推荐),请点击导航窗格中的安全,并确保选择 Enable Workload Identity Federation for GKE(启用适用于 GKE 的工作负载身份联合)。Autopilot 集群默认启用了此功能。
查看完集群详细信息后,点击创建以创建集群并将其注册到舰队。
gcloud
这些命令需要 gcloud CLI 450.0.0 版或更高版本。
默认情况下,使用 Google Cloud CLI 注册集群会为您的集群提供区域级成员资格位置。
如需创建并注册新的 GKE Autopilot 集群,请运行以下命令:
gcloud container clusters create-auto CLUSTER_NAME --enable-fleet
将
CLUSTER_NAME
替换为您要创建的集群的唯一名称。此名称也会成为集群的成员资格名称。如果您的选定舰队中已经存在具有此名称的集群,则命令会返回错误。如需创建并注册启用了适用于 GKE 的工作负载身份联合的新 GKE Standard 集群,请运行以下命令:
gcloud container clusters create CLUSTER_NAME --enable-fleet \ --workload-pool=PROJECT_ID.svc.id.goog
替换以下内容:
CLUSTER_NAME
:您要创建的集群的唯一名称。此名称也会成为集群的成员资格名称。如果您的选定舰队中已经存在具有此名称的集群,则命令会返回错误。PROJECT_ID
:将拥有新集群的项目的 Google Cloud 项目 ID。
如果您要创建 Standard 集群,我们建议您创建启用了适用于 GKE 的工作负载身份联合的集群,因为这样一来,就可以为已注册的集群启用舰队工作负载身份联合。但是,如果您不想使用此功能,则可以省略
--workload-pool
标志。默认情况下,Autopilot 集群会启用适用于 GKE 的工作负载身份联合。
根据要创建的集群,您还可以指定任何其他选项,以创建标准可用区级集群、标准区域级集群或 Autopilot 集群。如果您尚未为 Google Cloud CLI 配置默认可用区,则可能还需要指定 Compute Engine 可用区;如果尚未配置默认项目,则可能还需要指定 Google Cloud 项目来拥有集群。
如需详细了解如何创建不同类型的 GKE 集群,请参阅 GKE 文档。
Terraform
您可以使用 google
提供方通过 Terraform 创建并注册 GKE 集群。您可以在 Terraform 注册表中找到用于管理 GKE 集群的 google_container_cluster
资源的完整参考文档。
在按照这些说明操作之前,请确保您已按照前提条件中的说明为 Terraform 创建了服务账号。
如需创建并注册新集群,请在 Terraform 配置中添加以下块。
将
google
提供方指定为所需的提供方:terraform { required_providers { google = { source = "hashicorp/google" version = "VERSION" } } }
将
VERSION
替换为 5.6.0 或更高版本。创建并注册新集群:
resource "google_container_cluster" "TF_CLUSTER_RESOURCE_NAME" { provider = google name = "CLUSTER_NAME" location = "ZONE" initial_node_count = 1 fleet { project = "FLEET_HOST_PROJECT" } }
替换以下内容:
TF_CLUSTER_RESOURCE_NAME
:要创建的新google_container_cluster
资源的唯一名称。CLUSTER_NAME
:要创建并注册的新 GKE 集群的唯一名称。ZONE
:GKE 集群资源的可用区。例如:us-central1-a
。FLEET_HOST_PROJECT
:要在其中创建和注册集群的 Google Cloud 项目 ID。如果不进行这项设置,则集群不会注册到舰队。如果要将集群注册到其他项目中的舰队,请指定其他项目 ID。
注册现有集群
使用以下任一选项可将现有集群注册到自己项目的舰队或其他项目中的舰队(Google Cloud 控制台以外的所有选项)。您还可以选择在升级到 GKE Enterprise 时注册部分或全部现有集群。
如需注册现有 GKE 集群,请按照以下说明操作:
控制台
如果您希望集群使用舰队工作负载身份联合(推荐),请确保在按照这些说明操作之前,在集群上启用适用于 GKE 的工作负载身份联合。默认情况下,Autopilot 集群会启用适用于 GKE 的工作负载身份联合。从 Google Cloud 控制台注册具有适用于 GKE 的工作负载身份联合的集群时,系统会自动为相关集群启用舰队工作负载身份联合。
在 Google Cloud 控制台中,进入 GKE 集群页面。
点击要添加到舰队的未注册集群旁边的注册。
在出现的确认对话框中,再次点击注册。
gcloud
这些命令需要 gcloud CLI 450.0.0 版或更高版本。
默认情况下,使用 Google Cloud CLI 注册集群会为您的集群提供区域级成员资格位置。
如果集群已启用适用于 GKE 的工作负载身份联合,则这两个命令都会为集群启用舰队工作负载身份联合。
如需将 Google Cloud 上的现有 GKE 集群注册到其项目的舰队,请运行以下命令:
gcloud container clusters update CLUSTER_NAME --enable-fleet
将
CLUSTER_NAME
替换为您要注册的集群的名称。此名称也会成为集群的成员资格名称。如需将集群注册到其他项目中的舰队,请使用
--fleet-project
标志,如下所示。在运行此命令之前,请确保您已设置跨项目注册所需的权限。gcloud container clusters update CLUSTER_NAME --fleet-project=PROJECT_ID_OR_NUMBER
- 将
CLUSTER_NAME
替换为您要注册的集群的名称。此名称也会成为集群的成员资格名称。 - 将
PROJECT_ID_OR_NUMBER
替换为您选择的舰队宿主项目的项目 ID 或编号。
- 将
Terraform
您可以使用 google
提供商向 Terraform 注册 GKE 集群。您可以在 Terraform 注册表中找到用于管理 GKE 集群的 google_container_cluster
资源的完整参考文档。
在按照这些说明操作之前,请确保您已按照前提条件中的说明为 Terraform 创建了服务账号。
注册现有集群
如需注册现有集群,请将以下块添加到集群的 google_container_cluster
资源配置:
fleet {
project = "FLEET_HOST_PROJECT"
}
将 FLEET_HOST_PROJECT
替换为集群所属的 Google Cloud 项目 ID;如果要将集群注册到其他项目中的舰队,则替换为其他项目 ID。
在已注册的集群上启用适用于 GKE 的工作负载身份联合
您可以使用 Terraform 为集群启用适用于 GKE 的工作负载身份联合。
如需为新集群或现有集群启用适用于 GKE 的工作负载身份联合,请在相关集群的 google_container_cluster
资源配置中添加以下块:
workload_identity_config {
workload_pool = "PROJECT_ID.svc.id.goog"
}
```
Replace <code><var>PROJECT_ID</var></code> with the Google Cloud project ID for your Terraform resources.
Config Connector
如果您安装了 Config Connector 插件,则可以使用 Config Connector 注册 GKE 集群。确保您拥有高于 1.47.0 的 Config Connector 版本,并且您已经按照前提条件中的说明创建了服务账号。
您可以在 Config Connector 参考文档中找到 GKEHubMembership
资源的完整参考文档。
注册 GKE 集群
如需注册集群,请先按照 Config Connector 指南中的说明指定要创建资源的位置。然后创建一个 YAML 文件以注册并(可选)创建集群,如下所示:
创建和注册 GKE 集群
创建一个 GKE 集群,如以下简单的示例所示:
apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerCluster metadata: name: CLUSTER_NAME spec: location: LOCATION initialNodeCount: 1
替换以下内容:
- CLUSTER_NAME:您选择用来唯一表示您使用 Config Connector 创建的集群的名称。
- LOCATION:您选择预配 GKE 集群资源的可用区或区域。例如:
us-central1-a
。
如需了解使用 Config Connector 创建 GKE 集群时的完整选项列表,请参阅 Config Connector 文档。
为 GKE 集群注册成员资格。
apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubMembership metadata: name: MEMBERSHIP_NAME spec: location: MEMBERSHIP_LOCATION endpoint: gkeCluster: resourceRef: name: CLUSTER_NAME
替换以下内容:
- MEMBERSHIP_NAME:您选择用来唯一表示要注册到舰队的集群的成员资格名称。
- MEMBERSHIP_LOCATION:您要管理集群成员资格的舰队服务的位置。这可以是集群自己的位置(推荐)或
global
。如需了解详情,请参阅舰队成员资格位置。您不能指定与集群位置不同的位置:如果您这样做,注册会失败。 - CLUSTER_NAME:您选择用来唯一表示您使用 Config Connector 创建的集群的名称。
在其他项目中注册集群
将以下内容添加到 GKEHubMembership
资源的 metadata
字段中,以将集群注册到另一个项目中的舰队。
metadata:
annotations:
cnrm.cloud.google.com/project-id: FLEET_PROJECT_ID
替换以下内容:
- FLEET_PROJECT_ID:您选择要将 GKE 集群注册到的舰队宿主项目。
注册现有集群
如果要注册现有集群(无论其创建方式如何),请使用以下配置。在这种情况下,您需要指定集群的完整资源名称,以便 Config Connector 能够找到它。将 GKEHubMembership
资源的 resourceRef
字段替换为:
resourceRef:
external: //container.googleapis.com/CLUSTER_RESOURCE_NAME
替换以下内容:
- CLUSTER_RESOURCE_NAME:GKE 集群的 Google Cloud 资源名称。例如:
projects/my-project/zones/us-west1-a/clusters/my-cluster
。
如果集群是使用 Config Connector 创建的,则无需指定完全限定的集群名称。
在已注册的集群上启用适用于 GKE 的工作负载身份联合
启用适用于 GKE 的工作负载身份联合会使用与注册集群相同的配置,但还需要执行以下额外步骤。
通过在
ContainerCluster
资源的spec
字段中添加以下内容,来启用适用于 GKE 的工作负载身份联合。新集群和现有集群均需执行此操作。spec: workloadIdentityConfig: workloadPool: PROJECT_ID.svc.id.goog
替换以下内容:
- PROJECT_ID:您通过命名空间注释选择用于创建 GKE 集群资源的默认项目。
通过在
GKEHubMembership
资源块的spec
字段中添加以下内容来启用舰队工作负载身份联合。spec: authority: issuer: https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME }
替换以下内容:
- PROJECT_ID:您通过命名空间注释选择用于创建 GKE 集群资源的默认项目。
- LOCATION:您选择预配 GKE 集群资源的可用区或区域。例如:
us-central1-a
。 - CLUSTER_NAME:您选择用来唯一表示您创建的集群的名称。
问题排查
如果您在此设置过程中遇到任何问题,请参阅我们的问题排查指南。
后续步骤
- 确认集群注册成功并获取其他舰队成员资格详细信息,如获取舰队成员资格状态中所述
- 设置对已注册集群的身份验证:
- 从 Google Cloud 控制台登录集群