入口规则(ingress)和入口控制器是有区别的。所以,从技术上讲,nginx 入口控制器和 LoadBalancer 类型的服务是没有可比性的。您可以比较入口资源和 LoadBalancer 类型的服务,如下所示。
一般来说:
LoadBalancer 类型的服务是一个 L4(TCP) 负载均衡器。您将使用它向外界公开单个应用程序或服务。它会根据目的IP地址和端口来平衡负载。
Ingress 类型的资源将创建一个 L7(HTTP/S) 负载平衡器。您可以使用它同时公开多个服务,因为 L7 LB 是应用程序感知的,因此它可以根据应用程序状态确定将流量发送到哪里。
ingress 和 ingress controller 关系:
Ingress 或ingress rules 是ingress controller 遵循的分配负载的规则。入口控制器获取数据包,检查入口规则并确定将数据包传递到哪个服务。
Nginx 入口控制器
Nginx 入口控制器实际上使用 LoadBalancer 类型的服务作为集群的入口点。然后是检查入口规则并分配负载。这可能非常令人困惑。您创建一个入口资源,它会创建 HTTP/S 负载均衡器。它还为您提供了一个外部 IP 地址(例如在 GKE 上),但是当您尝试访问该 IP 地址时,连接被拒绝。
结论:
如果您有一个应用程序,例如myapp.com,您希望映射到一个 IP 地址,您将使用 Loadbalancer 类型的服务。
如果您将有多个应用程序(例如 myapp1.com、myapp1.com/mypath、myapp2.com、..、myappn.com)映射到一个 IP 地址,您将使用入口资源。
由于入口是 L7,它能够区分 myapp1.com 和 myapp1.com/mypath,因此能够将流量路由到正确的服务。