使用 Anthos On-Prem API 客户端创建管理员集群

本页面介绍了如何使用 Google Cloud 控制台或 Google Cloud CLI (gcloud CLI) 创建用户集群。这两个标准 Google Cloud 客户端都使用 Anthos On-Prem API 创建集群。

什么是 Anthos On-Prem API?

Anthos On-Prem API 是由 Google Cloud 托管的 API,可让您使用 Terraform 和标准 Google Cloud 应用管理本地集群的生命周期。Anthos On-Prem API 在 Google Cloud 的基础架构中运行。Terraform、控制台和 gcloud CLI 是 API 的客户端,它们使用 API 在数据中心内创建集群。

如需管理集群的生命周期,Anthos On-Prem API 必须将有关集群状态的元数据存储在 Google Cloud 中,并使用创建集群时指定的 Google Cloud 区域。此元数据可让 API 管理集群生命周期,并且不包含特定于工作负载的数据。

使用 Anthos On-Prem API 客户端创建集群时,您需要指定 Google Cloud 项目。创建集群后,它会自动注册到指定项目的舰队。此项目称为舰队宿主项目。集群创建后,舰队宿主项目便无法更改。

如果您愿意,可以通过创建管理员集群配置文件并使用 bmctl 来创建管理员集群,如创建管理员集群中所述。

如果要使用控制台或 gcloud CLI 管理使用 bmctl 创建的集群的生命周期,请参阅将集群配置为由 Anthos On-Prem API 管理

IAM 权限

如果您不是 Google Cloud 项目所有者,则必须让项目所有者为您授予以下角色:

如果您想在控制台中访问 GKE Enterprise 和 Google Kubernetes Engine 页面,则还必须拥有 roles/container.viewer

如需了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

命令行访问权限

创建集群后,如果您要使用 Connect 网关在管理员工作站以外的计算机上针对集群运行 kubectl,请在您打算使用的计算机上安装以下命令行工具。

  • 最新版本的 gcloud CLI

  • kubectl,用于对 Kubernetes 集群运行命令。如果您需要安装 kubectl,请按照相关instructions操作。

选择用于创建管理员集群的客户端

您可以使用控制台或 gcloud CLI 创建由 Anthos On-Prem API 管理的管理员集群。如果这是您第一次在 Bare Metal 上安装 GKE,您可能会发现控制台比 gcloud CLI 更易于使用。

在您进一步熟悉创建集群所需的信息后,您可能会发现 gcloud CLI 更方便,因为您可以将命令及其参数保存到文本文件中。如果您使用的是 CI/CD 工具(例如 Cloud Build),则可以使用 gcloud 命令创建集群,并指定 --impersonate-service-account 标志以自动执行创建操作。

前提条件

控制台

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

    进入 GKE Enterprise 集群页面

  2. 选择您要供创建集群的 Google Cloud 项目。所选项目也会用作舰队宿主项目。

  3. 点击创建集群

  4. 在对话框中,点击本地

  5. 裸机旁边,点击配置。请确保选中创建管理员集群

前提条件页面显示管理员工作站和集群节点机器的要求。网络要求部分中的 IP 地址规划器可帮助您规划一个管理员集群和一个用户集群的最简安装所需的 IP 地址。

管理员工作站前提条件

展开此部分可显示管理员工作站的硬件、操作系统和连接要求。

集群节点机器前提条件

展开此部分可显示集群节点机器的硬件、操作系统和连接要求。

网络要求

本部分可帮助您规划最简环境所需的 IP 地址。(可选)在节点 IP 地址和虚拟 IP 地址部分中,您可以提供起始节点 IP 地址和虚拟 IP 地址 (VIP),并且控制台会显示您需要的 IP 地址表。 这些 IP 地址不会应用于管理员集群配置。它们旨在帮助您规划安装所需的 IP 地址。您可以将该表下载为 CSV 文件,并将其导入电子表格或 IP 地址规划工具,以此作为跟踪集群所需的 IP 地址的起点。

查看 Google Cloud 资源

确保舰队宿主项目中启用了所有必需的 Google API。此外,您还需要启用 Anthos On-Prem API:

gcloud services enable --project FLEET_HOST_PROJECT_ID \
  gkeonprem.googleapis.com

FLEET_HOST_PROJECT_ID 替换为舰队宿主项目的项目 ID。

