通过 Google Cloud 控制台管理集群

本文档介绍如何实现在 Google Cloud 控制台中管理使用 Google Distributed Cloud on Bare Metal 软件创建的管理员集群和用户集群。集群管理功能包括能够登录集群、查看工作负载、升级、更新和删除集群。

舰队成员和控制台

所有集群都必须是舰队的成员,这是查看和管理多个集群及其工作负载的统一方法。每个集群舰队都与一个舰队宿主项目相关联。

所有集群都会在创建时注册到舰队:

  • 使用 bmctl 创建集群时,您可以在集群配置文件的 gkeConnect 部分中指定舰队宿主项目。集群会成为指定项目的舰队成员。

  • 当您使用标准 GKE On-Prem API 客户端(控制台、Google Cloud CLI 或 Terraform)创建管理员集群或用户集群时,该集群会成为指定项目中的舰队成员。

Google Cloud 之外的舰队成员(例如 Google Distributed Cloud)与其他舰队集群(例如 GKE on Google Cloud)一起显示在舰队宿主项目的控制台中。您可以通过控制台管理裸机集群的程度取决于以下因素:

  • 如果您已设置身份验证,则可以登录集群并查看其工作负载和其他详细信息。

  • 如果您为集群启用了集群生命周期管理,则可以使用控制台升级管理员集群和用户集群,还可以使用控制台更新和删除用户集群。如果未启用此功能,则只能在管理员工作站上使用 bmctl 管理集群生命周期。

查看已注册的集群

所有集群都显示在控制台中的 GKE 集群页面上。两者都概述了整个舰队,对于 Google Distributed Cloud,您可以查看哪些集群由 GKE On-Prem API 管理。

如需查看您的舰队集群,请执行以下操作:

  1. 在控制台中,进入 Google Kubernetes Engine 集群概览页面。

    转到 GKE 集群

  2. 选择 Google Cloud 项目。

    • 如果类型列中显示 Bare Metal,则集群由 GKE On-Prem API 管理。 请注意,只有管理员集群和用户集群可以由 GKE On-Prem API 管理。

    • 如果类型列中显示外部,则表示集群不由 GKE On-Prem API 管理。

如需查看有关集群的更多详情,您需要登录集群并向集群进行身份验证。为此,您需要执行以下步骤:

设置身份验证

如前所述,所有集群都显示在控制台的 GKE 集群页面中。但是,如需查看更多详情,例如节点和工作负载(如果启用了该功能,则执行集群生命周期管理任务),您需要登录集群并向集群进行身份验证。为此,您必须使用以下某种身份验证方法设置您的集群:

  • Google 身份:此选项允许您使用 Google Cloud 身份(即与您的 Google Cloud 账号关联的电子邮件地址)登录。如果用户已有权使用其 Google 身份访问 Google Cloud,请使用此选项。如果您在控制台中创建集群,则可以使用 Google 身份登录集群,但需要为其他用户配置身份验证。

    使用 Google 身份登录是控制台中最简单的身份验证方法,因此我们将在设置 Google 身份验证中详细介绍如何设置。

  • OpenID Connect (OIDC):此选项允许您使用第三方 OIDC 身份提供商(如 Okta 或 Microsoft AD FS)的身份从控制台登录集群。如果您的用户已有提供商的用户名、密码和安全群组成员资格,则建议您使用此选项。您可以使用以下指南为您的集群设置第三方 OIDC 身份验证:

  • 不记名令牌:如果上述 Google 提供的解决方案不适合您的组织,您可以使用 Kubernetes 服务账号及其不记名令牌来设置身份验证以登录。如需了解详情,请参阅使用不记名令牌设置

授予必需的角色

对控制台的访问权限由 Identity and Access Management (IAM) 控制。如需在控制台中管理集群生命周期,您需要向非项目所有者授予一些 IAM 角色:

  • 如需允许用户访问控制台,您至少需要授予以下角色:

    • roles/container.viewer:此角色允许用户在控制台中查看 GKE 集群页面和其他容器资源。 如需详细了解此角色中包含的权限或授予具有读写权限的角色,请参阅 IAM 文档中的 Kubernetes Engine 角色

    • roles/gkehub.viewer:此角色允许用户在控制台中查看 Google Cloud 外部的集群。如需详细了解此角色包含的权限或授予具有读写权限的角色,请参阅 IAM 文档中的 GKE Hub 角色

  • 如需允许用户在控制台中管理集群生命周期,请授予 roles/gkeonprem.admin IAM 角色。roles/gkeonprem.admin 角色为用户授予 GKE On-Prem API 的管理员权限,该控制台用于管理集群生命周期。如需详细了解此角色具备的权限,请参阅IAM 文档中的 GKE On-Prem 角色

