通过 Google Cloud 控制台管理集群

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

舰队成员和控制台

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

在 Anthos clusters on Bare Metal 中,用户集群在创建时向舰队注册:

  • 使用 bmctl 创建集群时,您可以在集群配置文件的 gkeConnect 部分中指定舰队宿主项目。Anthos clusters on Bare Metal 使用该信息向指定的舰队项目注册您的集群。

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

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

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

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

查看已注册的集群

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

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

  1. 在控制台中,转到“Anthos 集群”页面。

    转到“Anthos 集群”页面

  2. 选择 Google Cloud 项目。

    • 如果 Anthos Bare Metal 显示在类型列中,则集群由 Anthos On-Prem API 管理。

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

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

设置身份验证

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

  • 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 角色为用户授予 Anthos 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

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

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

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

设置 Google 身份的身份验证

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

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

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

配置 RBAC 授权

每个集群的 Kubernetes API 服务器都需要能够为来自控制台的请求授权。如需配置授权,您需要在每个集群上配置 Kubernetes 基于角色的访问权限控制 (RBAC) 政策。如果您在控制台中创建了集群,则 Anthos 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:用于在集群的舰队中唯一表示该集群的名称。在 Anthos clusters on Bare Metal 中,成员资格名称和集群名称相同。
    • 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.
    

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

    如需详细了解 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 替换为管理员集群的 kubeconfig 文件的路径。

更多信息