Nginx 报告 "upstream connection timeout"

Nginx reports "upstream connection timeout"

说明: k8s nginx-ingress-controllers 以负载均衡器类型(由 metallb 实现)公开,ip 地址为 192.168.1.254。另一个nginx集群在k8s集群前面,它只有一个upstream是192.168.1.254(lb ip addr)。请求流程route:client -> nginx clusters -> nginx-ingress-controllers-> services.

问题: 有时 nginx 集群报告非常小的“上游(192.168.1.254)超时”,最后客户端从 nginx 获得 504 超时。

但是当我删除 nginx 集群并将请求流切换到:客户端 -> nginx-ingress-controllers-> services.It 进行顺利并且客户端没有任何 504 超时 more.I am确保 nginx 集群和 nginx 入口控制器之间的网络运行良好。

大多数请求都可以由 nginx 集群处理,return 状态 200.I 不知道为什么很少有请求报告“上游超时”和 return 状态 504。

system architecture

nginx cluster reports timeout

tcpdump package track

这很可能是文件上传速度慢(您显示的请求都是 POST),超出了限制。

您可以为可以上传的应用程序路径设置更大的超时值。如果您正在使用入口控制器,您最好为此创建一个单独的入口对象。您可以使用 these 注释管理超时,例如:

  annotations:
    nginx.ingress.kubernetes.io/proxy-send-timeout: 300s
    nginx.ingress.kubernetes.io/proxy-read-timeout: 300s

这两个注释将最大上传时间定义为 5 分钟。

如果您手动配置 nginx,您可以使用 proxy_read_timeout and proxy_send_timeout 设置限制。