通过 Google Cloud 控制台管理集群

本文档介绍了如何在 Google Cloud 控制台中允许管理 Google Distributed Cloud。这包括基本管理,例如能够登录集群和查看其工作负载,以及如何启用集群生命周期管理以升级、更新和删除集群。

舰队成员和控制台

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

在 Google Distributed Cloud 中,用户集群会在创建时注册到舰队:

  • 使用 bmctl 创建集群时,您可以在集群配置文件的 gkeConnect 部分中指定舰队宿主项目。Google Distributed Cloud 会使用该信息将集群注册到指定的舰队项目。

  • 在控制台中创建用户集群时,该集群会自动成为控制台中所选项目中的舰队成员。

Google Cloud 之外的舰队成员(例如 Google Distributed Cloud)连同其他舰队集群(如 GKE on Google Cloud)显示在控制台中的舰队宿主项目中。您可以从控制台管理 Google Distributed Cloud 的范围取决于以下因素:

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

  • 如果您为集群启用了集群生命周期管理,则还可以使用控制台升级、更新或删除用户集群。为此,集群必须由名为 GKE On-Prem API 的服务管理。对于在控制台中创建的用户集群,集群生命周期管理会在集群创建时启用,您也可以稍后为使用 bmctl 创建的用户集群启用此功能。如果未启用此功能,则只能在管理员工作站上使用 bmctl 管理集群生命周期。

查看已注册的集群

所有舰队集群都会显示在控制台的 GKE 集群页面上。这让您可以大致了解整个舰队,而对于 Google Distributed Cloud,还可以了解哪些集群由 GKE On-Prem API 管理。

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

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

    转到 GKE 集群

  2. 选择 Google Cloud 项目。

    • 如果类型列中显示裸金属,则表示集群由 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 服务帐号设置身份验证,并使用其不记名令牌登录。如需了解详情,请参阅使用不记名令牌设置

授予必需的角色

对控制台的访问权限由 Google Cloud 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

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

在控制台中创建的用户集群由 GKE On-Prem API 自动管理,让您可以在控制台中执行集群生命周期管理任务。如果要为使用 bmctl 创建的用户集群启用此功能,请按照配置由 GKE On-Prem API 管理的用户集群中的步骤执行操作。启用集群生命周期管理后,您可以通过控制台更新集群:

  • 更新用户集群
  • 在用户集群上添加或移除节点池
  • 删除用户集群

设置 Google 身份的身份验证

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

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

  • 使用 Connect Agent 时,需要将用户添加到连接网关访问集群 Kubernetes API 服务器所需的 Kubernetes 基于角色的访问权限控制 (RBAC) 政策。

配置 RBAC 授权

每个集群的 Kubernetes API 服务器都需要能够为来自控制台的请求授权。如需配置授权,您需要在每个集群上配置 Kubernetes 基于角色的访问权限控制 (RBAC) 政策。如果您在控制台中创建了集群,则 GKE On-Prem API 会将您的用户账号添加为管理员,并创建适当的 RBAC 政策以向您授予集群的完全管理员权限。

gcloud CLI

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

  1. 运行以下命令,使用您的 Google 帐号登录并更新组件:

    gcloud auth login
    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。如需限制访问权限,请创建自定义角色,例如:role/mynamespace/namespace-reader。自定义角色必须已存在,然后才能运行该命令。
    • USERS:要向其授予权限的用户(用户账号或服务账号)的电子邮件地址(以逗号分隔的列表)。例如:--users=foo@example.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.
    

    这是通过连接网关访问集群的上下文。

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

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 文件的路径。

更多信息