【问题标题】:What's the difference between exposing nginx as load balancer vs Ingress controller?将 nginx 公开为负载均衡器与入口控制器有什么区别?
【发布时间】:2018-11-30 15:42:18
【问题描述】:

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

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

  1. 设置service type as LoadBalancer 瞧我有公共IP
  2. 使用Nginx Ingress Controller

现在我可以使用选项 1 完成我的工作,何时或为什么我会选择选项 2

【问题讨论】:

标签: kubernetes kubernetes-ingress


【解决方案1】:

入口规则(ingress)入口控制器是有区别的。所以,从技术上讲,nginx 入口控制器和 LoadBalancer 类型的服务是没有可比性的。您可以比较入口资源和 LoadBalancer 类型的服务,如下所示。

一般来说:

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

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

ingressingress controller 关系

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

Nginx 入口控制器

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

结论:

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

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

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

【讨论】:

    【解决方案2】:

    接受的答案已经涵盖了很多内容。除了我在 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

    【讨论】:

      猜你喜欢
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2022-01-03
      • 2021-05-23
      • 1970-01-01
      • 2017-12-18
      • 2020-07-29
      相关资源
      最近更新 更多