管理舰队级功能

舰队可让您同时跨多个集群管理企业和其他支持舰队的功能。例如,您可以应用一组通用的政策,或者跨舰队中的集群创建单个服务网格。本页面简要介绍如何管理舰队的功能。如需详细了解如何配置和使用各项功能,请参阅相关文档。

如果您已启用 Google Kubernetes Engine (GKE) Enterprise 版本,则可以在 Google Cloud 控制台中管理功能。所有舰队用户都可以使用命令行管理功能。

某些功能可让您为舰队集群创建舰队级默认功能配置。例如,您可以确保在舰队中创建的每个集群都安装并配置了 Policy Controller。舰队级默认配置仅适用于启用了 GKE Enterprise 的用户。

您可以参阅功能授权部分,详细了解集群上的舰队级功能管理在后台的工作原理。

舰队级功能

您可以在舰队级层管理以下功能:

此列表并未包含使用或需要舰队的所有功能。例如,舰队工作负载身份联合要求集群是舰队成员,但不需要在舰队级进行配置,而 Cloud Service Mesh 对所有控制平面和设置选项都要求舰队成员资格。

如果您启用了 GKE Enterprise,则可以使用所有这些功能,而无需支付额外费用。如果您使用的是 GKE Standard 层级,则可以单独付费使用其中的部分功能。如需详细了解哪些功能在哪些环境中可用,请参阅部署选项页面。

设置舰队级功能

以下部分介绍如何启用和配置舰队级功能。

如需使用舰队级功能,在大多数情况下,您可以为舰队启用该功能,并为舰队成员配置该功能。如需将功能实际用于集群和工作负载,通常需要进行一些配置(或其他额外设置)。

如果您启用了 GKE Enterprise,则可以为某些功能创建舰队默认集群配置,这意味着您在舰队中创建的任何新企业级集群都将采用为已配置的功能指定的设置。如需实现其他功能,或者如果您未使用企业层级,则必须在每个单独的集群上配置该功能。

使用舰队级默认设置启用功能

借助 GKE Enterprise,您可以为 GKE 集群创建舰队级默认设置,以实现某些功能。创建这些设置后,您注册到企业级别并在集群创建期间注册的任何 GKE 集群都会自动配置舰队级配置。例如,如果您为 Policy Controller 设置了默认值,则您在舰队中创建的每个新集群都将安装您指定版本的 Policy Controller 以及采用指定的政策包和其他设置。舰队默认设置不会自动应用于现有舰队成员集群,但您可以使用 Google Cloud 控制台将现有集群同步默认设置。

使用舰队级默认设置启用功能的一般过程如下所示:

控制台

  1. 在舰队宿主项目中,前往 Feature Manager 页面:

    前往 Feature Manager

    舰队级功能管理下列出了支持使用 Google Cloud 控制台配置舰队级默认设置的功能。

  2. 对于您选择的功能,请点击配置,然后按照说明为该功能启用和配置默认设置。

  3. 可选:选择舰队中的现有集群并将其同步新设置。

gcloud

  1. 创建一个 YAML 文件,指定您为该功能选择的舰队默认值。
  2. 针对该功能运行 enable 命令,并向其传递您的配置文件。每个舰队级功能都有自己的 enable 命令。 例如,如需使用 mesh.yaml 中指定的默认配置为舰队启用 Cloud Service Mesh,请在舰队宿主项目中运行以下命令:

    gcloud container fleet mesh enable --fleet-default-member-config mesh.yaml
    

或者,对于某些功能,您可以使用 fleet createfleet update 命令的参数指定舰队默认值。如需了解详情,请参阅所选功能的指南。

Terraform

使用指定您选择的舰队默认值的 fleet_default_member_config 块定义 google_gke_hub_feature 资源。如需了解详情和支持的舰队功能,请参阅 Terraform 文档

并非所有功能都支持使用所有这些选项的舰队默认配置。如需详细了解如何为每种支持的功能设置舰队默认值,请参阅以下文档:

在单个集群上启用和配置舰队功能

作为舰队默认配置的替代方案,您可以选择在单个集群上单独配置舰队功能。如果您符合以下条件,这可能是一个不错的选择:

  • 您未启用 GKE Enterprise。
  • 您希望将现有集群配置为使用某项功能。
  • 在您想要使用的服务中,舰队默认配置不可用或在使用所选工具时不可用。

启用功能

请注意,并非所有功能都需要执行此步骤。如需了解详情,请参阅所选功能的指南。

控制台

如果您启用了 GKE Enterprise,则可以通过 Google Cloud 控制台的 Feature Manager 页面启用功能。