在创建集群之前,您需要按照准备引导环境中所述在管理员工作站上运行 bmctl register bootstrap 命令。此命令可以创建所需的服务账号,使其具有创建管理员集群所需的最低要求的 IAM 权限。 如果您愿意,可以手动配置服务账号

准备好开始后,请点击左侧导航栏中的安装引导环境

gcloud CLI

硬件、网络和操作系统前提条件

使用 Anthos On-Prem API 客户端创建管理员集群需要满足与使用 bmctl 创建该集群相同的硬件、网络和操作系统前提条件。如需了解详情,请参阅安装前提条件

所需的 Google API

确保舰队宿主项目中启用了所有必需的 Google API。此外,您还需要启用 Anthos On-Prem API:

gcloud services enable --project FLEET_HOST_PROJECT_ID \
  gkeonprem.googleapis.com

FLEET_HOST_PROJECT_ID 替换为舰队宿主项目的项目 ID。

所需的服务账号和权限

在创建集群之前,您需要按照准备引导环境中所述在管理员工作站上运行 bmctl register bootstrap 命令。此命令可以创建所需的服务账号,使其具有创建管理员集群所需的最低要求的 IAM 权限。 如果您愿意,可以手动配置服务账号

规划 IP 地址

在创建管理员集群之前,您需要为集群规划 IP 地址。请参阅规划 IP 地址,以查看如何为高可用性 (HA) 管理员集群和两个高可用性用户集群分配 IP 地址的示例。即使您要使用 gcloud CLI 创建管理员集群,也建议您按照本部分中的控制台步骤来使用 IP 地址规划器。

准备引导环境

在创建管理员集群之前,您需要在管理员工作站上运行 bmctl register bootstrap 命令。此命令会在管理员工作站上部署 Kubernetes in Docker(种类)集群。此引导集群托管创建管理员集群所需的 Kubernetes 控制器。创建管理员集群时,引导集群上的控制器会预配节点、运行预检检查,并将管理员集群注册到舰队。成功创建管理员集群后,系统会自动删除引导集群。

控制台

  1. 输入管理员集群的名称。请注意,引导集群名称来源于在管理员集群名称前面加上 bootstrap-bootstrap-

  2. 为管理员集群选择 GKE on Bare Metal 版本。

  3. Google Cloud API 位置字段中,从列表中选择 Google Cloud 区域。此设置指定 Anthos On-Prem API 在其中运行的区域,以及在其中存储以下各项的区域:

    • Anthos On-Prem API 管理集群生命周期所需的集群元数据
    • 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
    • Cloud Audit Logs 创建的管理员审核日志

    集群名称、项目和位置唯一标识 Google Cloud 中的集群。

  4. 控制台会显示您需要在管理员工作站上运行的命令。bmctl 命令行工具必须与您要创建的集群的版本匹配。如果您已将适用的 bmctl 版本下载到管理员工作站,则无需再次下载。

gcloud CLI

  1. 确保您拥有最新版本的 gcloud CLI,包括 gcloud CLI Beta 版组件

  2. 如果您还没有 Beta 版组件,请运行以下命令进行安装:

    gcloud components install beta
    
  3. 根据需要更新 gcloud CLI 组件:

    gcloud components update
    
  4. 运行以下命令以使用您的 Google 账号登录:

    gcloud auth login
    
  5. 列出您可以安装的可用 GKE on Bare Metal 版本。您为了创建引导环境而下载的 bmctl 版本必须与在管理员集群上安装的版本匹配。

    gcloud container bare-metal admin-clusters query-version-config \
      --location=REGION
    

    REGION 替换为 Anthos On-Prem API 在其中运行的 Google Cloud 区域。请指定 us-west1 或其他受支持的区域

创建引导集群

在管理员工作站上执行以下步骤。相关命令会显示在控制台中。

  1. 将您的用户凭据设置为应用默认凭据 (ADC):

    gcloud auth application-default login
    

    按照提示为 ADC 选择 Google 账号。

  2. 如果需要,将 bmctl 命令行工具下载到当前工作目录。

    gsutil cp gs://anthos-baremetal-release/bmctl/VERSION/linux-amd64/bmctl .
    chmod a+x ./bmctl
    

    VERSION 替换为您要安装的 GKE on Bare Metal 版本。如果您从控制台复制了该命令,则该命令中已存在此版本。

  3. 创建引导集群。您可以让 bmctl 创建所需的服务账号 (SA),也可以自行创建服务账号和密钥文件并将其传递给 bmctl register bootstrap 命令。

