通过 Google Cloud 控制台管理集群

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

舰队成员和控制台

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

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

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

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

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

  • 使用标准工具(控制台、Google Cloud CLI 或 Terraform)创建用户集群时,该集群会自动成为您指定的项目中的舰队成员。

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

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

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

查看已注册的集群

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

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

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

    转到 GKE 集群

  2. 选择 Google Cloud 项目。

    • 如果类型列中显示 vm Google Distributed Cloud(虚拟机 Google Distributed Cloud),则表示集群由 GKE On-Prem API 管理。

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

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

设置身份验证

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

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

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

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

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

授予必需的角色

对控制台的访问权限由 Identity and Access Management (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 角色为用户授予 GKE 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

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

使用标准工具(控制台、gcloud CLI 或 Terraform)创建的用户集群会自动在 GKE On-Prem API 中注册,让您可以在控制台中执行集群生命周期管理任务。如果要为使用 gkectl 创建的用户集群启用此功能,请按照配置由 GKE On-Prem API 管理的用户集群中的步骤执行操作。启用集群生命周期管理后,您可以通过控制台执行以下任务:

设置 Google 身份的身份验证

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

配置 RBAC 授权

每个集群的 Kubernetes API 服务器都需要能够为来自控制台的请求授权。如需配置授权,您需要在每个集群上配置 Kubernetes 基于角色的访问控制 (RBAC) 政策。

如果您使用标准工具创建了用户集群,则您可能已经获得适当的 RBAC 政策,以授予您对集群的完整管理员权限。在以下情况下,GKE On-Prem API 会自动将您的 Google 账号添加为管理员:

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

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

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

使用 gkectl 创建的用户集群不会授予您使用控制台管理集群的 RBAC 政策。您需要在创建集群后添加您自己。无论您使用哪个工具创建集群,您都可以在创建集群后将其他人添加为管理员。

您可以使用以下任一方法授予集群的管理员权限。提供了两个不同的 gcloud 命令。

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

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

generate-gateway-rbac

  1. 连接到管理员工作站。

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

    gcloud components update
    
  3. 为用户和服务账号生成 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:用于在集群的舰队中唯一表示该集群的名称。在 Google Distributed Cloud 中,成员资格名称和集群名称相同。
    • ROLE:您要授予集群上用户的 Kubernetes 角色。如需向用户授予对所有命名空间中每个资源的完整访问权限,请指定 clusterrole/cluster-admin。如需提供只读权限,请指定 clusterrole/view。您还可以创建自定义角色,例如: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 参考指南

update

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

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

    gcloud container vmware clusters update USER_CLUSTER_NAME \
      --admin-users YOUR_GOOGLE_ACCOUNT \
      --admin-users ADMIN_GOOGLE_ACCOUNT_1 \
    

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

控制台

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

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

    转到 GKE 集群

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

  3. 在集群列表中,点击集群名称以显示其详细信息。

  4. 授权部分中,点击管理员用户修改按钮。

  5. 修改授权面板中,输入您要添加为集群管理员的用户的电子邮件地址。如需添加其他管理员用户,请点击添加管理员用户

  6. 添加完用户后,点击保存更改

更多信息