将nginx作为负载均衡器暴露和使用Ingress控制器有什么区别?

40

我知道Ingress可以在想要使用单个负载均衡器/公共IP暴露多个服务/路由时使用。

现在我想将我的Nginx服务器公开到互联网。我有两个选择:

  1. 服务类型设置为LoadBalancer,这样我就能获得公共IP了。
  2. 使用Nginx Ingress Controller

当我可以通过选项1完成任务时,为什么或何时会选择选项2?使用Ingress和不使用Ingress的优势是什么?


这个问题已经被回答了:https://dev59.com/YFcO5IYBdhLWcg3w5lfX - iomv
可能是Kubernetes:Ingress vs Load Balancer的重复问题。 - Suresh Vishnoi
2个回答

62

“ingress rule (ingress)”和“ingress controller”是不同的概念。因此,从技术上讲,nginx ingress controller和LoadBalancer类型的服务不能相互比较。可以将ingress资源和LoadBalancer类型的服务进行比较,如下所示:

一般而言:

LoadBalancer类型的服务是L4(TCP)负载均衡器,用于将单个应用程序或服务公开给外部世界,并根据目标IP地址和端口进行负载平衡。

Ingress类型的资源则会创建一个L7(HTTP / S)负载均衡器,用于同时公开多个服务,因为L7 LB具有应用程序感知功能,因此它可以根据应用程序状态确定将流量发送到何处。

ingressingress controller的关系:

Ingressingress rulesingress controller遵循以分发负载的规则。Ingress controller接收数据包,检查ingress规则并确定将数据包传递到哪个服务。

Nginx Ingress Controller

Nginx ingress控制器实际上使用LoadBalancer类型的服务作为进入集群的入口。然后它会检查入口规则并分配负载。这可能会让人感到困惑。您创建一个入口资源,它就会创建HTTP/S负载均衡器。它还会为您提供外部IP地址(例如在GKE上),但是当您尝试访问该IP地址时,连接会被拒绝。
结论:
如果您只有一个应用程序,比如“myapp.com”,并希望将其映射到一个IP地址,则可以使用LoadBalancer类型的服务。
如果您有多个应用程序,例如“myapp1.com”,“myapp1.com/mypath”,“myapp2.com”等,并希望将它们映射到一个IP地址,则可以使用入口资源。
由于入口是L7,它能够区分“myapp1.com”和“myapp1.com/mypath”,并将流量路由到正确的服务。

负载均衡器可以进行配置:它可以是L4(TCP)负载均衡器或L7(HTTP/S)负载均衡器。这个答案已经过时或错误。这不是Ingress和LoadBalancer之间的主要区别。例如,请参阅DigitalOcean上的文档(https://docs.digitalocean.com/products/kubernetes/how-to/configure-load-balancers/)。 - collimarco
答案已经过时了,但是LoadBalancer服务不能被配置为HTTP负载均衡器。仅仅因为某些云提供商可以实现这一点,并不意味着Kubernetes具有该功能。 - suren

15

已接受的答案已经涵盖了很多内容。所有原因都是有效的,除此之外,我在AWS中使用Ingress控制器的原因是为了最小化成本。我有多个Web应用程序在Kubernetes集群中运行在AWS上。为了访问这些应用程序,我不是将每个应用程序公开为LoadBalancer并创建单独的ELB(每个ELB都需要花费一定的费用),而是将Ingress控制器服务公开为LoadBalancer,并为每个应用程序创建Ingress规则。

操作步骤如下:

  • 公开Ingress服务作为LoadBalancer,该服务创建了AWS中的ELB,例如elb1.aws.com
  • 为每个Web应用程序创建Ingress规则,例如example.com、awesome.com和helloworld.com
  • Route53将所有映射到同一个ELB,例如: example.com -> elb1.aws.com awesome.com -> elb1.aws.com helloworld.com -> elb1.aws.com

您正在使用哪种 Ingress 控制器?是否有这个 - NginX Ingress Controller?谢谢 +1 - Nguyễn Văn Phong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接