У меня небольшая проблема
Воздушный поток 1.10.10
Python 3,7
OS redhat enterprise
Среда GCP с вычислительными инстансами
Nginx Compute Instance
Мы с использованием (нескольких) Airflow и прохождения через обратный прокси NGINX (все на облачной платформе Google)
У нас есть основной домен (example.com), который перенаправляет в несколько местоположений в зависимости от их пути. Мы устанавливаем динамические c местоположения на основе переменных. Назовем это VarA и VarB. Это указывает на отдельные экземпляры, на которых запущен Airflow. Postgres БД отличается для каждого экземпляра в зависимости от развертывания веб-сервера.
Snippet of Nginx Conf
...
server_name example.com
location ~/airflow-<varA>-<varB>/.*
proxy_pass http://varA.example-instance.our-org.com/airflow-varB
Остальная часть блока местоположения, которую я настроил отсюда:
https://airflow.readthedocs.io/en/stable/howto/run-behind-proxy.html
У нас включены текущие настройки в airflow.cfg:
rbac = True
fernet_key = <the same for every image we build>
sercret_key = temporary_key (default)
base_url = <machine_dns_name:8080>
Когда наш CI создает и развертывает Airflow, мы можем правильно переходить к каждому экземпляру воздушного потока. Проблема:
После аутентификации с 1 экземпляром путем перехода по URL-адресу
EG
https://example.com/airflow-varA-varB `
Мы можем просматривать ВСЕ другие созданные нами экземпляры воздушного потока без аутентификации (имя пользователя и пароли ВСЕ разные для каждого экземпляра)
Когда мы создаем образ, мы используем airflow create_user
для создания первого пользователя в БД.
Я попытался добавить параметр
- Secure Cook ie
- SameSite Cook ie
- enable_proxy_fix
Все не работает.
Одна из вещей, которая вроде сработала, заключалась в том, что я изменил secret_key
на то, что мы установили вручную, а не os.urandom(16)
, как в исходном коде, и что позволило нам войти в систему по-разному для каждого экземпляра
ОДНАКО
Когда мы загрузили другой экземпляр в URL-адрес и нажали refre sh или вошли в другой экземпляр, он зарегистрировал первый зарегистрированный- в инстансе выключен.
ОБНОВЛЕНИЕ:
I k теперь он связан с USER_ID пользователя RBA C в таблице ab_user
(поскольку пользователь, которого мы создаем, всегда является пользователем 1)
Как я знаю, это потому, что если я изменил USERID в базе данных PG измените ab_user_roles
, чтобы отразить новый идентификатор пользователя в таблице ab_user
, и сделайте идентификатор пользователя случайным целым числом. Он работает, и я могу войти в один экземпляр, а другой экземпляр, если я загружу его в URL-адрес, запрашивает мне войти в систему.
Airflow не отправляет файлы cookie для связывания идентификатора пользователя, так как же это работает? Проблема в Gunicorn или Flask?
Я не хочу изменять USERID при создании пользователя I Airflow, потому что это не так безопасно. Любая помощь приветствуется