本指南中介绍的许多功能仅在 GKE Enterprise 中提供。如需了解详情,请参阅 GKE Enterprise 部署选项。
本指南适用于希望开始在组织中使用舰队的云架构师。在阅读本指南之前,请确保您熟悉我们的舰队管理概览和规划舰队资源,其中讨论了如何将新集群或现有集群整理到舰队中。
功能采用方面的最佳实践
所有舰队功能(基本舰队可观测性功能除外)均需用户选择启用,也就是说,您需要指定要使用这些功能。仅将现有集群添加到舰队不会更改其配置。当您决定使用舰队功能时,有些功能可以立即启用且风险极低,但您可能需要更加谨慎地使用某些功能。本部分提供了一些有关功能采用的指导。
特别是对于现有集群和工作负载,您需要特别注意功能是否使用了相同性。这是一个舰队概念,其中,该功能会假设不同集群中同名的命名空间、服务或身份是同一对象。如需详细了解相同性原则以及哪些功能使用该原则,请参阅舰队的工作原理。
初始配置低风险功能
以下“环境”功能不假设任何类型的相同性,也不会以任何方式影响集群。这些功能都可以安全地用于现有工作负载和集群,可让您立即受益于整个舰队的增强可观测性和安全性数据分析,以及根据舰队成员资格管理集群升级顺序的能力。
以下功能安装在单个集群上。功能可以假设相同性,但前提是跨多个集群配置或指定资源时。这意味着您可以在具有现有工作负载的集群上安全地启用这些功能,并且在为使用这些可选选择器的功能创建或使用配置时只需考虑相同性即可。
- Config Sync。如果您要使用可选的命名空间和团队范围选择器,则可能需要考虑相同性。
- Binary Authorization。如果您要使用可选的范围限定规则,则可能需要考虑命名空间、身份或服务相同性。
- Policy Controller。如果要从强制执行中排除命名空间,则可能需要考虑命名空间相同性。
初始配置高级多集群功能
以下强大功能可降低管理多个集群的运营开销。但是,您需要谨慎使用这些功能,因为它们都需要假设一种或多种类型的相同性才能正常运行,并且启用或停用这些功能可能会影响多个集群及其工作负载。
例如,如果您在不同的集群和应用(包括默认命名空间)中已有同名的 Kubernetes 命名空间,则应先检查您是否希望将它们视为同一个命名空间,然后再启用任何做出此假设的功能。同样,如果您要使用 Cloud Service Mesh,则应了解集群中合并哪些服务端点,并确认这是预期的行为。
审核命名空间相同性
如果您非常了解自己的应用,则只需验证没有两个“不同的”应用使用同一命名空间即可审核命名空间。请特别注意默认命名空间的临时使用。例如,如果您在一个集群中有名为 default
的命名空间,在另一个集群中有名为 default
的命名空间,但它们的用途不同,则应重命名其中一个。
如需更严格的方法,请尝试以下操作。对于舰队不同集群中每组同名命名空间,请检查以下各项:
- 在每个集群中,集群都采用相同的 RBAC 规则,并且主账号的命名空间可以访问上述命名空间。
- Pod 使用的映像集(去掉 #/标记)是相同的。
- Pod 使用的 Secret 集是相同的。
如果满足上述所有条件,则命名空间足够相似,可以视为“相同”。
如果命名空间不够相似,您可以将应用迁移到新命名空间。在您确定假设命名空间相同后,就可以开启使用该命名空间的功能。
审核服务相同性
如果您希望采用 Cloud Service Mesh 来管理基于微服务的应用,则需要考虑的另一个问题是服务相同性。这意味着,对于命名空间和服务名称的任何组合,Cloud Service Mesh 都会在以下方面将其视为同一逻辑服务:
- 身份(专门针对 Cloud Service Mesh 安全性):如果
namespace1/service1
被授权执行某项操作,则任何集群中具有该身份的工作负载都会被授权。 - 流量管理:默认情况下,流量会在任何集群中的
namespace1/service1
服务之间进行负载均衡。 - 可观测性:所有集群中
namespace1/service1
的指标会汇总在一起。
如果您要使用新集群和应用启用 Cloud Service Mesh,我们建议您在整个网格中预留唯一的命名空间/服务名称组合。对于现有应用,请审核您的服务,以确保在身份、流量管理和可观测性方面,集群中具有相同命名空间和名称的服务是那些您希望视为同一服务的服务。
特别是,请确保逻辑上不同的服务(例如 Payment Accounting API 和 Payment Transaction API)不会使用相同的 [命名空间,名称] 对(例如 payments/api
),因为它们一旦进入服务网格,就会被视为同一服务。这种概念性加入操作甚至会跨区域边界发生。此外,服务的功能可能会受到影响。
将流量定向到多个集群中的服务时,多集群 Ingress 和多集群Gateway 也会假设服务命名空间/名称相同性,但仅对于集群外部公开的服务。
考虑工作负载身份
舰队范围的工作负载身份联合是一项强大的舰队功能。这扩展了适用于 GKE 的工作负载身份联合中提供的功能,可让您使用集群中的工作负载向 Google 进行身份验证,而无需下载、手动轮替和常规管理 Google Cloud 服务账号密钥。但是,工作负载会使用集群生成的短期有效令牌进行身份验证,并将每个集群作为身份提供方添加到特殊工作负载身份池中。在特定命名空间中运行的工作负载可以跨集群共享相同的 Identity and Access Management 身份。
虽然常规适用于 GKE 的工作负载身份联合使用项目范围身份池,但即使集群位于不同项目中,舰队范围工作负载身份联合仍为整个舰队使用工作负载身份池,且具有整个舰队中的身份的隐式相同性以及命名空间和服务相同性。这样可以更轻松地跨项目为应用设置身份验证,但是如果您选择在多项目舰队中使用常规 Workload Identity Federation for GKE,则除了常规 Workload Identity Federation for GKE 方面的注意事项之外,还可能有一些访问权限控制注意事项,尤其是在舰队宿主项目同时具有舰队集群和非舰队集群时。
如需详细了解舰队工作负载身份联合以及如何使用它访问 Google Cloud 服务,请参阅使用舰队 Workload Identity。如需有关如何通过舰队工作负载身份联合最大限度降低风险的指导以及一些示例,请参阅使用舰队 Workload Identity 的最佳实践。
舰队级默认设置
GKE Enterprise 支持为某些企业功能(包括 Cloud Service Mesh、Config Sync 和 Policy Controller)设置舰队级默认设置。这有助于您将集群设置为使用这些功能,而无需单独配置每个集群。例如,管理员可以为舰队启用 Policy Controller,并在舰队级层设置默认政策。这会在新舰队成员集群中安装所需的代理,并对这些集群应用默认政策。
不过,这些默认设置只会自动应用于您在创建集群时添加到舰队的新集群。现有集群及其工作负载不会受到影响,即使您已将它们添加到舰队,或者在设置功能默认设置后添加集群也是如此。这意味着您可以安全地设置舰队级默认设置,而不会面临在您尚未准备好执行此操作的集群上启用或配置功能的风险。您以后可以随时选择将默认设置应用于现有集群。
功能要求
根据您的组织想要使用的舰队功能实现舰队时,需要考虑一些限制。例如,某些功能不支持使用不属于舰队宿主项目的集群,而其他功能在 Google Cloud 外部的集群上不受支持。
下表显示了每个组件的当前要求和限制,以下部分提供了一些具体指导。
功能 |
集群类型 |
项目要求 |
VPC 要求 |
---|---|---|---|
Config Sync | 所有支持 GKE Enterprise 的集群 | 无 | 无 |
Policy Controller | 所有支持 GKE Enterprise 的集群 | 无 | 无 |
Cloud Service Mesh | 请参阅限制 | 同一项目中与 Cloud Service Mesh 结合使用的所有集群都必须注册到同一舰队。如需了解详情,请参阅 Cloud Service Mesh 舰队要求。 | GKE 集群必须位于同一 VPC 网络中。 |
多集群 Service (MCS) | GKE on Google Cloud | 无 | 请参阅共享 VPC 上的 MCS |
多集群 Ingress 和多集群网关 | GKE on Google Cloud | Ingress/Gateway 资源、GKE 集群和舰队必须位于同一项目中。 | Ingress/网关资源和 GKE 集群必须位于同一 VPC 网络中。 |
工作负载身份池 | 针对 GKE on Google Cloud 和 Google Distributed Cloud on VMware 进行了优化。支持其他 Kubernetes 集群,但需要进行额外的设置。 | 无 | 无 |
Binary Authorization | GKE on Google Cloud、Google Distributed Cloud on VMware、Google Distributed Cloud on Bare Metal | 无 | 无 |
Advanced Vulnerability Insights | GKE on Google Cloud | 无 | 无 |
安全状况 | GKE on Google Cloud | 无 | 无 |
合规状况 | GKE on Google Cloud | 无 | 无 |
舰队资源利用率指标 | GKE on Google Cloud | 无 | 无 |
舰队日志记录 | 全部 | 无 | 无 |
Connect 网关 | 全部 | 无 | 无 |
舰队团队管理 | 全部 | 无 | 无 |
Pod FQDN 网络政策 | GKE on Google Cloud | 无 | 无 |
节点间透明加密 | GKE on Google Cloud | 无 | 无 |
Config Controller | 不适用 | 无 | 无 |
发布序列 | GKE on Google Cloud | 无 | 无 |
考虑 Virtual Private Cloud 要求
如果您打算使用 Cloud Service Mesh 等功能,并且这些功能要求集群位于单个 Virtual Private Cloud (VPC) 网络中(如上表中所示),则应为每个 VPC 创建一个舰队。如果您不打算使用这些功能,则可以将多个 VPC 放入一个舰队中。
例如,一种常见的模式是,组织有多个项目,每个项目都有自己的默认 VPC。这些 VPC 之间可能已有对等互连连接。如果您使用的不是具有单个 VPC 要求的功能,则可以将这些 VPC 全部放入一个舰队中。另一种常见模式是采用“中心辐射型”拓扑,该拓扑使用多个 VPC。如果您使用的不是具有单个 VPC 要求的功能,则可以将所有这些 VPC 中的集群放入一个舰队中。请注意,在某些情况下,遵循这些准则可能会导致舰队只有一个集群!在这种情况下,您可能需要放弃使用具有 VPC 限制的功能并创建多项目舰队,或者根据需要重新考虑您的架构并移动工作负载。
多集群网络的要求
如果要使用多集群 Ingress 或多集群 Gateway 进行流量管理,请注意在这两种情况下,网关控制器都无法跨项目。这意味着,要与这些功能结合使用的所有集群都需要位于同一项目和同一舰队中。如果您需要创建包含多个项目中的集群的舰队,则可以改用单个集群 Gateway,并通过其他方式(例如使用 DNS)将流量引导至正确的 Gateway。使用这些功能的集群还需要位于同一 VPC 网络中。