Keycloak – 502 Bad Gateway – upstream sent too big header

Préambule

Bonsoir à tous,

Petit article qui je pense, va peut-être servir à certain.

Voilà, j'utilise Keylcloak un SSO Open Source, je n'ai jamais eu de soucis mais récemment allez savoir pourquoi, lorsqu'un utilisateur faisait une demande d'inscription, cette dernière se faisait très bien mais lors de la redirection vers l'applicatif et bien ... PAF !! 502 Bad Gateway !!

Là, je me suis dit la fameuse phrase que tout dev a déjà exprimé plus ou moins violement .... WTF !!! (Je laisse les non sachant chercher la signification de ces lettres...)

Bon, je ne me laisse pas abattre, fais appelle à un très bon ami (qui se reconnaîtra ... merci Yannig) qui me met sur LA piste....

Contexte

Le contexte: Keycloak est installé au sein d'un cluster Kubernetes.

Pour gérer, son accès, j'ai déployé un Nginx Controller Ingress à l'aide d'un chart Helm.

Rien de bien sorcier, simple et efficace.

Recherche de l'erreur

Après avoir fouiné dans les logs des différents pods, je suis enfin tombé sur l'erreur dans la logs du Controller Ingress :

2021/06/17 18:56:26 [error] 412#412: *6344765 upstream sent too big header while reading response header from upstream, client: 10.2.2.0, server: xxxxxxxxxxxxxxxxxxxxxx, request: "POST /auth/realms/apiculture/login-actions/registration?session_code=xxxxxxxxxxxxxxxxxxxxxxx&execution=xxxxxxxxxxxxxx&client_id=front-apiculture&tab_id=EySUWyRuWfw HTTP/2.0", upstream: "http://xxxxxxxxxx:8080/auth/realms/xxxxxxxxxxxxxx/login-actions/registration?session_code=xxxxxxxxxxxxxxxxxxxxxxxxxx&execution=xxxxxxxxxxxxxxxxxxxxxxx&client_id=front-apiculture&tab_id=EySUWyRuWfw", host: "xxxxxxxxxxxxxxxxx"
10.2.2.0 - -

J'ai masqué volontairement certaines informations mais l'erreur est assez lisible.

Bon, il semble que le soucis est la taille du header... mais comment faire ?!?!

Résolution

Et bien cela est assez simple en fait et ça grâce à une petite recherche sur le net :

En utilisant un petit Configmap pour modifier la configuration de notre Controller Ingress !! Et passer le buffer size a une taille suffisante (16k)

Comment ? Et bien voici la solution :

  • Fichier configmap
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: kube-system
  labels:
    k8s-app: nginx-ingress-controller
data:
  proxy-buffer-size: "16k"
  • On modifie le fichier de déploiement de notre nginx-controller-ingress :
args:
  - /nginx-ingress-controller
  - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
  - --configmap=$(POD_NAMESPACE)/nginx-configuration

Et voilà on applique le tout sur notre cluster et le tour est joué !!

A bientôt pour de futur petit tips 😉