暴露nginx作为负载均衡器与Ingress控制器有什么区别?

Siv*_*iva 8 kubernetes kubernetes-ingress

我知道当我们想要使用单个Load Balancer/public IP公开多个服务/路由时,可以使用Ingress.

现在我想将我的Nginx服务器暴露给公众.我有两个选择

  1. 设置service type as LoadBalancervoila我得到了公共IP
  2. 使用Nginx Ingress Controller

现在我可以使用选项1完成我的工作,何时或为什么我会选择选项2什么是在没有Ingress的情况下使用Ingress的nginx的优势?

sur*_*ren 20

入口规则(入口)入口控制器之间存在差异.因此,从技术上讲,nginx入口控制器和LoadBalancer类型的服务是不可比的.您可以比较入口资源和LoadBalancer类型服务,如下所示.

一般来说:

LoadBalancertype service是一个L4(TCP)负载均衡器.您可以使用它向外界公开单个应用程序或服务.它将根据目标IP地址和端口平衡负载.

Ingresstype资源将创建一个L7(HTTP/S)负载均衡器.您可以使用它同时公开多个服务,因为L7 LB是应用程序感知的,因此它可以根据应用程序状态确定将流量发送到何处.

入口入口控制器关系:

Ingress,或者ingress rulesingress controller分配负载的规则.入口控制器获取数据包,检查入口规则并确定传送数据包的服务.

Nginx Ingress控制器

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

结论:

如果您有一个应用程序,可以使用Loadbalancer类型的服务,比如说myapp.com您希望映射到IP地址.

你会使用入口资源,如果你有几个应用程序,比如myapp1.com,myapp1.com/mypath,myapp2.com,...,myappn.com映射到一个IP地址.

由于入口是L7,它能够区分myapp1.commyapp1.com/mypath,它能够将流量路由到正确的服务.


Bal*_*hna 8

接受的答案已经涵盖了很多东西。所有的原因都是有效的,除此之外,我在 aws 中使用入口控制器的原因是为了最小化成本。我有多个 Web 应用程序在 kubernetes 集群 aws 中运行。为了访问这些应用程序而不是将单个应用程序公开为 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