术语 | 描述 |
---|---|
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的ARP模式,具体的实现过程和原理如下:
MetalLB的控制器组件从外部地址池中选择一个IP地址,将其分配给LoadBalancer类型的内部路由作为VIP。
MetalLB根据算法选择一个可用节点来托管VIP,然后转发流量。
该节点上的发言人组件主动发送GARP,在所有节点之间建立VIP与MAC地址的映射关系。
在同一子网内的节点在学习到VIP和可用节点的MAC地址之间的映射关系后,会直接与该节点进行通信以访问VIP。
不同子网的节点首次会将流量路由到其子网的网关,然后由网关将流量转发到托管VIP的节点。
当该节点发生故障时,MetalLB会选择另一个可用节点来托管VIP,从而确保高可用性。
流量到达节点后,Kube-Proxy将流量转发到相应的Pod。
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的节点和一个备份节点,因此每个外部地址池需要两个可用节点。