Kubernetes 中的 Metallb 与 Nginx Ingress

Kubernetes 中的 Metallb 与 Nginx Ingress

据我了解,

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

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

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

谢谢。

答案1

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

  • 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 终止和其他问题,并且提供商会自动在其基础设施上创建一个负载均衡器。

相关内容