我了解,当我们想通过一个负载均衡器/公共IP公开多个服务/路由时,可以使用Ingress。
现在,我想将我的Nginx服务器公开。我有两个选择
packrat
,我得到了公共IP 现在,我何时可以选择选项1来完成我的工作,或者为什么选择选项2呢?使用具有Ingress而没有Ingress的nginx的优点是什么?
答案 0 :(得分:15)
入口规则(入口)和入口控制器之间是有区别的。因此,从技术上讲,nginx入口控制器和LoadBalancer类型的服务不可比。您可以比较下面的入口资源和LoadBalancer类型服务。
通常来说:
LoadBalancer
类型的服务是L4(TCP)负载平衡器。您将使用它向外界公开单个应用程序或服务。它将根据目标IP地址和端口来平衡负载。
Ingress
类型的资源将创建一个L7(HTTP / S)负载平衡器。由于L7 LB可以识别应用程序,因此您可以使用它同时公开多个服务,从而可以根据应用程序状态确定将流量发送到哪里。
入口和入口控制器关系:
Ingress
或ingress rules
是ingress controller
用来分配负载的规则。入口控制器获取数据包,检查入口规则并确定将数据包传递到哪个服务。
Nginx入口控制器
Nginx入口控制器实际上使用LoadBalancer类型的服务作为集群的入口点。然后是检查入口规则并分配负载。这可能非常令人困惑。您创建一个入口资源,它会创建HTTP / S负载平衡器。它还提供了一个外部IP地址(例如,在GKE上),但是当您尝试点击该IP地址时,连接将被拒绝。
结论:
如果您有一个要映射到IP地址的单个应用,例如myapp.com
,则可以使用Loadbalancer类型服务。
如果要将多个应用程序(例如myapp1.com
,myapp1.com/mypath
,myapp2.com
,..,myappn.com
映射到一个IP地址,则可以使用入口资源。
由于入口是L7,因此可以区分myapp1.com
和myapp1.com/mypath
,可以将流量路由到正确的服务。
答案 1 :(得分:3)
接受的答案已经涵盖了很多内容。所有原因都是有效的,除了我在aws中使用入口控制器的原因是为了最大程度地降低成本。我有多个在kubernetes集群aws中运行的Web应用程序。要访问这些应用程序,而不是将单个应用程序作为LoadBalancer公开并创建单个ELB(每个ELB都需要花钱),我将入口控制器服务作为LoadBalancer公开,并为每个入口创建入口规则。
步骤涉及: