增加proxy_send_timeout和proxy_read_timeout入口nginx

din*_*ina 3 nginx kubernetes google-kubernetes-engine

我正在GKE上运行部署,

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

我正在尝试增加proxy_send_timeoutproxy_read_timeout关注此链接

这是我的入口配置:

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
Run Code Online (Sandbox Code Playgroud)

仍然不会改变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/"
Run Code Online (Sandbox Code Playgroud)

当我进入Nginx容器时:

> kubectl exec -it nginx-ingress-controller-xxxx-yyyy -n ingress-nginx -- bash
> cat /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)

输出:

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;
Run Code Online (Sandbox Code Playgroud)

proxy_send_timeoutproxy_read_timeout设置为60s而不是360s我在入口配置的

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

如何在入口上立即配置超时?

小智 8

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

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

  • 需要明确的是,它必须是一个引用的数字!“360”很好,但不是 360、360s 或“360s” (8认同)

小智 8

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

例子:

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
Run Code Online (Sandbox Code Playgroud)