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