注册集群

本页面简要介绍了如何将 Kubernetes 集群注册到 Google Cloud 队列。您可以在队列简介中找到有关在队列中逻辑分组集群的更多信息,以及它如何帮助您管理基础设施和应用。

Anthos clusters on VMwareAnthos clusters on Bare MetalAnthos clusters on AWS 会在集群创建时自动注册到您的项目队列,但您可能很少需要更新集群注册。Google Cloud 上的 GKE 集群和关联的集群必须按照本页说明手动注册。

准备工作

检查所选集群类型的前提条件。如需了解详细说明,请参阅我们的前提条件指南

所有注册

  1. 确保您已安装相关命令行工具:
  2. 在 Google Cloud 项目中启用所需的 API
  3. 向注册集群的用户授予所需的 Google Cloud IAM 角色
  4. 向注册集群的用户授予 cluster-admin RBAC 角色

GKE 集群

GKE 集群注册可能还需要以下内容:

Google Cloud 外部的集群

此外,Google Cloud 外部的所有手动注册(如连接的集群)也需满足以下要求:

  1. 确保网络连接,以访问 Google Cloud API 和服务端点。
  2. 设置您希望 Connect Agent 用于向 Google Cloud 进行身份验证的身份

您可能还对某些关联的集群类型有特殊要求。

队列 Workload Identity 简介

GKE 可让您将集群配置为在向 Google Cloud API 和服务进行身份验证时使用 Workload Identity。GKE Workload Identity 可让集群中的工作负载向 Google 进行身份验证,而无需下载、手动轮替和常规管理 Google Cloud 服务帐号密钥。相反,工作负载会使用集群生成的短期令牌进行身份验证。所有已启用 GKE Workload Identity 的集群在发出 ID 时均使用其项目的 Workload Identity 池,这可让 Identity and Access Management 信任和了解 Kubernetes 服务帐号凭据。您可以在使用 Workload Identity 中详细了解 GKE Workload Identity。

借助队列,已注册的集群可以获得使用队列 Workload Identity 的额外优势。如果已注册的集群启用了队列成员中的 Workload Identity,则可以使用队列范围的队列工作负载身份池,从而更轻松地在整个队列和多个项目中设置 Google API 和其他服务的身份验证。Connect Agent 还可以在某些集群类型上使用队列 Workload Identity 作为队列成员资格的一部分向 Google 进行身份验证,并且需要使用某些能够跨项目使用的 Anthos 功能,例如 Anthos Service Mesh。如需详细了解如何结合使用队列 Workload Identity 和已注册的集群(例如,向 Google API 进行身份验证),请参阅队列 Workload Identity

我们建议尽可能在启用集群 Workload Identity 的情况下注册集群。目前,从 Anthos 1.8 开始,GKE 集群、一些关联的集群类型以及 Google Cloud 外部的 Anthos 集群可以使用队列 Workload Identity。有关详情,请参阅以下注册说明。

注册集群

注册集群的方式取决于集群类型以及特定的项目和应用需求。

注册 GKE 集群

所有这些选项都允许您根据需要启用队列 Workload Identity。

  • 将启用 Anthos 的项目中的 GKE 集群注册到您的项目队列的最简单快捷的方法是从 Cloud Console 中的 Anthos 集群页面注册。使用此方法,您可以立即在控制台中查看集群(作为队列的一部分),并使用支持队列的功能(例如 Anthos Config Management)

  • 您可以使用 TerraformConfig Connector 创建并注册 GKE 集群(无论是否使用 Anthos)。

  • 您可以使用 gcloud 命令行工具注册 GKE 集群(无论是否使用 Anthos)。使用 gcloud 命令行工具进行注册后,您的集群上会安装 Connect Agent,从而允许您使用 Connect 网关跨使用 Google ID 的环境实现身份验证标准化。

如需注册 GKE 集群,请执行以下操作:

控制台

如需注册集群,请执行以下操作:

  1. (可选)如果您希望已注册的集群使用队列 Workload Identity,请确保在该集群上启用 GKE Workload Identity。从 Cloud Console 注册具有 GKE Workload Identity 的集群时,系统会自动启用队列 Workload Identity。
  2. 在 Cloud Console 中,转到 Anthos 集群页面。此页面会显示您注册的所有集群。

    转到“Anthos 集群”页面

  3. 点击注册现有集群

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

