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