将 Google Cloud 上的集群注册到您的舰队

本页面介绍如何将 Google Cloud 上的 GKE 集群添加到舰队。根据您的项目和使用场景,您可以使用 Google Cloud 控制台、Terraform、Config Connector 或 Google Cloud CLI 进行注册。 您还可以使用 Google Cloud CLI、Google Cloud 控制台或 Terraform 一步创建和注册新集群。

准备工作

确保您已按照一般前提条件注册集群。

根据您的使用场景,注册 Google Cloud 上的 GKE 集群可能还需要以下几项:

  • 如果您希望已注册的集群启用适用于 GKE 的舰队工作负载身份联合(推荐),请确保在集群上启用适用于 GKE 的工作负载身份联合。默认情况下,Autopilot 集群会为 GKE 启用工作负载身份联合。
  • 如果要将集群注册到其他项目中的舰队(也称为跨项目注册),请确保您已设置必要的权限。请注意,如果您要将 GKE Enterprise 功能用于跨项目注册的集群,则必须在您选择的舰队宿主项目中启用 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,仍然可以在创建集群期间按照这些说明注册集群,但无法获取任何舰队级默认配置。

控制台

  1. 在 Google Cloud 控制台中,前往相关的集群创建页面。

  2. 按照 GKE 文档中的说明,完成通过 Google Cloud 控制台创建 Autopilot标准区域级标准可用区级集群的部分。

  3. 舰队注册部分中,选中注册到舰队复选框。默认情况下,舰队名称基于您的项目 ID。

  4. 填写其余部分。

  5. 如果您希望已注册的 Standard 集群使用 GKE 的舰队工作负载身份联合(推荐),请点击导航窗格中的安全,并确保选中为 GKE 启用工作负载身份联合

  6. 查看完集群详细信息后,点击创建以创建集群并将其注册到舰队。

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 的工作负载身份联合的集群,因为这样会为已注册的集群为 GKE 启用舰队工作负载身份联合。但是,如果您不想使用此功能,则可以省略 --workload-pool 标志。默认情况下,Autopilot 集群会为 GKE 启用工作负载身份联合。

根据要创建的集群,您还可以指定任何其他选项,以创建标准可用区级集群标准区域级集群Autopilot 集群。如果您尚未为 Google Cloud CLI 配置默认可用区,则可能还需要指定 Compute Engine 可用区;如果尚未配置默认项目,则可能还需要指定 Google Cloud 项目来拥有集群。

如需详细了解如何创建不同类型的 GKE 集群,请参阅 GKE 文档

Terraform

您可以使用 google-beta 提供程序向 Terraform 创建和注册 GKE 集群。您可以在 Terraform 注册表中找到用于管理 GKE 集群的 google_container_cluster 资源的完整参考文档。

在按照这些说明操作之前,请确保您已按照前提条件中的说明为 Terraform 创建了服务账号。

如需创建并注册新集群,请在 Terraform 配置中添加以下块。

  1. google-beta 提供方指定为所需的提供方:

    terraform {
      required_providers {
        google-beta = {
          source = "hashicorp/google-beta"
          version = "VERSION"
        }
      }
    }
    

    VERSION 替换为 5.6.0 或更高版本。

  2. 创建并注册新集群:

    resource "google_container_cluster" "TF_CLUSTER_RESOURCE_NAME" {
      provider = google-beta
      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 的舰队工作负载身份联合(推荐),请先确保已在集群上为 GKE 启用 GKE 工作负载身份联合,然后再按照以下说明操作。默认情况下,Autopilot 集群会启用适用于 GKE 的 GKE 工作负载身份联合。当您在 Google Cloud 控制台中注册具备 GKE 工作负载身份联合功能的集群时,这些集群会自动为 GKE 启用舰队工作负载身份联合功能。

  1. 在 Google Cloud 控制台中,进入 GKE 集群页面。

    进入 GKE 集群页面

  2. 点击要添加到舰队的未注册集群旁边的注册

  3. 在出现的确认对话框中,再次点击注册

gcloud

这些命令需要 gcloud CLI 450.0.0 版或更高版本

默认情况下,使用 Google Cloud CLI 注册集群会为您的集群提供区域级成员资格位置

如果集群已启用针对 GKE 的工作负载身份联合,这两个命令都会为 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-beta 提供商向 Terraform 注册 GKE 集群。您可以在 Terraform 注册表中找到用于管理 GKE 集群的 google_container_cluster 资源的完整参考文档。

在按照这些说明操作之前,请确保您已按照前提条件中的说明为 Terraform 创建了服务账号。

注册现有集群

如需注册现有集群,请将以下块添加到集群的 google_container_cluster 资源配置:

fleet {
        project = "FLEET_HOST_PROJECT"
      }

FLEET_HOST_PROJECT 替换为集群所属的 Google Cloud 项目 ID;如果要将集群注册到其他项目中的舰队,则替换为其他项目 ID。

在已注册的 GKE 集群上为 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 集群

  1. 创建一个 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 文档

  2. 为 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 启用工作负载身份联合

为 GKE 启用工作负载身份联合使用与注册集群相同的配置,并额外执行以下步骤。

  1. 通过在 ContainerCluster 资源的 spec 字段中添加以下内容来启用 GKE Workload Identity。新集群和现有集群均需执行此操作。

    spec:
      workloadIdentityConfig:
        workloadPool: PROJECT_ID.svc.id.goog
    

    替换以下内容:

  2. 通过在 GKEHubMembership 资源块的 spec 字段中添加以下内容来启用舰队 Workload Identity。

    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:您选择用来唯一表示您创建的集群的名称。

问题排查

如果您在此设置过程中遇到任何问题,请参阅我们的问题排查指南

后续步骤