将Nginx暴露为负载平衡器与Ingress控制器有什么区别?

时间:2018-06-21 10:30:35

标签: kubernetes kubernetes-ingress

我了解,当我们想通过一个负载均衡器/公共IP公开多个服务/路由时,可以使用Ingress。

现在,我想将我的Nginx服务器公开。我有两个选择

  1. 设置packrat,我得到了公共IP
  2. 使用Nginx Ingress Controller

现在,我何时可以选择选项1来完成我的工作,或者为什么选择选项2呢?使用具有Ingress而没有Ingress的nginx的优点是什么?

2 个答案:

答案 0 :(得分:15)

入口规则(入口)入口控制器之间是有区别的。因此,从技术上讲,nginx入口控制器和LoadBalancer类型的服务不可比。您可以比较下面的入口资源和LoadBalancer类型服务。

通常来说:

LoadBalancer类型的服务是L4(TCP)负载平衡器。您将使用它向外界公开单个应用程序或服务。它将根据目标IP地址和端口来平衡负载。

Ingress类型的资源将创建一个L7(HTTP / S)负载平衡器。由于L7 LB可以识别应用程序,因此您可以使用它同时公开多个服务,从而可以根据应用程序状态确定将流量发送到哪里。

入口入口控制器关系

Ingressingress rulesingress controller用来分配负载的规则。入口控制器获取数据包,检查入口规则并确定将数据包传递到哪个服务。

Nginx入口控制器

Nginx入口控制器实际上使用LoadBalancer类型的服务作为集群的入口点。然后是检查入口规则并分配负载。这可能非常令人困惑。您创建一个入口资源,它会创建HTTP / S负载平衡器。它还提供了一个外部IP地址(例如,在GKE上),但是当您尝试点击该IP地址时,连接将被拒绝。

结论:

如果您有一个要映射到IP地址的单个应用,例如myapp.com,则可以使用Loadbalancer类型服务。

如果要将多个应用程序(例如myapp1.commyapp1.com/mypathmyapp2.com,..,myappn.com映射到一个IP地址,则可以使用入口资源。

由于入口是L7,因此可以区分myapp1.commyapp1.com/mypath,可以将流量路由到正确的服务。

答案 1 :(得分:3)

接受的答案已经涵盖了很多内容。所有原因都是有效的,除了我在aws中使用入口控制器的原因是为了最大程度地降低成本。我有多个在kubernetes集群aws中运行的Web应用程序。要访问这些应用程序,而不是将单个应用程序作为LoadBalancer公开并创建单个ELB(每个ELB都需要花钱),我将入口控制器服务作为LoadBalancer公开,并为每个入口创建入口规则。

步骤涉及:

  • 作为负载平衡器公开的入口服务,在aws中创建了ELB,可以说elb1.aws.com
  • 每个Web应用程序的入口规则,例如example.com,awesome.com,helloworld.com
  • Route53映射都映射到相同的ELB,例如: example.com-> elb1.aws.com awesome.com-> elb1.aws.com helloworld.com-> elb1.aws.com