有人可以解释一下 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 服务的 IP 地址 type: LoadBalancer
从您在 MetalLB 配置中定义的范围中获取,您的客户端将发送一个 arp 请求 who-has <IP-Service>, tell <IP-Client>
到网络。
由于 Speaker Pod 正在监听 arp 请求,因此它们将用 reply <IP-Service> is-at <node-MAC-address-of-the-leader>
进行应答。 .
这并不意味着您的 Pod 正在解析 Mac 地址的节点上运行,只有 MetalLB“领导者”正在该节点上运行。然后您的请求将传递到 Kube-Proxy,它知道您的 Pod 所在的位置。
还请记住:
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
关于kubernetes - MetalLB 在 Kubernetes 中的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68224438/