Kubernetes 中的 Metallb 与 Nginx Ingress

Tah*_*sin 5 nginx kubernetes

据我了解,

Metallb 是一个负载均衡器,它为服务分配 IP 地址,该服务可以暴露给外界。

Nginx Ingress 和普通的 Nginx 一样,但它驻留在 kubernetes 中,并提供到不同路由的路由。

我的问题是,如果我有 Nginx Ingress,为什么还需要 Metallb?因为 nginx 入口会将端口 80/443 公开给公共,我可以使用它来路由到我需要的服务。

谢谢你。

Jor*_*tao 6

您将需要两者,因为它们解决不同的问题:

  • MetalLB 接收来自集群外部的请求,并在集群中的负载均衡器之间平衡它们

  • Nginx 接收来自集群外部的请求并在节点之间平衡它们。

有关详细信息,请参阅https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#a-pure-software-solution-metallb

如果没有 MetalLB,裸机中的 nginx 入口服务将保持pending状态,因为它没有分配给它的 IP。MetalLB 负责为 nginx 分配外部 IP。

如果没有 Nginx,您将不得不在每个客户端上执行 TLS 终止,这通常是不可取的。

另一种看待它的方式:

  • nginx ingress 处理类型 Ingress
  • metallb 处理类型 LoadBalancer

混淆可能源于这样一个事实,虽然上述操作根本不同,但它们通常由“负载均衡器”完成。

请注意,这同样适用于云:您需要部署一个入口来处理 TLS 终止和其他问题,并且提供商会在其基础架构上自动创建一个负载均衡器。