要为舰队启用某项功能,请执行以下操作:

  1. 在舰队宿主项目中,前往 Feature Manager 页面:

    前往 Feature Manager

    管理其他企业级功能下列出了可通过此页面启用但未配置的功能。

  2. 点击要启用的功能所在面板中的启用

  3. 在显示的详情面板中点击启用...按钮。

gcloud

每个舰队级功能都有自己的 enable 命令。例如,如需为舰队启用 GKE Identity Service,请在舰队宿主项目中运行以下命令:

gcloud container fleet identity-service enable

如需查看完整的命令列表,请参阅 Google Cloud SDK 参考文档(以及对应的 Beta 版Alpha 版文档),或查看各个功能的文档集了解详情。

如需了解如何检查某项功能是否已启用并查看其他功能状态,请参阅查看舰队功能状态

配置单个集群

您执行的配置步骤取决于具体的功能。如需了解详情,请参阅以下指南:

查看舰队功能状态

如果您启用了 GKE Enterprise,则查看舰队功能状态的最简单方法是使用 Google Cloud 控制台中的 Feature Manager 信息中心。

前往 Feature Manager

对于受支持的功能,此页面显示有多少个舰队集群具有以下状态:

  • 已启用此功能
  • 已成功启用此功能
  • 此功能存在警告
  • 此功能存在错误

您还可以查看是否已为该功能配置舰队默认设置,以及有多少舰队成员集群具有这些设置。对于已启用的功能,您可以点击进入详情页面,其中列出了使用该功能的集群;如果已配置,则您可以选择集群并将其同步舰队默认设置。

对于无法使用此页面配置的功能(在管理其他企业级功能下列出),您可以查看您的舰队是否已启用该功能,并查看显示详细信息面板,其中显示了已安装该功能的集群数和其他相关信息。

使用 gcloud 查看功能状态

gcloud

运行以下命令以列出启用的所有功能:

gcloud container fleet features list

停用舰队级功能

如需在舰队级层停用某项功能,请在舰队宿主项目中执行以下操作。

控制台

只能通过 Google Cloud 控制台停用管理其他企业级功能下列出的舰队功能。

  1. 在舰队宿主项目中,前往 Feature Manager 页面:

    前往 Feature Manager

  2. 点击要停用的功能所在面板中的详情

  3. 在显示的详情面板中点击停用...按钮。

gcloud

每个舰队级功能都有自己的 disable 命令。例如,如需为舰队停用 Cloud Service Mesh,请在舰队宿主项目中运行以下命令:

gcloud container fleet mesh disable

如需查看完整的命令列表,请参阅 Google Cloud SDK 参考文档(以及对应的 Beta 版Alpha 版文档),或查看各个功能的文档集了解详情。

如需了解为舰队停用某项功能后的预期行为,请参阅相关功能文档。在许多情况下,您的集群上仍然存在相关配置,但您无法再使用舰队命令或 Google Cloud 控制台集中管理该功能。

功能授权

为了在舰队级层管理功能,必须通过基于角色的访问权限控制来对功能授权,以在集群上执行其功能。Google Cloud 使用一项名为 Feature Authorizer 的服务,该功能会自动为支持舰队的功能设置和更新权限,这样您就不必在每个集群上手动设置功能权限(特别是在 Google 发布功能更新时)。

注册集群时,应用到集群的清单包含向 Feature Authorizer 授予集群的 cluster-admin 角色的 ClusterRoleBinding,并且该角色会关联到名为 service-project-number@gcp-sa-gkehub.iam.gserviceaccount.com 的服务账号。

在项目中停用支持舰队的功能后,Feature Authorizer 会删除该功能相应的 ClusterRoleClusterRoleBinding,从而消除该功能在集群上运行的权限。

在审核日志中查看 Feature Authorizer

如需在 GKE 审核日志中查看 Feature Authorizer 活动,请执行以下操作:

  1. 在 Google Cloud 控制台中打开 Logs Explorer。

    转到“日志”页面

  2. 运行以下高级查询:

    resource.type="k8s_cluster"
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.location="CLUSTER_LOCATION"
    protoPayload.authenticationInfo.principalEmail="system:serviceaccount:gke-connect:connect-agent-sa"
    protoPayload.authenticationInfo.authoritySelector="service-PROJECT_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com"
    

    替换以下内容:

    • CLUSTER_NAME:要查看日志的集群的名称。
    • CLUSTER_LOCATION:创建集群的 Google Cloud 位置。
    • PROJECT_NUMBER:集群所属项目的 Google Cloud 项目编号。

对于非 GKE 集群,找到 Kubernetes 审核日志的存储位置,然后运行类似查询。