通过 Google Cloud 控制台管理集群

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

舰队成员和控制台

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

在 GKE on VMware 中,通过在集群配置文件的 gkeConnect 部分中指定舰队宿主项目,管理员集群会在创建时注册到舰队。GKE on VMware 会使用该信息将集群注册到指定的舰队项目。如果注册失败,您可以通过运行 gkectl update credentials register 来重新尝试注册。

请注意,在重新尝试注册时,您无需更新连接注册服务账号密钥。换句话说,您可以继续使用原来的连接注册服务账号。如需详细了解该命令,请参阅轮替服务账号密钥

在 GKE on VMware 中,用户集群在创建时注册到舰队:

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

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

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

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

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

查看已注册的集群

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

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

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

    进入 GKE Enterprise 集群页面

  2. 选择 Google Cloud 项目。

    • 如果类型列中显示 vm Anthos (VMware),则表示集群由 Anthos On-Prem API 管理。

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

    GKE Enterprise 集群列表

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

设置身份验证

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

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

    使用 Google 身份登录是控制台中较简单的身份验证方法,尤其是在需要最少安装的情况下试用 GKE on VMware 时,因此我们将在下面的设置 Google 身份验证中详细介绍如何设置。

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

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

授予必需的角色

对控制台的访问权限由 Google Cloud IAM 控制。无论您选择哪种身份验证方法,都需要这些 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 FLEET_HOST_PROJECT_ID \
    --member=MEMBER \
    --role=roles/container.viewer

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

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

其中:

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

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

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

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

设置 Google 身份的身份验证

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

配置 RBAC 授权

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

如果您在控制台中创建了集群,然后使用 gcloud 配置 RBAC 政策,则集群详细信息部分中将不显示用户电子邮件地址。

gcloud CLI

  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=FLEET_HOST_PROJECT_ID \
        --kubeconfig=KUBECONFIG_PATH \
        --context=KUBECONFIG_CONTEXT \
        --apply
    

    替换以下内容:

    • MEMBERSHIP_NAME:用于在集群的舰队中唯一表示该集群的名称。在 GKE on VMware 中,成员资格名称和集群名称相同。
    • ROLE:您要授予集群上用户的 Kubernetes 角色。如需向用户授予对所有命名空间中每个资源的完整访问权限,请指定 clusterrole/cluster-admin。如需限制访问权限,请创建自定义角色,例如:role/mynamespace/namespace-reader。自定义角色必须已存在,然后才能运行该命令。
    • USERS:要向其授予权限的用户(用户账号或服务账号)的电子邮件地址(以逗号分隔的列表)。例如:--users=foo@example.com,test-acct@test-project.iam.gserviceaccount.com
    • FLEET_HOST_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 参考指南

控制台

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

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

    进入 GKE Enterprise 集群页面

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

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

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

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

更多信息