Terraform

您可以使用 google-beta 提供商向 Terraform 注册 GKE 集群。您可以在 Terraform 注册表中找到用于配置注册的 gke_hub_membership 资源的完整参考文档。

注册 GKE 集群

如需注册集群,请在配置中使用以下块。

  1. google-beta 提供商指定为所需的提供商,如以下代码段所示。版本应当高于 3.62.0。

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

    如果要使用 gke_hub_membership,则需要此提供商。

  2. 为该提供商设置以下默认值:

    provider "google-beta" {
      credentials = file("SERVICE_ACCOUNT_KEY_PATH")
      project = "PROJECT_ID"
    }
    

    请替换以下内容:

    • SERVICE_ACCOUNT_KEY_PATH:作为前提条件的一部分予以下载的服务帐号私钥 JSON 文件的本地文件路径。此服务帐号密钥作为 Secret(名为 creds-gcp)存储在 gke-connect 命名空间中。此服务帐号密钥使 Terraform 能够访问您的 Google Cloud 帐号。
    • PROJECT_ID:您选择用来预配 Terraform 资源的默认项目。
  3. 创建 GKE 集群(可选)

    如果要注册现有 GKE 集群,请跳过此步骤。

    resource "google_container_cluster" "TF_CLUSTER_RESOURCE_NAME" {
      provider = google-beta
      name               = "CLUSTER_NAME"
      location           = "ZONE"
      initial_node_count = 1
    }
    

    请替换以下内容:

    • TF_CLUSTER_RESOURCE_NAME:您选择用来唯一标识此块创建的 Terraform google_container_cluster 资源的名称。
    • CLUSTER_NAME:您选择用来唯一标识您创建的集群的名称。
    • ZONE:您选择用来预配 GKE 集群资源的默认可用区。例如:us-central1-a
  4. 为 GKE 集群注册成员资格。

    resource "google_gke_hub_membership" "TF_MEMBERSHIP_RESOURCE_NAME" {
      provider = google-beta
      project_id = "HUB_PROJECT_ID"
      membership_id = "MEMBERSHIP_NAME"
      endpoint {
        gke_cluster {
         resource_link = "//container.googleapis.com/CLUSTER_RESOURCE_NAME"
        }
      }
    }
    

    请替换以下内容:

    • TF_MEMBERSHIP_RESOURCE_NAME:您选择用来唯一标识此块创建的 Terraform google_gke_hub_membership 资源的名称。
    • MEMBERSHIP_NAME:您选择用来唯一表示要注册到队列的集群的成员资格名称。
    • CLUSTER_RESOURCE_NAME:GKE 集群的 Google Cloud 资源名称。例如:projects/my-project/zones/us-west1-a/clusters/my-cluster。如果集群是通过 Terraform 预配的,则此字段为 ${google_container_cluster.TF_CLUSTER_RESOURCE_NAME.id}
    • HUB_PROJECT_ID:如果未设置此字段,系统将在您之前指定的默认项目 (PROJECT_ID) 中创建集群的成员资格。如果要将 GKE 集群注册到其他项目,请设置此字段。

在已注册的 GKE 集群上启用 Workload Identity

启用 Workload Identity 使用与注册集群相同的配置,但还需要执行以下额外步骤。

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

    workload_identity_config {
      identity_namespace = "PROJECT_ID.svc.id.goog"
    }
    

    请替换以下内容:

    • PROJECT_ID:您选择用来预配 Terraform 资源的默认项目。
  2. 通过在相关的 google_gke_hub_membership 资源块中添加以下内容来启用 Fleet Workload Identity。

    authority {
      issuer = "https://container.googleapis.com/v1/CLUSTER_RESOURCE_NAME"
    }
    

    请替换以下内容:

    • CLUSTER_RESOURCE_NAME:GKE 集群的 Google Cloud 资源。例如:projects/my-project/zones/us-west1-a/clusters/my-cluster。如果集群是通过 Terraform 预配的,则此字段为 ${google_container_cluster.TF_CLUSTER_RESOURCE_NAME.id}

配置连接器

