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 publicado usando o HELM. Para adicionar configurações é 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:”
kubectl get deployment -n ingress-basic
kubectl describe deployment nginx-ingress-ingress-nginx-controller -n ingress-basic

2) Localize arquivo configmap existente
kubectl get configmap -n ingress-basic

3) Edit o arquivo configmap e inclua os dados abaixo:

a) Editando um configmap existente
kubectl edit configmap nginx-ingress-ingress-nginx-controller -n ingress-basic

b) Exemplo de configuração adicional para o Ingress Controller
apiVersion: v1
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

Após salvar e fechar a configuração será aplicada.

3) Agora é necessário forçar a reinicialização dos pods
kubectl set env deployment nginx-ingress-ingress-nginx-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