У меня есть бэкэнд-сервис Spring Boot и сервис веб-интерфейса React. Они бегут на Кубернетес. Запрос GET от внешнего интерфейса к внутреннему возвращает 200. Всякий раз, когда я указываю базовую аутентификацию на входе внешнего интерфейса с
metadata:
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: test-basic-auth
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required - test"
, внутренний компонент возвращает 406. Я вижу, что он отправляется Spring Boot в журналах:
2019-10-19 11:07:47.672 WARN 1 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]
Введенный интерфейсный вход
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-unacceptable-and-unauthorized-response-frontend
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: test-basic-auth
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required - test"
spec:
rules:
- host: test.com
http:
paths:
- path: /
backend:
serviceName: kubernetes-unacceptable-and-unauthorized-response-frontend
servicePort: 80
, в котором проблему можно многократно выключать и включать, удаляя или применяя патч metadata
, показанный выше. Внутренний вход является
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-unacceptable-and-unauthorized-response-backend
spec:
rules:
- host: test.com
http:
paths:
- path: /rest/control
backend:
serviceName: kubernetes-unacceptable-and-unauthorized-response-backend
servicePort: 80
Насколько я понимаю, основываясь на https://kubernetes.github.io/ingress-nginx/user-guide/ingress-path-matching/ и других документах, я считаю, что базовая аутентификация предназначена только для внешнего интерфейса. И даже если бы это было и для бэкэнда, я бы ожидал, что 401 без запроса не достигнет бэкэнд-сервиса, а не 406. От сервиса.
Я воспроизводлю эту проблему на microk8s 1.15.5 (984) в Ubuntu 19.04 с Spring Boot 2.1.8 и nginx-ингресс-диаграммой 1.24.3, указав test.com
на localhost
в /etc/hosts
.
, так как необходимый код очень полезен длявопрос и все как-то актуальны, но не совсем (вы можете представить себе контроллер Spring Boot REST, который отвечает OK, а также приложение реагирования, которое печатает response.ok
) Я предоставляю https://gitlab.com/krichter/kubernetes-unacceptable-and-unauthorized-response. Я приложил много усилий для минимизациипроблема. Не стесняйтесь комментировать, если вы думаете, что включение фрагмента кода делает вопрос более ясным.