400 Bad Request – cookie too large

O NGINX INGRESS é um dos recursos utilizados no Kubernetes para receber as requisições externas e realizar um direcionamento para o serviço apropriado no cluster do Kubernetes.

Em alguns cenários na integração com o Keycloak, Identity Server e outros provedores de identidade pode vir a acontecer o erro 400 no nginx pelo tamanho do request e/ou tamanho do cookie.

No meu contexto utilizo o Azure Kubernetes Service (AKS) e nele adicionei um Ingress controller publicando usando o HELM. No meu cenário para adicionar configurações foi necessário incluir no arquivo Configmap. Nesse momento é necessário aumentar o buffer do nginx.

1) Verifique o deployment do ingress se tem uma tag do configmap em “Args:” e o valor “–configmap”.
kubectl get deployment -n ingress-basic

2) No meu cenário encontrei o deployment
nginx-ingress-nginx-ingress-controller

3) Execute um describe no deployment
kubectl describe deployment nginx-ingress-nginx-ingress-controller -n ingress-basic

4) Localize arquivo configmap existente. Se não exisir nós criaremos.
kubectl get configmap -n ingress-basic

5) Edit um arquivo arquivo configmap existente ou crie um novo com as configurações aumentando o buffer

Novo arquivo: nginx-keycloak.yaml

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration-keycloak
  namespace: ingress-basic
  labels:
    k8s-app: nginx-ingress-controller
data:
  client-header-buffer-size: 64k
  http2-max-field-size: 16k
  http2-max-header-size: 128k
  large-client-header-buffers: 8 64k
  proxy-buffer-size: 128k
  proxy-buffers: 4 256k
  proxy-busy-buffers-size: 256k


Execute o kubectl apply -f nginx-keycloak.yaml

6) Agora é necessário renicair os pods do ingress
kubectl set env deployment nginx-ingress-nginx-ingress-controller DEPLOY_DATE=”$(date)” -n ingress-basic


Obs: Esse artigo foi baseado no Azure AKS, Nginx Ingress publicado pelo helm no namespace ingress-basic.

Para mais informações:
Identity Server and NGINX Ingress Controller in Kubernetes
Fixing Nginx “upstream sent too big header” error when running an ingress controller in Kubernetes
How to Fix a 400 Bad Request Error [Causes and Fixes]

Para apoio na sua estratégia de modernização de aplicações e desenvolvimento de microsserviços Cloud-Ntive utilize o DevPrime Stack.

[],

Ramon Durães