适用于 Kubernetes 群集的 MetalLB 概述
适用于:Azure 本地版本 23H2
设置 AKS Arc 群集时,需要一种方法使服务在群集外部可访问。 此 LoadBalancer
类型非常适合此辅助功能,但外部 IP 保持挂起状态。 适用于已启用 Azure Arc 的 Kubernetes 的 MetalLB 扩展是一种工具,可用于为应用程序和服务生成外部 IP。 已启用 Arc 的 Kubernetes 群集可以使用适用于已启用 Azure Arc 的 Kubernetes 的 MetalLB 扩展与 MetalLB 集成。
若要使服务在群集外部可访问,MetalLB 需要 IP 地址。 当创建服务时,MetalLB 负责分配和释放这些地址,但只会分发其配置的池中的 IP。 当 MetalLB 向服务分配外部 IP 地址时,它会通知群集外部的网络此 IP 属于群集。 此通信是使用标准网络协议(如 ARP 或 BGP)完成的。
- 第 2 层模式(ARP):在第 2 层模式下,群集中的一个 K8s 节点获取服务的所有权,并使用标准地址发现协议(ARP for IPv4)使这些 IP 可访问本地网络。 从 LAN 的角度来看,宣布计算机只具有多个 IP 地址。
- BGP:在 BGP 模式下,群集中的所有计算机都与你控制的附近路由器建立 BGP 对等互连会话,并告知这些路由器如何将流量转发到服务 IP。 使用 BGP 可以跨多个节点实现真正的负载均衡,以及由于 BGP 的策略机制而进行精细的流量控制。
MetalLB 有两个组件:
- 控制器:负责分配每个服务的
type=loadbalancer
IP。 - 发言人:负责使用或
BGP
协议播发 IPARP
。 为了满足高可用性(HA)要求,扬声器部署是守护程序。
注意
- 扬声器 Pod 使用主机网络;例如,它们的 IP 是节点 IP,以便他们可以直接通过主机网络接口发送广播消息。
- 控制器 Pod 是位于群集中的任何节点中的正常 Pod。
- 在 ARP 模式下,其中一个扬声器 Pod 被选为领导者。 然后,它使用 ARP 广播消息播发 IP,将 IP 与它所在的节点的 MAC 地址绑定。 因此,所有流量首先命中一个节点,然后 kube-proxy 将其均匀分布到服务的所有后端 Pod。
- 在 BGP 模式下,所有群集节点都与选项卡中创建
BGP Peers
的所有 BGP 对等节点建立连接。通常,BGP 对等节点是 TOR 交换机。 若要广播 BGP 路由信息,必须配置 BGP 对等互连,以便识别群集节点的 IP 和 ASN。 将 BGP 与 ECMP(相等成本多路径)配合使用时,流量在所有节点上平均命中,因此可实现真正的负载均衡。
比较 MetalLB L2 (ARP) 和 BGP 模式
使用 MetalLB 的 L2 和 BGP 模式之间的选择取决于具体的要求、网络基础结构和部署方案:
方面 | L2 (ARP) 模式下的 MetalLB | BGP 模式下的 MetalLB |
---|---|---|
概述 | 在第 2 层模式下,一个 K8s 节点承担向本地网络播发服务的责任。 从网络的角度来看,K8s 节点看起来具有分配给其网络接口的多个 IP 地址。 | 在 BGP 模式下,群集中的每个 K8s 节点都会与网络路由器建立 BGP 对等互连会话,并使用该对等互连会话来播发外部群集服务的 IP。 |
IP 地址分配 | MetallLB IP 地址池必须与 K8s 节点位于同一子网中。 | MetallLB IP 地址池可以位于不同于 K8s 节点的网络中。 |
配置复杂性 | 低。 由于在与 Kubernetes 节点相同的网络中提供 IP 地址,因此只需在设置 MetalLB 时指定 IP CIDR 或 IP 池。 | 高。 配置 BGP 需要了解 BGP 协议并了解网络基础结构。 |
伸缩性 | 限制为第 2 层网络,适用于中小型 K8s 部署。 | 适用于复杂的网络拓扑和大规模 K8s 部署。 |
与基础结构网络的兼容性 | 适用于任何网络,但可能导致大型 K8s 群集中的 ARP 泛滥,因为单个 IP 用于所有服务,并且服务的入口带宽仅限于单个节点的带宽。 | 需要在网络基础结构中支持 BGP。 |
交通工程 | 对流量路由的有限控制。 | 使用 BGP 属性对流量路由进行精细控制。 |
外部连接 | 需要更多外部连接配置。 | 使用 BGP 路由提供与外部网络的无缝连接。 |
常见问题解答
是否可以跨 AKS Arc 群集重复使用 MetalLB 实例?
否,无法跨 AKS Arc 群集重复使用 MetalLB。 MetalLB 作为 Kubernetes 群集中的 Pod 生活,负载均衡器是自定义资源(CR)。 必须使用 Azure CLI、Azure 门户或 Azure 资源管理器 模板安装 MetalLB Arc k8s 扩展,并为每个 AKS Arc 群集创建负载均衡器。