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