4 votes

uWSGI et NGINX 502 : connexion fermée prématurément en amont

J'ai un cluster Kubernetes qui exécute une application Django dans un conteneur docker servi par uWSGI. Le contrôleur ingress est ingress-nginx (celui-ci : https://github.com/kubernetes/ingress-nginx ).

Récemment, j'ai effectué une mise à niveau de l'ensemble du cluster de la version 1.9 à la version 1.11, et en raison de certains problèmes, j'ai dû exécuter le programme suivant kubeadm reset y kubeadm init encore.

Depuis lors (je suppose), je reçois parfois d'étranges erreurs 502 signalées par les utilisateurs : upstream prematurely closed connection while reading response header from upstream .

Le plus gros problème pour moi est que ces requêtes ne sont pas visibles dans les journaux uWSGI au sein du conteneur et que je n'ai donc aucune idée de ce qui se passe.

Voici mon fichier uwsgi.ini :

[uwsgi]

http = 0.0.0.0:8000
# Django-related settings
# the base directory (full path)
chdir = /app
# Django's wsgi file
module = in_web_server.wsgi:application
pythonpath = /app

static-map = /static=/app/static

# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# clear environment on exit
vacuum = true

# spooler setup
spooler = /spooler
spooler-processes = 2
spooler-frequency = 10

Dockerfile CMD : CMD ["/usr/local/bin/uwsgi", "--ini", "/app/in_web_server/docker/in/in_web_server_uwsgi.ini"]

Kubernetes Ingress :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: in-debug
  namespace: in-debug
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($request_uri ~ "^[^?]*?//") {
          rewrite "^" $scheme://$host$uri permanent;
      }
spec:
  rules:
  - host: test-in
    http:
      paths:
      - path: "/"
        backend:
          serviceName: in-debug
          servicePort: 8000

Ces erreurs ne concernent que les demandes PUT plus importantes (mais pas très importantes). Par plus grosses, j'entends ~300KB, donc ce n'est pas un gros problème.

De plus, l'erreur 502 est renvoyée après environ 1 minute, il y a donc peut-être un problème de délai d'attente. Cependant, je ne suis pas en mesure de le localiser car il n'y a aucune trace dans le journal uwsgi. Avez-vous une idée de ce que je fais de mal ?

2voto

Barett Points 876

De https://monicalent.com/blog/2013/12/06/set-up-nginx-and-uwsgi/ J'ai découvert l'option "limit-as" qui restreint la taille de la mémoire virtuelle du processus et peut être responsable du code d'erreur 502 avec le message "upstream prematurely closed connection".

0voto

VAS Points 360

En fonction des problèmes rencontrés (voir la liste ci-dessous), je recommanderais d'essayer de désactiver la mise en mémoire tampon et d'expérimenter les valeurs de délai d'attente. Par exemple, essayez de les mettre dans le contrôleur nginx-ingress config-map et les supprimer de la configuration de l'objet Ingress.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: in-debug
  namespace: in-debug
  annotations:
    nginx.org/proxy-buffering: "False"
...

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-config
data:
  proxy-connect-timeout: "600s"
  proxy-read-timeout: "600s"
  client-max-body-size: "5m"

Liste des questions :

Manuels :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X