MetalLB Operator
目录
了解 MetalLB Operator术语MetalLB 高可用原则VIP 托管节点选择算法计算公式应用示例自定义资源定义IPAddressPoolL2AdvertisementBGPPeerBGPAdvertisementBFDProfile(可选)约束与限制安装与卸载 MetalLB Operator升级 MetalLB Operator了解 MetalLB Operator
MetalLB Operator 为无法使用云负载均衡服务的本地或裸金属环境提供了 Kubernetes 原生的负载均衡器实现。
它通过为 LoadBalancer 类型的 Service 资源分配外部 IP 地址,并通过二层(ARP/NDP)或三层(BGP)进行地址通告,使这些服务能够正常工作。
该 Operator 自动化管理 MetalLB 组件的生命周期,包括安装、升级和配置同步。
术语
MetalLB 高可用原则

平台默认使用 MetalLB 的 ARP 模式,具体实现流程和原理如下:
-
MetalLB 的 Controller 组件从外部地址池中选择一个 IP 地址,分配给 LoadBalancer 类型的内部路由作为 VIP。
-
MetalLB 根据 算法选择一个可用节点作为 leader 托管该 VIP,并转发流量。
-
该节点上的 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、外部流量策略、活跃的 endpoints、节点选择器等因素。
-
每个 Speaker 执行相同的计算:获取“节点+VIP”元素的哈希排序列表,若自身是列表中的第一个,则负责通告该服务。
这样无需记录哪个 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,这可能导致“昂贵”的地址被分配给不需要的服务。
若要防止此行为,可以通过将 autoAssign 标志设置为false来禁用某个地址池的自动分配。
L2Advertisement
用于二层模式,MetalLB 通过 ARP/NDP 通告 IP。
- 要通告其 IP 的地址池列表。
BGPPeer
- 对等路由器的 IP 地址。
- 对等体的 ASN。
- MetalLB 使用的 ASN。
holdTime/keepaliveTime:BGP 会话的可选定时器。- 可通过配置中的 node-selectors 属性限制对等体只作用于特定节点。
BGPAdvertisement
控制如何通过 BGP 通告地址池中的 IP。
- 要通告的地址池。
- 路由聚合前缀长度。
- BGP 社区属性。
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 控制台的 Cluster Plugin 安装 Operator。
- 进入
Administrator->Marketplace->Cluster Plugin - 输入关键词
MetalLB。 - 点击
⋮,选择 Install。 - 安装完成后,点击
⋮,选择 Uninstall。
升级 MetalLB Operator
通过 Alauda Container Platform Web 控制台上传包的方式升级 MetalLB Operator。
- 进入
Administrator->Marketplace->Upload Package
了解更多关于 Upload Package 的内容。