理解 MetalLB

术语

术语描述
VIP虚拟IP地址(VIP)是MetalLB为LoadBalancer类型的内部路由分配的IP地址,为外部流量访问集群内的服务提供了一个统一的访问点。
ARP地址解析协议(ARP)用于将网络层的IP地址映射到数据链路层的MAC地址。
GARP免费ARP(GARP)是一种特殊的ARP请求,用于通知网络中其他节点IP地址与MAC地址的绑定情况。与正常的ARP请求不同,GARP不会等待响应,而是主动在网络上发送信息。
ARP 响应者MetalLB的一个组件,负责通过将VIP映射到节点的MAC地址来响应ARP请求。当一个节点需要与VIP通信时,它会发送ARP请求以检索与VIP对应的MAC地址。每个可用节点都有一个ARP响应者来响应这些请求,将VIP映射到节点的MAC地址。
控制器MetalLB的一个组件,负责从外部地址池动态分配VIP用于LoadBalancer类型的内部路由。控制器监听集群中内部路由的创建和删除事件,以根据需要分配或释放VIP。
发言人MetalLB的一个组件,根据策略或算法决定节点是否应该托管VIP并发送GARP。它确保节点之间有一定的平衡,当一个节点不可用时,其他节点可以接管VIP并发送GARP,从而实现高可用性。

MetalLB的高可用性原理

默认情况下,该平台使用MetalLB的ARP模式,具体的实现过程和原理如下:

  • MetalLB的控制器组件从外部地址池中选择一个IP地址,将其分配给LoadBalancer类型的内部路由作为VIP。

  • MetalLB根据算法选择一个可用节点来托管VIP,然后转发流量。

  • 该节点上的发言人组件主动发送GARP,在所有节点之间建立VIP与MAC地址的映射关系。

    • 在同一子网内的节点在学习到VIP和可用节点的MAC地址之间的映射关系后,会直接与该节点进行通信以访问VIP。

    • 不同子网的节点首次会将流量路由到其子网的网关,然后由网关将流量转发到托管VIP的节点。

  • 当该节点发生故障时,MetalLB会选择另一个可用节点来托管VIP,从而确保高可用性。

  • 流量到达节点后,Kube-Proxy将流量转发到相应的Pod。

MetalLB选择VIP主机节点的算法

MetalLB将所有可用节点与外部地址池使用VIP进行哈希并按特定算法排序,选择第一个可用节点作为VIP的主机。

外部地址池和节点数量

创建外部地址池并添加可用节点。所有可用节点保持备份关系,这意味着只有托管VIP的节点可以转发流量,需要其处理外部地址池中VIP的所有流量。

计算公式

公式为:外部地址池数量 = 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的节点和一个备份节点,因此每个外部地址池需要两个可用节点。