如果您安装了 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: ZONE
      initialNodeCount: 1
    

    请替换以下内容:

    • CLUSTER_NAME:您选择用来唯一表示您使用 Config Connector 创建的集群的名称。
    • ZONE:您选择预配 GKE 集群资源的地区。例如:us-central1-a
  2. 为 GKE 集群注册成员资格。

    apiVersion: gkehub.cnrm.cloud.google.com/v1beta1
    kind: GKEHubMembership
    metadata:
      name: MEMBERSHIP_NAME
    spec:
      location: global
      endpoint:
        gkeCluster:
          resourceRef:
            name: CLUSTER_NAME
    

    请替换以下内容:

    • MEMBERSHIP_NAME:您选择用来唯一表示要注册到队列的集群的成员资格名称。
    • CLUSTER_NAME:您选择用来唯一表示您使用 Config Connector 创建的集群的名称。

在其他项目中注册集群

将以下内容添加到 GKEHubMembership 资源的 metadata 字段中。

   metadata:
     annotations:
       cnrm.cloud.google.com/project-id: HUB_PROJECT_ID

请替换以下内容:

  • HUB_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

在已注册的 GKE 集群上启用 Workload Identity

启用 Workload Identity 使用与注册集群相同的配置,但还需要执行以下额外步骤。

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

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

    请替换以下内容:

  2. 通过在 GKEHubMembership 资源块的 spec 字段中添加以下内容来启用队列工作负载身份。

    spec:
      authority:
        issuer: https://container.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/clusters/CLUSTER_NAME
    }
    

    请替换以下内容:

    • PROJECT_ID:您通过命名空间注释选择用于创建 GKE 集群资源的默认项目。
    • ZONE:您选择预配 GKE 集群资源的地区。例如:us-central1-a
    • CLUSTER_NAME:您选择用来唯一表示您创建的集群的名称。

gcloud

使用 gcloud 命令行工具注册集群需要 Cloud SDK 版本 281.0.0 或更高版本

从命令行注册集群会在集群上安装 Connect Agent,可以使用 Workload Identity 或 Google Cloud 服务帐号进行身份验证。

向集群 Workload Identity 注册 GKE 集群(推荐)

  1. 按照前提条件中的说明,确保集群已启用 GKE Workload Identity。

  2. 运行以下命令之一来注册集群:

    gcloud container hub memberships register MEMBERSHIP_NAME \
     --gke-uri=GKE_URI \
     --enable-workload-identity
    

    gcloud container hub memberships register MEMBERSHIP_NAME \
     --gke-cluster=GKE_CLUSTER \
     --enable-workload-identity
    

    请替换以下内容:

    • MEMBERSHIP_NAME:您选择用来唯一表示要注册到队列的集群的成员资格名称。
    • GKE_URI:GKE 集群的 URI,例如 https://container.googleapis.com/v1/projects/my-gke-project/locations/us-central1-a/clusters/my-gke-cluster。您可以通过运行 gcloud container clusters list --uri 来获取该 URI。
    • GKE_CLUSTER:当前项目中的 GKE 集群的 location/name。该位置可以是可用区或区域,例如 us-central1-a/my-gke-cluster

使用服务帐号注册 GKE 集群

  1. 确保您已按照前提条件中所述创建了供 Connect Agent 使用的服务帐号。

  2. 运行以下任一命令:

    gcloud container hub memberships register MEMBERSHIP_NAME \
     --gke-uri=GKE_URI \
     --service-account-key-file=SERVICE_ACCOUNT_KEY_PATH
    

    gcloud container hub memberships register MEMBERSHIP_NAME \
     --gke-cluster=GKE_CLUSTER \
     --service-account-key-file=SERVICE_ACCOUNT_KEY_PATH
    

    请替换以下内容:

    • MEMBERSHIP_NAME:您选择用来唯一表示要注册到队列的集群的成员资格名称。
    • SERVICE_ACCOUNT_KEY_PATH:作为“前提条件”的一部分予以下载的服务帐号私钥 JSON 文件的本地文件路径。此服务帐号密钥作为 Secret(名为 creds-gcp)存储在 gke-connect 命名空间中。
    • GKE_URI:GKE 集群的 URI,例如 https://container.googleapis.com/v1/projects/my-gke-project/locations/us-central1-a/clusters/my-gke-cluster。您可以通过运行 gcloud container clusters list --uri 来获取该 URI。
    • GKE_CLUSTER:当前项目中的 GKE 集群的 location/name。该位置可以是可用区或区域,例如 us-central1-a/my-gke-cluster

