nginx 入口控制器和云负载均衡器之间有什么关系?

What is the relationship between an nginx ingress controller and a cloud load balancer?

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

那么,让云中的负载平衡器位于该控制器之前的目的是什么?似乎控制器正在执行实际的负载平衡?

我想了解如何拥有它,以便云负载平衡器实际上将流量路由到集群内的机器,同时仍然遵循我的所有 nginx configurations/annotations 或者即使那是 possible/makes 意义.

您可能有一个具有多个主节点的高可用性 (HA) 集群,负载均衡器是在您的 Kubernetes 集群中 "enter" 的一种简单实用的方法,因为您的应用程序应该可供您的用户使用(与您的集群位于不同的网络上)。 所以你需要有一个 K8S 集群的入口点。

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

以这张图片为例:

您的 API 服务器是负载平衡的。来自集群外部的调用将通过 LB 并由 API 服务器进行管理。 Only one master (the elected one) will be responsible to persist the status of the cluster in the etcd database.

当你有ingress controlleringress rules时,我认为在K8S内部配置和管理它们更容易,而不是将它们写入LB配置文件(并在每次修改时重新加载配置).

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

在入口控制器中是一个 "controller",在 kubernetes 术语中是一个软件循环,用于侦听对声明性配置(入口资源)和相关 "state of the cluster" 的更改,比较两者,然后 "reconciles" 集群状态到声明式配置。

在这种情况下,"state of the cluster" 是以下组合:

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

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

就物理架构而言,将事物可视化为 "inside" 您的集群与 "outside" 或 "your cluster" 和 "the cloud." 客户可见的一切并不准确是一个抽象。

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

以入口为目的地的外部流量在到达 "your" 集群之前,会通过 Google 基础设施中的几个逻辑控制点,您无法了解其中的详细信息。