bmctl 创建 SA

如果您希望 bmctl 创建所需的服务账号,使其具有创建管理员集群所需的最低要求的权限,请使用以下命令。此命令假设 bmctl 位于当前工作目录中。

./bmctl register bootstrap \
  --ssh-key=YOUR_PRIVATE_KEY \
  --name=bootstrap-ADMIN_CLUSTER_NAME \
  --project-id=FLEET_HOST_PROJECT_ID

替换以下内容:

如果您复制了控制台中显示的命令,则表示系统已为您填写以下字段。

  • ADMIN_CLUSTER_NAME:管理员集群的名称。 引导集群名称的格式必须为 bootstrap-ADMIN_CLUSTER_NAME

  • FLEET_HOST_PROJECT_ID:管理员集群在创建后自动注册到的项目。

bmctl register bootstrap 命令用于创建以下服务账号。 服务账号密钥存储在 bmctl-workspace/.sa-keys 目录中。

服务账号 用途 IAM 角色
anthos-baremetal-gcr Anthos on Bare Metal 使用此服务账号从 Google Container Registry 下载容器映像。
anthos-baremetal-connect Connect Agent 使用此服务账号来维护集群与 Google Cloud 之间的连接 roles/gkehub.connect
anthos-baremetal-register Connect Agent 使用此服务账号将集群注册到 Google Cloud 舰队。 roles/gkehub.admin
anthos-baremetal-cloud-ops Stackdriver Agent 使用此服务账号将日志和指标从集群导出到 Cloud Logging 和 Cloud Monitoring。 roles/logging.logWriter
roles/monitoring.metricWriter
roles/stackdriver.resourceMetadata.writer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/monitoring.dashboardEditor

指定 SA 密钥文件

如果您愿意,可以传递您创建的服务账号密钥文件 bmctl。以下命令使用手动配置服务账号中的密钥文件名,并假设 bmctl 和密钥文件位于当前工作目录中。

./bmctl register bootstrap \
  --ssh-key=YOUR_PRIVATE_KEY \
  --name=bootstrap-ADMIN_CLUSTER_NAME \
  --project-id=FLEET_HOST_PROJECT_ID \
  --gcr-service-account-key=anthos-baremetal-gcr.json \
  --gke-agent-service-account-key=connect-agent.json \
  --gke-register-service-account-key=connect-register.json \
  --cloud-operation-service-account-key=anthos-baremetal-cloud-ops.json

替换以下内容:

  • YOUR_PRIVATE_KEY:SSH 私钥的路径。您在设置对节点的 SSH 根访问权限时创建了 SSH 密钥。

  • ADMIN_CLUSTER_NAME:管理员集群的名称。 引导集群名称的格式必须为 bootstrap-ADMIN_CLUSTER_NAME

  • FLEET_HOST_PROJECT_ID:管理员集群在创建后自动注册到的项目。

以下标志用于指定密钥文件的路径:

  • -gcr-service-account-key:用于拉取容器映像的服务账号 (anthos-baremetal-gcr) 的密钥文件的路径。

  • --gke-agent-service-account-key:Connect Agent 服务账号 (anthos-baremetal-connect) 的密钥文件的路径。

  • --gke-register-service-account-key:用于将集群注册到舰队的 Connect Agent 服务账号 (anthos-baremetal-register) 的密钥文件的路径。

  • --cloud-operation-service-account-key:用于审核日志和监控项目的服务账号 (anthos-baremetal-cloud-ops) 的密钥文件的路径。

bmctl 成功创建引导集群后,您会看到如下所示的输出:

[2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
[2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
[2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..

创建管理员集群

控制台

  1. 安装引导环境页面上,点击检查连接

    成功后,控制台会显示 已建立连接

    您必须先建立与引导集群的连接,然后才能继续操作。如果连接未建立,请检查您为 bmctl register bootstrap 命令指定的参数:

    • 确保 --name 的值与引导环境基本信息部分中显示的派生的引导集群名称匹配。

    • 确保 --project-id 的值与您在控制台中选择的项目的 ID 匹配。

    如果您需要更改引导集群名称或项目 ID,请输入 Ctrl-C 退出 bmctl register bootstrap,然后重新运行该命令。

  2. 点击下一步,开始配置管理员集群。控制台中的大多数设置都对应于集群配置文件中的字段。

  3. 节点配置下的每个节点的最大 Pod 数量中,输入一个介于 64 到 250 之间的值,或接受默认值 110。创建集群后,您将无法更新此值。

    每个节点的最大 Pod 数量(称为 Pod 密度)还受集群的可用 IP 资源的限制。如需了解详情,请参阅 Pod 网络

  4. 点击下一步

  5. 网络页面上,定义集群中的节点和组件相互通信的方式以及与 Kubernetes 控制平面通信的方式。

    如需了解详情,请将指针悬停在每个字段旁边的 上。

  6. 点击验证并创建

    控制台会在验证设置并在数据中心内创建集群时显示状态消息。

    如果配置出现问题,控制台将显示一条错误消息,该消息应该足够清晰,以便您修复配置问题并再次尝试创建集群。

gcloud CLI

在创建管理员集群之前,请确认引导集群已注册为舰队成员:

gcloud container fleet memberships list \
  --project=FLEET_HOST_PROJECT_ID

如果引导集群未列出,请检查您为 bmctl register bootstrap 指定的引导集群名称和项目 ID。如果您需要更改引导集群名称或项目 ID,请输入 Ctrl-C 退出 bmctl register bootstrap,然后重新运行该命令。

使用以下命令创建管理员集群:

gcloud container bare-metal admin-clusters create

您为该命令指定的大多数标志都对应于用户集群配置文件中的字段。

如需创建具有捆绑式负载均衡器的管理员集群,请使用以下命令:

gcloud container bare-metal admin-clusters create ADMIN_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=REGION \
  --version=VERSION \
  --max-pods-per-node=MAX_PODS_PER_NODE \
  --control-plane-vip=CONTROL_PLANE_VIP \
  --control-plane-load-balancer-port=CONTROL_PLANE_LOAD_BALANCER_PORT \
  --control-plane-node-configs 'CONTROL_PLANE_NODE_CONFIG' \
  --island-mode-service-address-cidr-blocks=SERVICE_ADDR_CIDR \
  --island-mode-pod-address-cidr-blocks=POD_ADDR_CIDR \
  --lvp-share-path=/mnt/localpv-share \
  --lvp-share-storage-class=local-shared \
  --lvp-node-mounts-config-path=/mnt/localpv-disk \
  --lvp-node-mounts-config-storage-class=local-disks

如果您要使用手动负载均衡,请在该命令中添加 --enable-manual-lb

替换以下内容:

  • ADMIN_CLUSTER_NAME:管理员集群的名称。 创建集群后,此名称便无法更改。

  • FLEET_HOST_PROJECT_ID:管理员集群在创建后自动注册到的项目。集群创建后,舰队宿主项目便无法更改。

  • REGION:Anthos On-Prem API 在其中运行的 Google Cloud 区域。请指定 us-west1 或其他受支持的区域。 创建集群后,此区域便无法更改。此设置指定在其中存储以下各项的区域:

    • Anthos On-Prem API 管理集群生命周期所需的集群元数据
    • 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
    • Cloud Audit Logs 创建的管理员审核日志

    集群名称、项目和位置唯一标识 Google Cloud 中的集群。

  • VERSION:GKE on Bare Metal 版本。此版本必须与用于运行 bmctl register bootstrapbmctl 版本匹配。您可以通过在管理员工作站上运行 bmctl version 来检查 bmctl 版本。

  • MAX_PODS_PER_NODE :对于管理员集群,允许的值为 32-250 和 64-250(非 HA 集群)。如果命令中不包含 --max-pods-per-node,则默认值为 110。创建集群后,此值便无法更新。

    每个节点的最大 Pod 数量(称为 Pod 密度)还受集群的可用 IP 资源的限制。如需了解详情,请参阅 Pod 网络

  • CONTROL_PLANE_VIP:集群 Kubernetes API 服务器的负载均衡器上的虚拟 IP (VIP)。在负载均衡器节点所在的子网中包含控制平面 VIP。不要在负载均衡器地址池中包含控制平面 VIP。

  • CONTROL_PLANE_LOAD_BALANCER_PORT:负载均衡器通过其为控制平面提供服务的端口。虽然您可以配置其他值,但端口 443 是用于 HTTPS 连接的标准端口。

  • CONTROL_PLANE_NODE_CONFIG:控制平面节点的 IPv4 地址。控制平面节点用于运行系统工作负载。请为每个控制平面节点指定此标志。通常,如果使用最简部署,则有一台机器;如果使用高可用性 (HA) 部署,则有三台机器。请指定奇数个节点,以通过多数仲裁实现高可用性。每当您更新或升级集群时都可以更改这些地址。

    该标志的值采用以下格式:

    'node-ip=CP_IP_ADDRESS_1,labels=CP_KEY_1.1=CP_VALUE_1.1;CP_KEY_1.2=CP_VALUE_1.2;...' \
    

    该值的细分以关键字 node-iplabels 开头;每个细分之间用英文逗号分隔。

    • node-ip:控制平面节点的 IP 地址。您只能为每个标志指定一个 node-ip。如果您需要指定多个节点,请分别为每个节点添加该标志。

    • labels:关联到节点的一个或多个键值对。

    请注意以下语法规则:

    • 用英文单引号将整个值括起来。
    • 不允许使用空格。
    • 使用英文分号分隔 labels 细分中的每个键值对。

    例如:

    --control-plane-node-configs 'node-ip=192.0.2.1' \
    --control-plane-node-configs 'node-ip=192.0.2.2,labels=key2.1=value2.1' \
    --control-plane-node-configs 'node-ip=192.0.2.3,labels=key3.1=value3.1;key3.2=value3.2' \
    
  • SERVICE_ADDR_CIDR:集群中 Service 的 IPv4 地址范围(采用 CIDR 格式)。CIDR 范围必须介于 /24 和 /12 之间,其中 /12 提供的 IP 地址最多。我们建议您按照 RFC 1918 中所定义,将此 IP 地址空间中的范围用于专用互联网,例如 10.96.0.0/20

  • POD_ADDR_CIDR:用于用户集群中 Pod 的 IPv4 地址范围(采用 CIDR 格式)。CIDR 范围必须介于 /18 和 /8 之间,其中 /8 提供的 IP 地址最多。我们建议您按照 RFC 1918 中所定义,将此 IP 地址空间中的范围用于专用互联网,例如 192.168.0.0/16

您必须指定以下存储标志。示例命令包括典型值。如需了解详情,请参阅配置本地存储

  • --lvp-share-path:这是可以在其中创建子目录的宿主机路径。系统会为每个子目录创建一个本地 PersistentVolume (PV)。

  • --lvp-share-storage-class:这是用于创建永久性卷的 StorageClass。StorageClass 在创建集群期间创建。

  • --lvp-node-mounts-config-path:这是可以在其中发现已装载磁盘的宿主机路径。系统会为每个装载创建一个本地 PersistentVolume (PV)。

  • --lvp-node-mounts-config-storage:在创建集群的过程中创建 PV 的存储类别。

如需查看标志及其说明的完整列表,请参阅 gcloud CLI 参考文档

此命令的输出类似如下所示:

Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.

在示例输出中,字符串 operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 是长时间运行的操作的 OPERATION_ID。您可以使用以下命令了解该操作的状态:

gcloud container bare-metal operations describe OPERATION_ID \
  --project=FLEET_HOST_PROJECT_ID \
  --location=REGION

如需了解详情,请参阅 gcloud container bare-metal operations

修复预检错误

在创建集群之前,bmctl 会运行一系列预检检查以验证配置。如果配置存在问题,gcloud ... create 命令会退出,并显示如下所示的错误:

ERROR: (gcloud.beta.container.bare-metal.admin-clusters.create) Invalid resource state for "projects/694677185633/locations/us-west1/bareMetalAdminClusters/abm-cluster-1": cluster preflight checks failed

例如,假设由于无法访问控制平面节点,预检检查失败。在管理员工作站上,您将看到如下所示的内容:

[2023-03-27 20:34:38+0000] Waiting for preflight check job to finish... OK
[2023-03-27 20:35:58+0000] - Validation Category: machines and network
[2023-03-27 20:35:58+0000]    - [PASSED] pod-cidr
[2023-03-27 20:35:58+0000]    - [FAILED] node-network (log: bmctl-workspace/log/register-bootstrap-20230327-201548/node-network)
[2023-03-27 20:35:58+0000]        - Failed to connect to the host via ssh: ssh: connect to host 10.100.0.5 port 22: Connection timed out
[2023-03-27 20:35:58+0000] Flushing logs... OK
[2023-03-27 20:35:58+0000] Error polling the preflight check abm-cluster-mar-27 in the cluster-abm-cluster-mar-27: preflight check failed
  1. 在管理员工作站上,确保 bmctl register bootstrap 进程仍在运行。如果未运行,请使用相同的参数重新运行该命令并添加 --reuse-bootstrap-cluster=true 标志。

  2. 运行 gcloud ... update 以修复无效 IP 地址:

    gcloud container bare-metal admin-clusters update ADMIN_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=REGION \
      --control-plane-node-configs 'node-ip=NEW_NODE_ID_ADDRESS'
    

    如需了解详情,请参阅 gcloud container bare-metal admin-clusters update

有关集群创建过程的详细信息会输出到管理员工作站。如果预检检查通过,您会看到如下所示的内容:

[2023-03-22 23:12:47+0000] Waiting for cluster kubeconfig to become ready OK
[2023-03-22 23:15:47+0000] Writing kubeconfig file
[2023-03-22 23:15:47+0000] kubeconfig of cluster being created is present at bmctl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig
[2023-03-22 23:15:47+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2023-03-22 23:15:47+0000] Waiting for cluster to become ready OK
[2023-03-22 23:20:17+0000] Please run
[2023-03-22 23:20:17+0000] kubectl --kubeconfig bmctl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig get nodes
[2023-03-22 23:20:17+0000] to get cluster nodes status.
[2023-03-22 23:20:17+0000] Waiting for node pools to become ready OK
[2023-03-22 23:20:37+0000] Waiting for metrics to become ready in GCP OK
[2023-03-22 23:25:38+0000] Waiting for cluster API provider to install in the created admin cluster OK
[2023-03-22 23:25:48+0000] Moving admin cluster resources to the created admin cluster
[2023-03-22 23:25:51+0000] Waiting for node update jobs to finish OK
[2023-03-22 23:27:41+0000] Flushing logs... OK
[2023-03-22 23:27:41+0000] Deleting membership... OK
[2023-03-22 23:27:42+0000] Deleting bootstrap cluster.

连接到管理员集群

bmctl register bootstrap 命令会为管理员工作站上的管理员集群创建 kubeconfig 文件。kubeconfig 所在的目录和文件名基于管理员集群名称,如下所示:

bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

您需要限制对此 kubeconfig 的访问权限,因为它包含集群的身份验证凭据。

如果要使用 Google 身份登录集群,则可以按如下方式设置 Connect 网关:

  1. 在管理员工作站上,设置 KUBECONFIG 环境变量:

    export KUBECONFIG=$HOME/bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
    
  2. 在环境变量中设置当前上下文:

    export CONTEXT="$(kubectl config current-context)"
    
  3. 运行以下 gcloud 命令。此命令执行以下操作:

    • 为您的用户账号授予集群上的 Kubernetes clusterrole/view 角色。
    • 配置集群,以便在本地计算机上运行只读 kubectl 命令,而无需通过 SSH 连接到管理员工作站。

    GOOGLE_ACCOUNT_EMAIL 替换为与您的 Google Cloud 账号关联的电子邮件地址。例如:--users=alex@example.com

    gcloud container fleet memberships generate-gateway-rbac  \
        --membership=ADMIN_CLUSTER_NAME \
        --role=clusterrole/view \
        --users=GOOGLE_ACCOUNT_EMAIL \
        --project=FLEET_HOST_PROJECT_ID \
        --kubeconfig=$KUBECONFIG \
        --context=$CONTEXT\
        --apply
    

    此命令的输出类似于以下内容,为了便于阅读,已将其截断:

    Validating input arguments.
    Specified Cluster Role is: clusterrole/view
    Generated RBAC policy is:
    --------------------------------------------
    ...
    
    Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
    Successfully applied the RBAC policy to cluster.
    

相应 RBAC 政策落实到位后,您可以使用 Google 身份从控制台登录集群。此外,您还可以使用特殊 kubeconfig 以通过 Connect 网关路由请求,在管理员工作站以外的计算机上运行只读 kubectl 命令。

  1. 在管理员工作站以外的计算机上运行以下命令,以获取可通过 Connect 网关访问集群的 kubeconfig 条目。

    gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME \
        --project=FLEET_HOST_PROJECT_ID
    

    输出类似于以下内容:

    Starting to build Gateway kubeconfig...
    Current project_id: FLEET_HOST_PROJECT_ID
    A new kubeconfig entry "connectgateway_FLEET_HOST_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.
    
  2. 您现在可以通过 Connect 网关运行 kubectl 命令:

    kubectl get pods -A
    

后续步骤