以下命令展示了如何授予在控制台中管理集群生命周期所需的最小角色:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=MEMBER \
    --role=roles/container.viewer

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=MEMBER \
    --role=roles/gkehub.viewer

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=MEMBER \
    --role=roles/gkeonprem.admin

其中:

  • PROJECT_ID 是队列宿主项目。对于使用 bmctl 创建的集群,这是您在用户集群配置文件的 gkeConnect 部分中配置的项目。对于在控制台中创建的集群,这是您在创建集群时选择的项目。

  • MEMBER 是用户的电子邮件地址,格式为 user:emailID,例如:user:alice@example.com

在控制台中启用集群生命周期管理

使用标准工具(控制台、gcloud CLI 或 Terraform)创建的管理员集群和用户集群会自动在 GKE On-Prem API 中注册,让您可以在控制台中执行集群生命周期管理任务。在 Google Distributed Cloud 1.16 及更高版本中,当您使用 bmctl 创建用户集群和管理员集群时,这些集群默认会在 GKE On-Prem API 中注册。如果您需要在 GKE On-Prem API 中注册集群,请按照配置要由 GKE On-Prem API 管理的集群中的步骤操作。

设置 Google 身份的身份验证

如需允许用户使用其 Google 身份登录集群,您需要进行以下配置:

  • 用户需要特定的 Identity and Access Management (IAM) 角色才能在控制台的 GKE 集群列表中查看集群并与之交互。

  • 您需要将用户添加到 Connect Gateway 通过 Connect 代理访问集群的 Kubernetes API 服务器所需的 Kubernetes 基于角色的访问权限控制 (RBAC) 政策。

配置 RBAC 授权

每个集群的 Kubernetes API 服务器都需要能够为来自控制台的请求授权。如需配置授权,您需要为每个集群上的用户配置 Kubernetes 基于角色的访问权限控制 (RBAC) 政策。在以下情况下,您的 Google 账号会以管理员身份添加,并拥有对用户群的完全权限:

  • 您已在控制台中创建用户集群。

  • 您使用 gcloud CLI 创建了用户集群,并且在集群创建命令的 --admin-users 标志中指定了您的 Google 账号。

  • 您使用 Terraform 创建了用户集群,并且在 authorization.admin_users.username 字段中指定了您的 Google 账号。

  • 您使用 bmctl 创建了用户集群,并在 clusterSecurity.authorization.clusterAdmin.gcpAccounts 中配置了您的 Google 账号。

您可以在创建集群后将其他用户添加为管理员。您可以使用以下任一方法授予集群的管理员权限。提供了两种不同的 gcloud 命令。

  • gcloud ... generate-gateway-rbac 命令需要在管理员工作站上运行,因为该命令需要访问集群的 kubeconfig 和上下文(通常仅在管理员工作站上)。您可以使用 generate-gateway-rbac 命令自定义 RBAC 政策,但用户电子邮件地址不会在控制台的集群详情部分中显示为管理员。

  • gcloud ... update 命令可以在管理员工作站上运行,也可以在有权访问 GKE On-Prem API 的任何计算机上运行。

请注意,如果您在 Google Cloud 控制台中创建了管理员集群,则会获得对该集群的只读访问权限。如果您想获得 clusterrole/cluster-admin 角色,则需要有人使用 gcloud ... generate-gateway-rbac 命令将您添加到该角色中。

generate-gateway-rbac