在 Google Cloud 之外注册集群

在 Google Cloud 之外注册集群会在集群中安装 Connect Agent 以管理集群与其队列的连接。代理 (Agent) 需要一种身份来向 Google 进行身份验证(可以是 Google Cloud 服务帐号,也可以是(推荐)队列 Workload Identity)。您可以在 Connect 概览中详细了解 Connect Agent。

  • 关联的集群必须按照本部分中的说明手动注册。如果它们满足相关要求,则可在启用队列 Workload Identity 的情况下注册。否则,请使用 Google Cloud 服务帐号注册关联的集群以进行身份验证。

  • 目前,您必须按照向 Connect 注册您的集群中的说明手动注册 Anthos clusters on Azure。这些说明会默认启用队列 Workload Identity。

  • Anthos clusters on VMwareAnthos clusters on Bare MetalAnthos clusters on AWS 会在集群创建时自动注册到您的项目队列。在极少数情况下,您可能需要更新集群的注册(例如在不小心取消注册集群的情况下)。自 Anthos 1.8 起,所有这些集群类型都会在注册时自动启用队列 Workload Identity。现有的已注册集群在升级到 Anthos 1.8 后也会更新为使用队列 Workload Identity。请注意,对于这些集群类型,您仍然需要设置服务帐号进行注册。初次注册后,Connect Agent 会使用队列 Workload Identity 向 Google 进行身份验证。

如需注册或更新 Connect Agent 的注册,请执行以下操作:

gcloud

使用 gcloud 命令行工具注册集群需要 Cloud SDK 版本 281.0.0 或更高版本

以下说明适用于关联的集群,但也可以用于更新 Anthos clusters on AWS 注册、Anthos clusters on VMware 版本 1.7 及更早版本、Anthos clusters on Bare Metal 以及任何其他 Anthos 集群。

运行以下命令:

 gcloud container hub memberships register MEMBERSHIP_NAME \
   --context=KUBECONFIG_CONTEXT \
   --kubeconfig=KUBECONFIG_PATH \
   --service-account-key-file=SERVICE_ACCOUNT_KEY_PATH

请替换以下内容:

  • MEMBERSHIP_NAME:您选择用来唯一表示要在队列中注册的集群的成员资格名称。
  • SERVICE_ACCOUNT_KEY_PATH:作为“前提条件”的一部分予以下载的服务帐号私钥 JSON 文件的本地文件路径。此服务帐号密钥作为 Secret(名为 creds-gcp)存储在 gke-connect 命名空间中。
  • KUBECONFIG_CONTEXT:所注册集群的集群上下文,它显示在 kubeconfig 文件中。您可以通过运行 kubectl config current-context 从命令行获取此值。
  • KUBECONFIG_PATH:存储包含所注册集群的条目的 kubeconfig 的本地文件路径。如果设置了此环境变量,则默认为 $KUBECONFIG;否则默认为 $HOME/.kube/config

向队列 Workload Identity 注册连接的集群

如需注册启用了队列 Workload Identity 的关联集群,请运行以下命令之一。如需详细了解哪些关联的集群类型可以使用此功能以及任何其他要求,请参阅关联的集群前提条件

种类、OpenShift 集群

 gcloud container hub memberships register MEMBERSHIP_NAME \
   --context=KUBECONFIG_CONTEXT \
   --kubeconfig=KUBECONFIG_PATH \
   --enable-workload-identity \
   --has-private-issuer

EKS 集群

  1. 获取集群的 OIDC 提供商网址,并确保其公开显示。如果不存在提供商,请按照为您的集群创建 IAM OIDC 提供商中的说明操作,然后再次运行该命令。

    aws eks describe-cluster --name MEMBERSHIP_NAME --query "cluster.identity.oidc.issuer" --output text
    
  2. 运行以下命令,将 OIDC_URL 替换为上一个命令返回的网址:

     gcloud container hub memberships register MEMBERSHIP_NAME \
      --context=KUBECONFIG_CONTEXT \
      --kubeconfig=KUBECONFIG_PATH \
      --enable-workload-identity \
      --public-issuer-url=OIDC_URL
    

