Добавление базовой аутентификации Ingress вызывает ответ 406 вместо 200 из бэкэнда загрузки Spring - PullRequest
0 голосов
/ 19 октября 2019

У меня есть бэкэнд-сервис 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. Я приложил много усилий для минимизациипроблема. Не стесняйтесь комментировать, если вы думаете, что включение фрагмента кода делает вопрос более ясным.

...