PGadmin4 в Kubernetes: сессия недействительна при использовании ELB - PullRequest
0 голосов
/ 11 февраля 2019

У меня странная проблема с PGAdmin4.

Моя настройка

  • pgadmin 4.1, развернутая на kubernetes с использованием образа chorss/docker-pgadmin4.Один POD только для упрощения поиска неисправностей;
  • Nginx ingress controller в качестве обратного прокси-сервера в кластере;
  • Classic ELB впереди для балансировки нагрузки входящего трафика в кластере.

ELB <=> NGINX <=> PGADMIN

С точки зрения DNS, имя хоста pgadmin - это CNAME по отношению к ELB.

Проблема

ПриложениеПравильно достижимо, пользователи могут войти и все работает просто отлично.Проблема в том, что через пару (примерно 2-3) минут сеанс становится недействительным, и пользователям предлагается снова войти в систему.Это происходит независимо от того, активно ли используется pgadmin или нет.

После бесчисленных часов устранения неполадок я обнаружил, что проблема возникает, когда DNS-разрешение CNAME ELB переключается на другой IP-адрес.

На самом деле я попытался:

  • подключиться к модулю напрямую, напрямую подключившись к порту узла k8s service => сеанс не истек;
  • подключение кnginx (в обход ELB) напрямую => сеанс не истекает;
  • отображение одного из IP-адресов ELB в моем файле hosts => сеанс не истекает.

Учитывая приведенный выше тест, я бы пришел к выводу, что приложение Flask (PGAdmin4, очевидно, является приложением Python Flask) считает мой файл cookie недействительным после изменения удаленного адреса для моего имени хоста.

Любой разработчик Flask, который может мне помочьисправить эту проблему?Любая другая идея о том, что я мог бы пропустить?

Ответы [ 2 ]

0 голосов
/ 11 августа 2019

Для тех, кто ищет решение, вам нужно добавить ниже к config.py или config_distro.py или config_local.py

config_local.py

SESSION_PROTECTION = None
0 голосов
/ 19 февраля 2019

PGadmin 4, похоже, использует Flask-Security для аутентификации:

pgAdmin использовал модуль Flask-Security для управления безопасностью приложения и пользователями, а также предоставляет опции для самостоятельного сброса пароля, изменения пароля и т. Д..

https://www.pgadmin.org/docs/pgadmin4/dev/code_overview.html

Flask-Security использует Flask-Login:

Многие из этих функций стали возможными благодаря интеграции различных расширений Flaskи библиотеки.Они включают в себя: Flask-Login ...

https://pythonhosted.org/Flask-Security/

Flask-Login имеет функцию "защита сеанса":

Когда защита сеанса активна, каждый запрос генерирует идентификатор для компьютера пользователя (в основном, безопасный хэш IP-адреса и пользовательский агент).Если у сеанса нет связанного идентификатора, сгенерированный будет сохранен.Если у него есть идентификатор, и он соответствует сгенерированному, тогда запрос в порядке.

https://flask -login.readthedocs.io / en / latest / # session-protection

Я бы предположил, что установка login_manager.session_protection = None решит проблему, но, к сожалению, я не знаю, как установить ее в PGadmin.Надеюсь, это поможет вам.

...