如需将 RBAC 政策应用于用户,请在管理员工作站上执行以下步骤:

  1. 运行以下命令以更新组件(如有需要):

    gcloud components update
    
  2. 为用户和服务账号生成 RBAC 政策并将其应用到集群:

    gcloud container fleet memberships generate-gateway-rbac  \
        --membership=MEMBERSHIP_NAME \
        --role=ROLE \
        --users=USERS \
        --project=PROJECT_ID \
        --kubeconfig=KUBECONFIG_PATH \
        --context=KUBECONFIG_CONTEXT \
        --apply
    

    请替换以下内容:

    • MEMBERSHIP_NAME:用于在集群的舰队中唯一表示该集群的名称。在 Google Distributed Cloud 中,成员资格名称和集群名称相同。
    • ROLE:您要授予集群上用户的 Kubernetes 角色。如需向用户授予对所有命名空间中每个资源的完整访问权限,请指定 clusterrole/cluster-admin。如需提供只读访问权限,请指定 clusterrole/view。如需限制访问权限,请创建自定义角色,例如:role/mynamespace/namespace-reader。自定义角色必须已存在,然后才能运行该命令。
    • USERS:要向其授予权限的用户(用户账号或服务账号)的电子邮件地址(以逗号分隔的列表)。例如:--users=222larabrown@gmail.com,test-acct@test-project.iam.gserviceaccount.com
    • PROJECT_ID:舰队宿主项目的 ID。
    • KUBECONFIG_PATH:包含集群条目的 kubeconfig 文件的本地路径。
    • KUBECONFIG_CONTEXT:kubeconfig 文件中显示的集群上下文。您可以通过运行 kubectl config current-context 从命令行获取当前上下文。无论您是否使用当前上下文,都请通过运行类似以下示例的命令来确保它可用于访问集群:

      kubectl get namespaces \
        --kubeconfig=KUBECONFIG_PATH \
        --context=KUBECONFIG_CONTEXT

    运行 gcloud container fleet memberships generate-gateway-rbac 后,您会在输出末尾看到类似以下内容,为了便于阅读,已将其截断:

    Validating input arguments.
    Specified Cluster Role is: clusterrole/cluster-admin
    Generated RBAC policy is:
    --------------------------------------------
    ...
    Applying the generate RBAC policy to cluster with kubeconfig: /usr/local/google/home/foo/.kube/config, context: kind-kind
    Writing RBAC policy for user: foo@example.com to cluster.
    Successfully applied the RBAC policy to cluster.
    

    这是用于通过 Connect Gateway 访问集群的上下文。

    如需详细了解 generate-gateway-rbac 命令,请参阅 gcloud CLI 参考指南

update

  1. 运行以下命令以更新组件:

    gcloud components update
    
  2. 对于需要授予 clusterrole/cluster-admin 角色的每个用户,请添加 --admin-users 标记并运行以下命令。您无法在单个标志中指定多个用户。请务必在命令中添加您的 Google 账号,因为该命令会使用您在命令中指定的用户覆盖授权列表。

    gcloud container bare-metal clusters update USER_CLUSTER_NAME \
      --admin-users YOUR_GOOGLE_ACCOUNT \
      --admin-users ADMIN_GOOGLE_ACCOUNT_1 \
    

除了授予 Kubernetes clusterrole/cluster-admin 角色之外,该命令还会授予用户通过 Connect Gateway 访问集群所需的 RBAC 政策。

bmctl

如需将 RBAC 政策应用于用户,请在管理员工作站上执行以下步骤:

  1. clusterSecurity.authorization 部分添加到集群配置文件。指定您的电子邮件地址和需要管理集群的其他用户的电子邮件地址。例如:

    ...
    clusterSecurity:
      authorization:
        clusterAdmin:
          gcpAccounts: [alex@example.com,hao@example.com,sasha@example.com]
    ...
    
  2. 更新集群:

    bmctl update cluster \
        -c CLUSTER_NAME \
        --kubeconfig=KUBECONFIG
    

    进行以下更改:

    • CLUSTER_NAME 替换为要更新的集群的名称。
    • 如果集群是自行管理的集群(例如管理员集群或独立集群),请将 KUBECONFIG 替换为该集群的 kubeconfig 文件的路径。如果集群是用户集群,请将 KUBECONFIG 替换为admin集群的 kubeconfig 文件的路径。

控制台

如需将 RBAC 政策应用于用户,请在控制台中执行以下步骤:

  1. 在控制台中,进入 Google Kubernetes Engine 集群概览页面。

    转到 GKE 集群

  2. 选择用户集群所在的 Google Cloud 项目。

  3. 在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息

  4. 授权部分中,点击管理员用户字段,然后输入每个用户的电子邮件地址。

  5. 添加完用户后,点击完成

更多信息