MetalLB Operator
从 ACP 4.5 开始,Alauda Container Platform Load Balancer for MetalLB 更名为 Alauda Container Platform Load Balancer。从 Customer Portal 下载插件时,请搜索 Alauda Container Platform Load Balancer。重命名之前发布的插件包在上传后,平台中仍会显示 Alauda Container Platform Load Balancer for MetalLB。
目录
了解 MetalLB Operator术语MetalLB 中的高可用性原理选择 VIP 托管节点的算法计算公式应用示例自定义资源定义IPAddressPoolL2AdvertisementBGPPeerBGPAdvertisementBFDProfile(可选)约束和限制安装和卸载 MetalLB Operator升级 MetalLB Operator了解 MetalLB Operator
MetalLB Operator 为无法访问云负载均衡器服务的本地或裸机环境提供 Kubernetes 原生负载均衡器实现。 它通过为服务分配外部 IP 地址,并通过二层(ARP/NDP)或三层(BGP)通告这些地址,使 LoadBalancer 类型的 Service 资源能够正常工作。
Operator 可自动管理 MetalLB 组件的生命周期,包括安装、升级和配置同步。
术语
MetalLB 中的高可用性原理

默认情况下,平台使用 MetalLB 的 ARP 模式,具体实现过程和原理如下:
-
MetalLB 的 Controller 组件从外部地址池中选择一个 IP 地址,并将其作为 VIP 分配给 LoadBalancer 类型的内部路由。
-
MetalLB 根据算法选择一个可用节点作为托管 VIP 的 leader,然后由该节点转发流量。
-
此节点上的 Speaker 组件主动发送 GARP,在所有节点之间建立 VIP 与 MAC 地址的映射关系。
-
同一子网中的节点学习到 VIP 与可用节点 MAC 地址之间的映射关系后,访问 VIP 时将直接与此节点通信。
-
不同子网中的节点会先将流量路由到其子网的网关,再由网关将流量转发到托管 VIP 的节点。
-
-
当此节点发生故障时,MetalLB 会选择另一个 leader 托管 VIP。然后发送 GARP 以刷新 Service IP 的 MAC 地址,从而确保高可用性。
-
流量到达节点后,Kube-Proxy 会将其转发到相应的 Pod。
选择 VIP 托管节点的算法
给定负载均衡器 IP 的“leader”(负责通告 IP 的节点)选举是无状态的,工作方式如下:
- 每个 speaker 都会收集给定 IP 的潜在通告者列表,同时考虑活跃的 speaker、外部流量策略、活跃端点、节点选择器等因素。
- 每个 speaker 执行相同的计算:获取“node+VIP”元素哈希值的排序列表,并在自身是列表中的第一项时通告 Service。
这样就无需记录哪个 speaker 负责通告给定 IP。
计算公式
公式为:外部地址池数量 = ceil(n-vip / n-node),其中 ceil 表示向上取整。
注意:如果使用虚拟机,则虚拟机数量 = 外部地址池数量 * n。其中,n 必须大于 2,且最多允许一个节点发生故障。
-
n-vip:表示 VIP 的数量。
-
n-node:表示单个节点可以处理的 VIP 数量。
应用示例
如果某公司有 10 个 VIP,且每个可用节点可以处理 5 个 VIP,同时允许一个节点发生故障,那么该公司应如何规划外部地址池和可用节点的数量?
分析:
总共需要两个外部地址池和四个可用节点。
-
每个可用节点最多可以处理 5 个 VIP,这意味着一个外部地址池可以容纳 5 个 VIP,因此 10 个 VIP 需要两个外部地址池。
-
允许一个节点发生故障意味着每个地址池必须包含一个托管 VIP 的节点和一个备用节点,因此两个外部地址池总共需要四个可用节点。
自定义资源定义
MetalLB Operator 会在 metallb.io API 组下安装并管理多个 CRD。 这些 CRD 定义了 MetalLB 分配和通告 IP 地址的方式。
IPAddressPool
定义 MetalLB 可以分配给 Service.type=LoadBalancer. 的 IP 范围。
- 一个或多个 CIDR 或范围。
- 默认情况下,MetalLB 会从任意已配置且有可用地址的地址池中分配 IP。这可能导致为不需要此类地址的 Service 使用“昂贵”的地址。
若要防止这种情况,可以将 autoAssign 标志设置为
false,从而禁用地址池的自动分配。
L2Advertisement
用于 Layer 2 模式,在此模式下 MetalLB 通过 ARP/NDP 通告 IP。
- 将通告其 IP 的地址池列表。
BGPPeer
- 对等路由器的 IP 地址。
- 对等端的 ASN。
- MetalLB 使用的 ASN。
holdTime/keepaliveTime:BGP 会话的可选计时器。- 可以使用配置中对等端的 node-selectors 属性,将对等端限制到特定节点。
BGPAdvertisement
控制如何通过 BGP 通告地址池中的 IP。
- 要通告的地址池。
- 路由聚合前缀长度。
- BGP community 属性。
BFDProfile(可选)
用于为 BGP 对等端定义 BFD(双向转发检测)参数。
约束和限制
外部地址的 IP 资源必须满足以下条件:
-
外部地址池必须与可用节点在二层(L2)互联。
-
IP 必须可供平台使用,且不能包含物理网络中已在使用的 IP,例如网关 IP。
-
不得与集群使用的网络重叠,包括 Cluster CIDR、Service CIDR、子网等。
-
在双栈环境中,确保同一外部地址池中同时包含 IPv4 和 IPv6 地址,且两者的数量都大于 0。否则,双栈 LoadBalancer 类型的内部路由将无法获取外部访问地址。
-
在 IPv6 环境中,节点的 DNS 必须支持 IPv6;否则,MetalLB 插件将无法成功部署。
安装和卸载 MetalLB Operator
可通过 Alauda Container Platform Web 控制台中的集群插件安装 Operator。
- 前往
Administrator->Marketplace->Cluster Plugin - 输入关键字
MetalLB。 - 单击
⋮,然后单击安装。 - 安装完成后,单击
⋮,然后单击卸载。
升级 MetalLB Operator
通过 Alauda Container Platform Web 控制台上传软件包来升级 MetalLB Operator。
- 前往
Administrator->Marketplace->Upload Package
了解详情,请参阅上传软件包。