适用于:Azure Local 上的 AKS
设置 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 节点拥有该服务的所有权,并使用标准地址发现协议(IPv4 的 ARP)使这些 IP 在本地网络上可访问。 从局域网的角度来看,宣布计算机只是有多个 IP 地址。
- BGP:在 BGP 模式下,群集中的所有计算机都与你控制的附近路由器建立 BGP 对等互连会话,计算机告知这些路由器如何将流量转发到服务 IP。 使用 BGP 可以跨多个节点实现真正的负载均衡,以及由于 BGP 策略机制而进行精细的流量控制。
MetalLB 有两个组件:
- 控制器:负责为
type=loadbalancer的各项服务分配 IP。 - 扬声器:负责使用
ARP或BGP协议播发 IP。 为了满足高可用性 (HA) 要求,扬声器部署是一个守护程序集。
注意
- 扬声器 pod 使用主机网络;即它们的 IP 是节点 IP,以便它们可以直接通过主机网络接口发送广播消息。
- 控制器 pod 是一个位于群集内的任意节点中的普通 pod。
- 在 ARP 模式下,其中一个控制器 pod 被选为首位 pod。 然后,它使用 ARP 广播消息来播发 IP,并将 IP 与其所在节点的 MAC 地址绑定。 因此,所有流量会首先到达一个节点,然后 kube-proxy 将其均匀分布到服务的所有后端 pod。
- 在 BGP 模式下,所有群集节点都与在 BGP 对等节点选项卡中创建的所有 BGP 对等节点 建立连接。通常,BGP 对等方是 TOR 交换机。 为了广播 BGP 路由信息,必须配置 BGP Peer 节点,以便它们识别群集节点的 IP 和 ASN。 将 BGP 与 ECMP(等价多路径)结合使用时,流量会均匀地分布到所有节点上,从而实现真正的负载平衡。
比较 MetalLB L2 (ARP) 和 BGP 模式
MetalLB 的 L2 和 BGP 模式之间的选择取决于你的具体要求、网络基础结构和部署场景:
| 方面 | MetalLB 处于 L2 (ARP) 模式 | MetalLB 处于 BGP 模式 |
|---|---|---|
| 概述 | 在第 2 层模式下,一个 K8s 节点负责向本地网络播发服务。 从网络角度来看,K8s 节点似乎为其网络接口分配了多个 IP 地址。 | 在 BGP 模式下,群集中的每个 K8s 节点都会与网络路由器建立 BGP 对等会话,并使用该对等会话来播发外部群集服务的 IP。 |
| IP 地址分配 | MetalLB IP 地址池必须与 K8s 节点位于同一子网中。 | MetalLB IP 地址池可以位于不同于 K8s 节点的网络中。 |
| 配置复杂性 | 低。 由于你提供的 IP 地址与 Kubernetes 节点位于同一网络中,因此你只需在设置 MetalLB 时指定 IP CIDR 或 IP 池。 | 高。 配置 BGP 需要有关 BGP 协议的知识并了解你的网络基础结构。 |
| 可伸缩性 | 仅限于第 2 层网络,适合中小型 K8s 部署。 | 适用于复杂的网络拓扑和大规模 K8s 部署。 |
| 与基础结构网络的兼容性 | 适用于任何网络,但可能会导致大型 K8s 群集中的 ARP 泛洪,因为所有服务都使用单个 IP,并且服务的入口带宽仅限于单个节点的带宽。 | 需要在网络基础结构中支持 BGP。 |
| 流量工程 | 对流量路由的控制有限。 | 使用 BGP 属性对流量路由进行精细控制。 |
| 外部连接 | 需要进行更多配置才能实现外部连接。 | 使用 BGP 路由提供与外部网络的无缝连接。 |
FAQ
MetalLB 实例可以在 AKS Arc 群集之间重复使用吗?
不可以,MetalLB 不能在 AKS Arc 群集之间重复使用。 MetalLB 作为 Pod 存在于 Kubernetes 群集中,负载均衡器是自定义资源 (CR)。 必须使用 Azure CLI、Azure 门户或 Azure 资源管理器模板安装 MetalLB Arc k8s 扩展 ,并为每个 AKS Arc 群集创建负载均衡器。
