Воздушный поток за двумя обратными прокси-серверами - граф GET-запрос не содержит DAG ID - PullRequest
0 голосов
/ 10 февраля 2020

Мои настройки:

Я запускаю Airflow 1.10.9 за двумя nginx прокси. Первый прокси пересылает запросы второму прокси, находящемуся в частной сети. Второй прокси-сервер перенаправляет запрос на запрошенный экземпляр Airflow, где хост URL-адреса указан в URL. По сути, это позволяет нам запускать несколько экземпляров воздушного потока и правильно направлять их.

Я также обновил базовый_url Airflow до http://myhost/airflow-<airflowid>/ Здесь часть идентификатора воздушного потока в URL-адресе определяет, как второй прокси-сервер определяет, на какую машину пересылать данные.

Настройка прокси работает, пользовательский интерфейс Airflow доступен, и я вижу свои DAGS, загруженные в пользовательский интерфейс. Однако при попытке взаимодействия с группой обеспечения доступности баз данных появляется следующая ошибка:

DAG "None" seems to be missing.

Я отследил проблему до запроса GET, который достигает пользовательского интерфейса Airflow. Я вижу, что запрос не содержит идентификатора DAG. На моем рабочем экземпляре Airflow (тот, который не работает за какими-либо прокси-серверами) Запрос содержит DAG ID run_etl:

"GET /graph?dag_id=run_etl&root=&execution_date=2020-02-10T11%3A42%3A14.454118%2B00%3A00 HTTP/1.1" 200 10174 "http://10.83.163.248:3128/graph?dag_id=run_etl" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"

На экземплярах Airflow, работающих в частной сети, Запрос GET не содержит идентификатор DAG:

"GET /admin/airflow/graph HTTP/1.1" 302 221 "https://<redacted host>/admin/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"

Моя nginx Конфигурация выглядит следующим образом:

Прокси 1:

server {
    listen 443 ssl;
    server_name  <redacted server name>;

    location ~ /airflow-(.*) {
        proxy_pass http://172.23.7.79:80;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Прокси 2:

server {
    listen     80;

    location ~ /airflow-([^\/]+)/(.*) {
        proxy_pass http://$1-<redacted hostname>:8080/airflow-$1/$2;
        proxy_redirect  off;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

}

Будем весьма благодарны за любые мысли о том, что здесь не так!

1 Ответ

0 голосов
/ 10 февраля 2020

Ответ оказался более прямым, чем я ожидал.

Прокси 2 нуждается в некоторой дополнительной конфигурации для передачи URL-запроса при передаче прокси.

proxy_pass http://$1-<redacted hostname>:8080/airflow-$1/$2$is_args$args;

Ref: Как можно пересылать строковые параметры запроса через proxy_pass с nginx?

...