适用于 Azure Kubernetes Fleet Manager 的跨群集网络用例(预览版)

适用于 Azure Kubernetes Fleet Manager (Fleet) 的跨群集网络是一项基于 Cilium Cluster Mesh 的托管产品,使你能够在多个 Azure Kubernetes 服务 (AKS) 群集之间建立直接的 Pod 到 Pod 通信。 通过创建跨群集网络,无需网关即可实现无缝东西方连接,同时获得多群集可观测性和一致的安全强制。

体系结构和功能

在跨群集网络设置中,平面虚拟网络允许不同群集中的 Pod 直接跨群集边界路由流量。 每个群集通常分配两个子网:一个用于节点,一个用于 Pod。 这种一致的体系结构可确保 Pod 网络在跨群集网络中保持平整,而无需使用覆盖层或隧道。

图示展示了 Azure Kubernetes Fleet Manager 管理跨群集东西向连接的体系结构。不同群集中的 Pod 通过跨对等互连的虚拟网络中的 Cilium 代理直接通信。

此方案的关键组件和功能包括:

  • 使用 Cilium 数据平面的 Azure CNI:两个 AKS 群集都必须使用由 Cilium 提供支持的数据平面的 Azure CNI。
  • 高级容器网络服务(ACNS):必须在群集上启用 ACNS 以支持此方案。
  • Azure Kubernetes Fleet Manager:Fleet 通过 ClusterMesh 配置文件等资源管理跨群集网络的生命周期和配置。
  • 原生性能:Pod IP 路由通过直接路由在集群间进行,可实现原生性能,且无需任何网关或代理。
  • 统一网络策略强制实施:将 Cilium 的第 3-7 层网络策略强制扩展到跨群集网络中的所有群集,确保采用一致的安全方法。
  • 多群集可观测性:提供跨群集的流量流的端到端可见性。 此可见性可帮助你监视应用程序运行状况、排查连接问题,以及分析跨群集网络的流量模式。

用例

跨群集网络可实现多个关键的多群集方案。 以下部分介绍了使用 Fleet 进行跨群集网络的最常见用例。

用例:透明服务发现和负载均衡

使用标准 Kubernetes 服务并将其标记为全局时,Cilium 会自动发现跨群集网络中所有群集的这些服务的终结点。 任何发往全局服务的 ClusterIP 流量都会在所有参与群集之间自动进行负载均衡,从而简化跨群集通信。

应用程序可以发现服务并与之交互,而不管它们驻留在群集中,而无需应用程序级更改或外部服务注册表。

用例:高可用性和容错

高可用性是跨群集网络最常见的用例。 此用例包括跨多个区域或可用性区域运行 Kubernetes 群集,以及在每个群集中运行相同服务的副本。 发生故障时,请求可以故障转移到跨集群网络中的其他集群。

此用例中涵盖的故障场景主要并非整个区域或故障域完全不可用。 更可能出现的情况是,某个群集中的资源暂时不可用,或存在配置错误,从而导致无法在该群集中运行或扩缩容特定服务。 通过跨群集网络,发往受影响服务的流量会自动路由到其他群集中的正常终结点,使应用程序保持可用。

显示跨区域的两个 AKS 群集的关系图。每个群集中的前端路由到由订单 Pod 支持的本地订单服务。当群集 B 中的 Pod 不正常时,群集 B 中的订单服务会故障转移到群集 A 中的订单服务。

用例:共享服务

虽然基于 Kubernetes 的平台的初始趋势是构建大型多租户群集,但构建每个租户的各个群集或为不同类别的服务(例如不同级别的安全敏感度)构建群集越来越常见。

但是,某些服务(如机密管理、日志记录、监视或 DNS)通常仍在所有群集之间共享。 在共享的“服务”群集中集中这些服务可避免在每个租户群集中维护这些服务的操作开销。

此模型的主要动机是租户群集之间的隔离。 为了保持该目标,租户群集仅连接到共享服务群集,并且未连接到其他租户群集。

显示两个租户 AKS 群集的示意图,其中包含调用机密客户端的应用程序。这两个租户群集都路由到托管由 Vault-1 和 vault-2 Pod 支持的机密服务的共享服务群集。租户群集仅连接到共享服务群集,而不是彼此连接。

用例:有状态和无状态分离

可以在专用群集中隔离有状态服务(例如数据库和存储)的操作复杂性。 这种分离使无状态应用程序群集保持敏捷且易于迁移。 它还能提高安全性,简化集群生命周期管理,并使你能够将无状态工作负载与有状态工作负载分开独立扩展。

显示两个无状态 AKS 群集的关系图,每个群集都有入口路由到前端和数据存储客户端。这两个无状态群集都连接到托管数据存储服务的专用有状态群集,由 data-1、data-2 和 data-n Pod 提供支持。

用例:多集群安全与策略实施

跨群集网络将 Cilium 的第 3 层到第 7 层网络策略实施扩展到跨群集网络中的所有群集。 这种统一强制措施可确保一致的安全态势,并避免需要在每个环境中手动复制策略,从而简化策略管理。 在一个群集上应用的策略也会在其他群集中得到遵循,从而在整个集群环境中提供统一的身份感知安全。

全球服务

若要启用群集之间的流量流,必须将 Kubernetes 服务配置为全局服务。 在跨群集网络中,全局服务是跨多个群集共享的标准 Kubernetes 服务。 将服务标记为全局时,Cilium 会自动发现跨群集网络内所有群集中该服务的终结点,并跨它们执行负载均衡。

一旦某个服务被标记为全局,在一个群集上应用的任何策略都会在跨群集网络中的其他群集中得到遵循,从而提供一致的安全态势。 此配置允许:

  • 透明服务发现:应用程序可以发现服务并与之交互,而不管它们驻留在什么群集中。
  • 高可用性:如果一个群集中的服务不可用,流量会自动转移到另一个群集中的正常实例。

Cilium 通过监视具有 io.cilium/global-service: "true" 批注的服务来管理此发现。 对于这些服务,跨群集具有相同名称和命名空间的所有终结点都合并到单个全局服务中。 然后,发往该服务 ClusterIP 的任何流量都会在所有参与群集之间进行负载均衡。

局限性

  • 成员群集一次只能参与一个跨群集网络。
  • 单个跨群集网络最多支持 255 个成员群集。
  • 自托管的 Cilium 多集群配置不支持与由 Fleet 管理的跨集群网络同时使用。
  • cilium clustermesh connectcilium upgrade 这类会修改网格的 Cilium CLI 命令不受支持,因为这些操作由 Fleet 管理。
  • 跨群集网络仅限于同一可访问的平面路由域中的群集。 它不支持跨未对等互连的虚拟网络进行网状连接。

后续步骤