MetalLB 如何在 Kubernetes 中工作

How MetalLB works in Kubernetes

谁能解释一下 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 地址。

总结一下我的评论:

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

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

回答

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

另请注意:

In that sense, layer 2 does not implement a load-balancer. Rather, it implements a failover mechanism so that a different node can take over should the current leader node fail for some reason.

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