Запустите веб-сервер Airflow за AWS ELB с HTTPS и перенаправьте страницу на http после щелчка, чтобы запустить DAG - PullRequest
1 голос
/ 02 августа 2020

Я использую веб-сервер airflow (версия 1.10.10) на EC2 позади AWS ELB

Вот конфигурация слушателя ELB

Load Balancer Protocol : SSL Load Balancer 
Port:      443 Instance
Protocol:       TCP Instance 
Port:           8080 
Cipher          omit here 
SSL Certificate          a cert here

перед ELB, я настроил route53 и установите fqdn на веб-сервер, скажем: ab c .fqdn

вся загрузка страниц работает, например https://abc.fqdn/admin/ или https://abc.fqdn/admin/airflow/tree?dag_id=tutorial

все отправленные веб-формы работают, как и Trigger DAG

однако после отправки формы страница перенаправляется на http, и страница не загружается из-за прослушивателя elb. Мне нужно вручную перейти на https, например https://admin/airflow/tree?dag_id=tutorial

вот что я сделал: я прочитал об этой статье: https://github.com/apache/incubator-superset/issues/978

затем на веб-сервере ec2 , я нашел этот файл /usr/local/lib/python3.7/site-packages/airflow/www/gunicorn_config.py

и этот пример конфигурации: https://gist.github.com/kodekracker/6bc6a3a35dcfbc36e2b7

Я добавил следующую конфигурацию, и мой файл конфигурации выглядит так, как показано ниже

import setproctitle
from airflow import settings

secure_scheme_headers = {
    'X-FORWARDED-PROTOCOL': 'ssl',
    'X-FORWARDED-PROTO': 'https',
    'X-FORWARDED-SSL': 'on'
}

forwarded_allow_ips = "*"

proxy_protocol = True

proxy_allow_from = "*"

def post_worker_init(dummy_worker):
    setproctitle.setproctitle(
        settings.GUNICORN_WORKER_READY_PREFIX + setproctitle.getproctitle()
    )

Однако новые конфигурации выше, похоже, не работают. Я что-то не так сделал? Как заставить веб-узел май переадресовывать на https после отправки формы?

1 Ответ

0 голосов
/ 06 сентября 2020

Для https я использовал вместо этого ALB ... Пришлось настроить веб-сервер Airflow, чтобы он имел crt (сгенерированный самоподписанный с доменом, который будет использоваться ALB), затем обслуживающий порт 8443 (выберите все, что вам нравится), затем настроить ALB для маршрутизации https к целевой группе, в которой экземпляры ASG веб-сервера находятся для 8443; и вы говорите ALB использовать подписанный сертификат, который у вас уже есть (а не самоподписанный сертификат, который есть в экземпляре) в вашей AWS учетной записи (возможно).

О, и измените baseURL на схему https.

У меня были проблемы с ELB, потому что я направлял аналогично 443 с сертификатом в AWS аккаунте на 8080, но 8080 был незашифрован ...

...