web-dev-qa-db-fra.com

augmenter proxy_send_timeout et proxy_read_timeout nginx d'entrée

Im exécutant des déploiements sur GKE,

en utilisant quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.12.0 image en tant que nginx-ingress-controller

J'essaie d'augmenter proxy_send_timeout et proxy_read_timeout suivant ceci lien

voici ma configuration d'entrée:

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

cela ne change toujours pas le proxy_send_timeout et proxy_read_timeout

les demandes qui prennent plus de 60 secondes (délai d'expiration nginx par défaut) sont fermées

Je vois ce journal:

[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/"

quand je vais dans le pod nginx:

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

production:

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_timeout et proxy_read_timeout sont définis sur 60s et pas 360s comme je l'ai configuré sur l'entrée

j'ai donc essayé de modifier manuellement le délai d'expiration sur nginx conf, puis je n'ai pas obtenu le délai d'expiration sur le client, mais à chaque redémarrage de nginx, les valeurs sont renvoyées à la valeur par défaut 60s

comment puis-je configurer currectly les délais d'attente sur l'entrée?

3
dina

Basé sur: https://github.com/kubernetes/ingress-nginx/issues/2007

Essayez de changer la valeur de l'annotation en "360". La valeur doit être un nombre.

8
Axel

Selon documentation Kubernetes vous devez utiliser des valeurs numériques traitées comme une chaîne.

Exemple:

  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```

2
Bas Roovers