背景知识
ingress原生是仅支持七层负载均衡(基于路径)的,其中ingress-nginx通过configmap的方式也能做到四层(基于端口)的负载均衡。
在ingress-nginx 0.21.0版本中,作者原计划要移除对四层负载均衡的支持,参看PR#3197,原因主要有以下几点:
- ingress的语义,原本就是仅支持7层负载均衡的,用它来实现四层负载均衡会显得很诡异
- 四层的负载均衡有其他的解决方案,没必要通过ingress来实现。提到的是使用metallb替代,即创建loadbalancer类型的service。
然而,奈何顶不住众多人的吐槽,又在0.21.0
把上述commit给revert了,具体参考Revert removal of support for TCP and UDP services。用户的理由是:
- 他们已经有很多服务在依赖ingress-nginx的四层负载均衡了,有迁移成本
- 他们的服务是在公有云上,假如每个服务都创建一个loadbal