【问题标题】:What is the relationship between an nginx ingress controller and a cloud load balancer?nginx入口控制器和云负载均衡器之间有什么关系?
【发布时间】:2018-07-23 04:20:42
【问题描述】:

我将nginx ingress controller 部署到我的集群。这会在我的云提供商(假设 AWS 或 GCE)中配置一个负载均衡器。但是,集群内的所有流量都由控制器根据我的入口规则和注释进行路由。

那么,让云中的负载均衡器放在这个控制器前面的目的是什么?控制器似乎正在执行实际的负载平衡?

我想了解如何使用它,以便云负载均衡器实际上将流量路由到集群内的机器,同时仍然遵循我的所有 nginx 配置/注释,或者即使这是可能的/有意义的。

【问题讨论】:

    标签: nginx kubernetes kubernetes-ingress


    【解决方案1】:

    您可能有一个包含多个主节点的高可用性 (HA) 集群,负载均衡器是一种简单实用的“进入”您的 Kubernetes 集群的方法,因为您的应用程序应该可供您的用户使用(他们在与您的集群不同的网络)。 因此,您需要有一个 K8S 集群的入口点。

    LB 是一个易于配置的入口点。

    以这张图片为例:

    您的 API 服务器是负载平衡的。来自集群外部的调用将通过 LB 并由 API 服务器管理。只有一个 master(被选出来的)负责将集群的状态持久化到 etcd 数据库中。

    当您拥有ingress controlleringress rules 时,在我看来,在K8S 中配置和管理它们会更容易,而不是将它们写入LB 配置文件(并在每次修改时重新加载配置)。

    我建议你看看https://github.com/kelseyhightower/kubernetes-the-hard-way 并在里面做练习。这是理解流程的好方法。

    【讨论】:

      【解决方案2】:

      Ingress 控制器是一个“控制器”,在 kubernetes 术语中是一个软件循环,它监听声明性配置(Ingress 资源)和相关“集群状态”的变化,比较两者,然后“协调”集群的状态到声明性配置。

      在这种情况下,“集群的状态”是以下各项的组合:

      • 由控制器生成的 nginx 配置文件,由运行 nginx 的集群中的 pod 使用
      • 云提供商的配置,指示提供商的边缘流量基础设施向集群中的 nginx pod 提供满足特定条件的特定外部传递流量。

      因此,当您更新 Ingress 资源时,控制器会注意到更改,创建新的 nginx 配置文件,更新并重新启动运行 nginx 的 pod。

      就物理架构而言,将事物可视化为集群“内部”与“外部”或“集群”和“云”并不准确。客户可见的一切都是抽象的。

      在 GCP 中,在客户可见的虚拟机、负载平衡器和托管集群之下有多个数据包和流量管理层。

      以入口为目标的外部流量在到达“您的”集群之前会通过 Google 基础架构中的多个逻辑控制点,您无法查看这些控制点的详细信息。

      【讨论】:

        猜你喜欢
        • 2016-11-11
        • 2019-08-05
        • 2019-06-28
        • 2018-11-30
        • 2022-01-03
        • 2021-05-23
        • 2020-07-29
        • 2018-12-28
        • 2021-05-21
        相关资源
        最近更新 更多