【问题标题】:increase proxy_send_timeout and proxy_read_timeout ingress nginx增加 proxy_send_timeout 和 proxy_read_timeout 入口 nginx
【发布时间】:2019-05-04 16:13:07
【问题描述】:

我正在 GKE 上运行部署,

使用quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.12.0 图像作为 nginx-ingress-controller

我正在尝试增加proxy_send_timeoutproxy_read_timeout 关注此link

这是我的入口配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: production
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "360s"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "360s"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "360s"
    nginx.ingress.kubernetes.io/proxy-body-size: 100m
    nginx.ingress.kubernetes.io/client-body-buffer-size: 100m
spec:
  rules:
  - host: app.my.com
    http:
      paths:
      - backend:
          serviceName: front-app
          servicePort: 80
  - host: api.my.com
    http:
      paths:
      - backend:
          serviceName: backend-app
          servicePort: 80
  - host: api.old.com
    http:
      paths:
      - backend:
          serviceName: backend-app
          servicePort: 80
  tls:
  - hosts:
    - app.my.com
    - api.my.com
    secretName: tls-secret-my-com
  - hosts:
    - api.old.com
    secretName: tls-secret-old-com

这仍然不会改变 proxy_send_timeoutproxy_read_timeout

超过 60 秒(默认 nginx 超时)的请求被关闭

我看到了这个日志:

[error] 20967#20967: * upstream prematurely closed connection while reading response header from upstream, client: 123.456.789.12, server: api.my.com, request: "GET /v1/example HTTP/2.0", upstream: "http://11.22.3.44:4000/v3/example", host: "api.my.com", referrer: "https://app.my.com/"

当我进入 nginx pod 时:

> kubectl exec -it nginx-ingress-controller-xxxx-yyyy -n ingress-nginx -- bash
> cat /etc/nginx/nginx.conf

输出:

server {
    server_name _ ;

    listen 80 default_server  backlog=511;
    location / {
        # Custom headers to proxied server

        proxy_connect_timeout                   5s;
        proxy_send_timeout                      60s;
        proxy_read_timeout                      60s;

proxy_send_timeoutproxy_read_timeout 设置为 60s 而不是 360s,正如我在入口上配置的那样

所以我尝试手动更改nginx conf 上的超时,然后我没有在客户端获得超时,但是每次重启nginx 时值都会返回到默认值60s

如何正确配置入口的超时时间?

【问题讨论】:

    标签: nginx kubernetes google-kubernetes-engine


    【解决方案1】:

    基于:https://github.com/kubernetes/ingress-nginx/issues/2007

    尝试将注释中的值更改为“360”。该值必须是一个数字。

    【讨论】:

    • 要清楚,它必须是引用的数字! “360”会很好,但不是 360、360s 或“360s”
    【解决方案2】:

    根据Kubernetes documentation,您应该使用被视为字符串的数值。

    例子:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: webapp-domain-local
      annotations:
        nginx.ingress.kubernetes.io/proxy-connect-timeout: "10"
        nginx.ingress.kubernetes.io/proxy-read-timeout: "1"
    spec:
      rules:
      - host: webapp.domain.local
        http:
          paths:
          - backend:
              serviceName: webapplication
              servicePort: 8080
    

    【讨论】:

    • 如何将其更改为连接以关闭而不是保持活动
    【解决方案3】:

    如下图使用注解

         kubernetes.io/ingress.class: nginx
         kubernetes.io/ingress.allow-http: "false"
         nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
         nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    

    它应该反映在如下的 nginx conf 文件中

    
                            proxy_send_timeout                      3600s;
                            proxy_read_timeout                      3600s;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 2019-12-11
      • 2020-02-26
      • 2018-05-29
      • 2018-07-04
      • 1970-01-01
      相关资源
      最近更新 更多