Nginx-Ingress 控制器后面的 Nginx 服务器

Tod*_*ams 1 load-balancing nginx kubernetes

我们决定将我们的应用程序从 Service:LoadBalancer 迁移到 Ingress,我选择了Nginx Ingress Controller,因为我很熟悉它,而且它是 Kubernetes 世界中最受欢迎的控制器之一

之前我们有 Nginx => Uwsgi 组合来支持 ELB。我们从源代码编译 nginx,因为我们需要一些 3rd 方模块和 Lua 支持。

ELB => Nginx Server => UWSGI
ELB => Nginx Ingress (Load Balancer) => Nginx (Server) => UWSGI
Run Code Online (Sandbox Code Playgroud)

我的问题是:代理链中可以有 2 个 nginx 吗?

我理解一个是扮演LoadBalancer的角色,另一个就是服务器本身。但对我来说,它伴随着痛苦,就像如果我更改服务器 nginx.conf 中的某些选项,例如将客户端主体的大小增加到 8MB,我应该在 Nginx-Ingress 上执行相同的操作。另外我想知道如何设置超时:因为 ingress=>server 和 server=>uwsgi 之间存在超时,并且一般来说,在请求到达应用程序之前如何在拥有 3 个代理的情况下调整性能?

删除 Nginx Server 以便 Ingress Controller 同时充当服务器和负载均衡器是一个好习惯吗?我们使用的第三方模块怎么样?

Jon*_*ton 5

  1. 原则上在代理链中拥有 2 个或更多 nginx 并没有什么问题,除了问题和下面提到的额外的复杂性之外。
  2. 在多个代理之间保持一致的配置是一件很痛苦的事情,特别是让上游配置渗入入口。当同一个入口为多个上游提供不同的流量需求时,情况可能会变得非常复杂。但这往往是不可避免的。
  3. 每个跃点都有自己独特的超时和重试配置,管理它们可能很复杂,特别是当上游有重试时的下游超时。人们可能会遇到非常奇怪的故障模式。
  4. 将应用程序与入口控制器捆绑在一起并不是一个好主意。Ingress 旨在为集群外流量提供进入集群的稳定入口点,并将该流量分发到集群中的多个上游应用程序。如果只有一个上游应用程序,则实际上不需要入口,因此如果可能的话,最好将其公开为一项服务,使用 NodePort 或 LoadBalancer,具体取决于具体情况。