Версия входного контроллера NGINX: 0.18.0
Версия Kubernetes (используйте версию kubectl): 1.11.1
Облачный провайдер или аппаратная конфигурация: Azure (AKS)
Установить инструменты: Шлем
Что произошло: Контроллер Ingress выдает ошибку 400 с определенным GET, когда URL / заголовок запроса "слишком длинный".
То, что вы ожидали, произойдет:
Запрос передается на правильный сервис и pod.
Как воспроизвести его (как можно более точно и минимально):
Мы используем Keycloak для аутентификации. Когда пользователь входит в GET, это делается с помощью токена доступа, который генерируется keycloak. Токен доступа дает пользователю определенные права в приложении. У пользователей есть роли, которые дают им другие / дополнительные разрешения. Когда у пользователя много ролей, токен доступа становится значительно длиннее, что приводит к 400 на контроллере ingres. С пользователем с меньшим количеством ролей все работает нормально, и мы видим, что запрос GET передается нужному сервису.
Все, что нам нужно знать:
Мы уже пытались изменить размер буфера заголовка и т. Д. От 4 до 8 и 16 Кб, но это ничего не дало.
Я установил лог-уровень входного контроллера для отладки, но он больше не дает информации об ошибке 400.