kubernetes - MetalLB 在 Kubernetes 中的工作原理

标签 kubernetes load-balancing metallb

有人可以解释一下 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/

相关文章:

amazon-web-services - 我可以在 AWS 负载均衡器中指定除 index.html 之外的其他 ping 路径吗

ssl - 如何使用haproxy解密和加密HTTPS流量?

kubernetes - 在裸机 RPI 集群上使用 Metallb 的 LoadBalancer 安装后无法工作

swift - MTLVertexDescriptor 中的矩阵

apache-spark - Kubernetes 1.9 无法初始化 SparkContext

kubernetes - 如何在 Kubernetes 中使两个集群通信

docker - 使用 Gitlab 安装 Ingress 的 Kubernetes 返回 "?"作为外部 IP

kubernetes azure 节点超过最大卷数

amazon-web-services - 无法向现有负载均衡器添加新的可用区

kubernetes - MetalLB 与 Kubernetes,无法连接到 VIP 或端口