1、Service机制的局限性
Service提供的负载均衡功能有以下限制:
- 只提供 4 层负载均衡,不支持7层负载均衡功能。
- 使用 NodePort 类型的 Service,需要在集群外部部署一个外部的负载均衡器。
- 使用 LoadBalancer类型的Service,Kubernetes 必须运行在特定的云服务上。
- 每创建一个Service NodePort类型,就会在每个节点开启一个端口,当项目多时,端口会难以维护。当项目很多时,Service的Iptables规则也随着数倍增多,如此多的iptables条目让增大维护和故障定位。
如何理解上面的局限性呢,下图是NodePort模式运行原理图:
2、ingress-nginx如何实现服务发现
针对上述问题,k8s官方提供了一种折中的方案:Ingress与Service不同,Ingress实际上不是一种服务。相反,它位于多个服务之前,充当集群中的智能路由器或入口点。
ingress-nginx实现架构如下图所示:
Ingress是在Kubernetes 1.1 版本后引入的资源类型。Ingress 支持将 Service 暴露到 Kubernete