术语 | 说明 |
---|---|
VIP | 虚拟 IP 地址(VIP)是 MetalLB 为 LoadBalancer 类型内部路由分配的 IP 地址,为外部流量访问集群内服务提供统一的访问入口。 |
ARP | 地址解析协议(ARP)用于将网络层的 IP 地址映射到数据链路层的 MAC 地址。 |
GARP | 免费 ARP(GARP)是一种特殊的 ARP 请求,用于通知网络中其他节点 IP 地址与 MAC 地址的绑定关系。与普通 ARP 请求不同,GARP 不等待响应,而是主动将信息发送到网络中。 |
ARP Responder | MetalLB 的一个组件,负责通过将 VIP 映射到节点的 MAC 地址来响应 ARP 请求。当节点需要与 VIP 通信时,会发送 ARP 请求以获取对应的 MAC 地址。每个可用节点都有一个 ARP Responder,响应这些请求,将 VIP 映射到该节点的 MAC 地址。 |
Controller | MetalLB 的一个组件,负责从外部地址池动态分配 VIP 用于 LoadBalancer 类型的内部路由。Controller 监听集群中内部路由的创建和删除事件,以便按需分配或释放 VIP。 |
Speaker | MetalLB 的一个组件,根据策略或算法决定节点是否承载 VIP 并发送 GARP。它确保节点间达到一定的负载均衡,当某个节点不可用时,其他节点可以接管 VIP 并发送 GARP,从而实现高可用。 |
平台默认使用 MetalLB 的 ARP 模式,具体实现流程和原理如下:
MetalLB 的 Controller 组件从外部地址池中选择一个 IP 地址,分配给 LoadBalancer 类型的内部路由作为 VIP。
MetalLB 根据 算法选择一个可用节点承载该 VIP,并转发流量。
该节点上的 Speaker 组件主动发送 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 的节点和一个备份节点,因此两个外部地址池各需两个可用节点。