Использование привязки сеанса (файлы cookie) с сквозной передачей SSL на NGINX-Ingress

TL; DR: я хочу настроить привязку сеанса на основе файлов cookie в K8s через контроллер nginx-ingress с сквозной передачей SSL. Можно ли это сделать?


Всем привет,

У меня работает служба Azure Kubernetes (AKS) (1.11.3), и я настроил NGINX-Ingress контроллер для маршрутизации запросов в службу ClusterIP для моего приложения (в котором запущено минимум 2 модуля).

Я успешно настроил сквозную передачу SSL на контроллере входящего трафика, так что TLS завершается на модулях, и поэтому я могу использовать HTTP2 (согласно этому article). Теперь я хотел бы настроить привязку сеанса (с использованием файлов cookie), чтобы соединения направлялись в один и тот же модуль для поведения с отслеживанием состояния (вход в приложение).

Я пробовал использовать для этого следующие аннотации входящего объекта:

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-hash: "sha1"

Однако я не вижу cookie "маршрута", возвращенного по первому запросу. Я решил проблему, описанную здесь, и убедился, что вход настроен правильно . Затем я заметил это сообщение на документы:

Поскольку SSL Passthrough работает на уровне 4 модели OSI (TCP), а не на уровне 7 (HTTP), использование SSL Passthrough делает недействительными все другие аннотации, установленные для объекта Ingress.

В. Означает ли это, что использование привязки сеанса с сквозной передачей SSL не рассматривается? В том, что Ingress не сможет идентифицировать соединение / файл cookie (поскольку он зашифрован SSL) и направить его в ранее связанный модуль?


person Matt Woodward    schedule 08.03.2019    source источник


Ответы (1)


Короткий ответ: нет, это невозможно. Уровень 4 не понимает, что такое http, он просто видит, как байты текут туда и обратно. Вместо этого у вас может быть привязка на основе IP-адреса, но не с помощью файлов cookie, поскольку для этого потребуется прокси-решение уровня 7. В зависимости от вашей ситуации вы можете запустить прокси на уровне 7, который сможет расшифровать трафик, а затем зашифровать его другим сертификатом для внутреннего использования. Вся полезная нагрузка (например, за вычетом SNI) не зашифрована в соответствии с SSL, а это означает, что для того, чтобы сделать некоторую привязку к файлам cookie, прокси-сервер должен будет расшифровать данные перед их проверкой.

person user1086801    schedule 08.03.2019
comment
Спасибо, это подтверждает то, что я слышал из нескольких источников. Спасибо, что нашли время ответить и поделиться некоторыми мыслями об альтернативных решениях, очень признательны :) - person Matt Woodward; 09.03.2019