2

谁能解释一下 MetalLB 如何在 Kubernetes 环境中获取 IP 地址?我已经在 GCP 计算引擎中安装了 Kubernetes 集群。我在 MetalLB ConfigMap 中提供了一系列内部 IP 地址。

NAME        STATUS   INTERNAL-IP   EXTERNAL-IP     
instance-1  Ready    10.140.0.20   56.169.53.26    
instance-2  Ready    10.140.0.21   57.11.92.241   
instance-3  Ready    10.140.0.22   54.7.255.253

在我的情况下,我在 CM 中给出的 IP 范围是 10.140.0.30-10.140.0.40

它按预期工作,但我想知道 MetalLB 如何获取 IP 地址。

4

1 回答 1

2

总结我的评论:

第 2 层模式下的 MetalLB 在每个节点上部署了一个Speaker Pod,它响应 ARP(IPv4) 和 NDP(IPv6) 请求。

如果您现在连接到您的 Kubernetes 服务type: LoadBalancer从您在 MetalLB 配置中定义的范围获得的 IP,您的客户端将向网络发送一个 arp 请求who-has <IP-Service>, tell <IP-Client>。由于Speaker Pod 正在侦听 arp-request,因此它们会以reply <IP-Service> is-at <node-MAC-address-of-the-leader>.

这并不意味着您的 Pod 正在解析 Mac 地址的那个节点上运行,只有 MetalLB “领导者”在这个节点上运行。然后,您的请求将传递给知道您的 Pod 所在位置的 Kube-Proxy。

还要记住:

从这个意义上说,第 2 层没有实现负载均衡器。相反,它实现了故障转移机制,以便在当前领导节点由于某种原因发生故障时可以由不同的节点接管。

https://metallb.universe.tf/concepts/layer2/#load-balancing-behavior

于 2021-07-05T11:34:58.223 回答