gkectl

更新 Anthos clusters on VMware 注册

从 Anthos 1.8 开始,只有使用 gkectl 更新集群配置文件,才能更新 Anthos clusters on VMware 注册。如需在创建集群后重新注册该集群,请确保正确填写集群配置文件的 gkeConnect 部分,并运行 gkectl update cluster

控制台

生成注册命令

您可以使用 Cloud Console 帮助生成 gcloud 注册命令来手动注册集群。以下说明适用于关联的集群,以及更新 Anthos clusters on AWS、Anthos clusters on VMware 1.7 版及更早版本以及任何其他 Anthos 集群的注册。

如需注册集群,请执行以下操作:

  1. 在 Google Cloud Console 中,转到 Anthos 集群页面。此页面会显示您注册的所有集群。

    转到“Anthos 集群”页面

  2. 点击注册现有集群

  3. 点击添加外部集群

  4. 集群名称字段中输入要注册的集群的名称。

  5. 可选:为您的集群添加 Google Cloud 标签。

  6. 点击生成注册命令

  7. 在 Cloud Shell 或其他保存了服务帐号凭据的位置,修改并运行显示在页面上的 gcloud 命令。您需要指定以下值:

    • CLUSTER_CONTEXT 是 kubeconfig 文件中显示的集群上下文。您可以通过运行 kubectl config current-context 从命令行获取此值。
    • KUBECONFIG_PATH 是存储 kubeconfig 文件的本地文件路径。如果设置了此环境变量,则默认为 $KUBECONFIG;否则默认为 $HOME/.kube/config
    • LOCAL_KEY_PATH 是服务帐号密钥文件的路径。

    运行此命令会在用户集群中部署 Connect Agent。在 Connect Agent 连接到 Google Cloud 并且您的集群注册后,页面上会显示成功消息。

  8. 点击设置标签;如果未设置任何标签,则点击跳过

高级注册选项(仅限命令行)

下载 Connect Agent 清单

如需在不部署代理的情况下下载 Connect Agent 安装清单(例如,如果您要在安装之前检查或修改清单),请将 --manifest-output-file 标志传入 gcloud container hub memberships register 命令。例如:

--manifest-output-file=[MANIFEST_FILE_PATH]

其中 [MANIFEST_FILE_PATH] 是您想要存储 Connect Agent 安装清单的本地文件路径。

使用此选项将不会将 Connect Agent 部署到集群中。如需部署 Connect Agent,请手动将下载的清单应用到集群。

使用代理服务器

如需配置代理服务器,请将 --proxy 标志传入 gcloud container hub memberships register 命令。例如:

--proxy=[URL]

其中,[URL] 是代理地址。

Connect Agent 仅支持基于 Connect 的 HTTP 和 HTTPS 代理,并接受 IP 地址和主机名。请务必指定与网址中的代理类型对应的协议。例如,传入 HTTPS 主机名:

--proxy=https://mycorpproxy.com:443

除非另行指定,否则 Connect Agent 会使用端口 3128 进行代理。

如果您的代理需要授权,请确保传入凭据,例如:

--proxy=http://user:password@10.10.10.10:8888

在具有 Windows 和 Linux 节点的集群中安装 Connect Agent

Connect Agent 必须在 Linux 节点上运行。如果您要在具有 Linux 和 Windows 节点的混合集群中安装,可以通过向部署定义添加适当的节点选择器来确保 Connect Agent 部署到 Linux 节点上。

运行以下命令以使用适当的节点选择器更新部署:

kubectl patch deployment \
$(kubectl get deployment -o=jsonpath='{.items[*].metadata.name}' -n gke-connect) \
-p '{"spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/os":"linux"}}}}}' -n gke-connect

如需验证更新是否成功,请运行以下命令:

kubectl get deployment -o=jsonpath='{.items[].spec.template.spec.nodeSelector}' -n gke-connect

该命令应返回以下内容:

{"kubernetes.io/os":"linux"}

后续步骤