Липкая сессия Kubernetes ingress-nginx не работает с весенней безопасностью - PullRequest
0 голосов
/ 30 октября 2019

У меня есть приложение Spring с состоянием и я хочу развернуть его в кластере kubernetes. Будет более одного экземпляра приложения, поэтому мне нужно включить sticy session с помощью контроллера ingress-nginx. Я выполнил следующую конфигурацию:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "JSESSIONID"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    nginx.ingress.kubernetes.io/session-cookie-path: /ingress-test
    # UPDATE THIS LINE ABOVE
spec:
  rules:
     - http:
        paths:
          - path: /ingress-test
            backend:
              serviceName: ingress-test
              servicePort: 31080

ingress-nginx перенаправляет последующий запрос на исправление модуля в случае успешного входа. Однако иногда он переключается на другой модуль сразу после изменения JSESSIONID (cookie-файл JSESSIONID изменяется посредством Spring-Security после успешного входа в систему) и веб-интерфейс перенаправляет обратно на страницу входа, даже если учетные данные пользователя верны. Кто-нибудь пробовал ingress-nginx с spring-security?

С наилучшими пожеланиями

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Следующее изменение решило проблему. Без определения хоста в правилах ingress-nginx не устанавливает cookie сессии.

Есть открытый вопрос: https://github.com/kubernetes/ingress-nginx/issues/3989

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    nginx.ingress.kubernetes.io/session-cookie-path: /ingress-test
    # UPDATE THIS LINE ABOVE
spec:
  rules:
     - host: www.domainname.com
       http:
        paths:
          - path: /ingress-test
            backend:
              serviceName: ingress-test
              servicePort: 31080
0 голосов
/ 30 октября 2019

Причина, по которой Spring изменяет cookie, состоит в том, чтобы предотвратить фиксацию сеанса (дополнительную информацию можно найти здесь: https://www.owasp.org/index.php/Session_fixation).. В вашем случае вы используете тот же cookie для политики липкой маршрутизации, который используется Spring для обработки сеанса.

Я предлагаю использовать другое имя файла cookie - оно будет создано nginx, и нет необходимости использовать файл cookie, используемый приложением.

...