【问题标题】:NGINX ingress controller timing out request after 60sNGINX 入口控制器在 60 秒后超时请求
【发布时间】:2019-06-19 08:03:46
【问题描述】:

当一个请求需要超过 60 秒来响应时,入口控制器似乎会弹跳

据我所知,我们的 NGINX 入口控制器在处理请求超过 60 秒后向客户端返回 504。我可以从 NGINX 日志中看到这一点:

2019/01/25 09:54:15 [error] 2878#2878: *4031130 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.244.0.1, server: myapplication.com, request: "POST /api/text HTTP/1.1", upstream: "http://10.244.0.39:45606/api/text", host: "myapplication.com"
10.244.0.1 - [10.244.0.1] - - [25/Jan/2019:09:54:15 +0000] "POST /api/text HTTP/1.1" 504 167 "-" "PostmanRuntime/7.1.6" 2940 60.002 [default-myapplication-service-80] 10.244.0.39:45606 0 60.000 504 bdc1e0571e34bf1223e6ed4f7c60e19d

第二个日志项显示 上游响应时间请求时间 均为 60 秒(请参阅 NGINX log format here

但我在入口配置中已将所有超时值指定为 3 分钟:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: aks-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/send_timeout: "3m"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "3m"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3m"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3m"
spec:
  tls:
  - hosts:
    - myapplication.com
    secretName: tls-secret
  rules:
  - host: myapplication.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myapplication-service
          servicePort: 80

我错过了什么?

我在 Azure (AKS) 上使用 nginx-ingress-1.1.0 和 k8s 1.9.11。

【问题讨论】:

  • 您能从其中一个控制器 Pod 中获取实际的 nginx.conf 并将其发布吗? kubectl exec $pod cat /etc/nginx/nginx.conf 应该这样做

标签: kubernetes kubernetes-ingress azure-aks nginx-ingress


【解决方案1】:

因为您似乎使用的是来自 ngnix.com 的实际入口,所以您需要使用 nginx.org/proxy-connect-timeout: "3m" 样式注释,如您在 their example

我仍然很确定我的调试技巧 kubectl cp-ing 控制器 Pod 上的 nginx.conf 会帮助您自己调试这种情况,但是阅读您的入口控制器的文档肯定会路也很远

虽然这对您来说可能无关紧要,但他们的 latest release 也是 1.4.3,所以我希望您故意使用旧版本。

【讨论】:

【解决方案2】:

通过为这些注释提供整数值(以秒为单位)解决了该问题:

nginx.ingress.kubernetes.io/proxy-connect-timeout: "180"
nginx.ingress.kubernetes.io/proxy-read-timeout: "180"
nginx.ingress.kubernetes.io/proxy-send-timeout: "180"

NGINX 入口控制器的this variation 似乎需要这样。

【讨论】:

  • 非常感谢您发布您的解决方案。对我来说也很有魅力
  • 这是否意味着无法以毫秒为单位进行设置?
猜你喜欢
  • 1970-01-01
  • 2013-01-02
  • 2017-09-03
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 2018-05-08
相关资源
最近更新 更多