Ошибка веб-сервера Apache Airflow говорит о том, что файл ключей SSL не существует, хотя он там есть - PullRequest
0 голосов
/ 29 ноября 2018

Я очень плохо знаком с SSL, сертификатами и ключами, поэтому я благодарен за любую помощь и понимаю, что, возможно, я совершил глупую ошибку.

Я использую Docker Swarm на трех внутренних серверах CentOS 7,Swarm частично развертывает собственный образ Docker для запуска Apache Airflow 1.10.0 (в ближайшее время планируется обновление до 1.10.1).Образ начинается с FROM python:3.5-slim, основанного на Ubuntu.

Я следовал этому руководству , чтобы создать самозаверяющий CA, сертификаты и ключи.Я думаю, что это подходит для моего варианта использования, потому что серверы находятся во внутренней сети, и доступ к веб-серверу Airflow будут доступны только членам моей команды, пока они находятся на месте или используют VPN.

Частьdocker-compose.yml выглядит следующим образом, чтобы предоставить контейнерам доступ к сертификату и ключу:

version: 3.5
    services:
        [...]
    webserver:
        [...]
        volumes:
            - type: bind
              source: /root/ca/intermediate/certs
              target: /usr/local/airflow/intermediate/certs
            - type: bind
              source: /root/ca/intermediate/private
              target: /usr/local/airflow/intermediate/private

Я изменил владельца файлов из контейнеров на пользователя airflow в контейнере, поэтомучто приложение может их прочитать.

Соответствующее airflow.cfg выглядит следующим образом:

[webserver]
base_url = http://localhost:443
web_server_host = 0.0.0.0
web_server_port = 443
web_server_ssl_cert = /usr/local/airflow/intermediate/certs/my_server.cert.pem
web_server_ssl_key = /usr/local/airflow/intermediate/private/my_server.key.pem

Файлы .cert.pem и .key.pem одинаковы на всех трех серверах.Я сделал это, потому что подозреваю, что сетка маршрутизации Docker Swarm будет ожидать единообразия на всех серверах.(Является ли это уязвимостью или иным образом ошибкой?)

Dockerfile также EXPOSE s port 443.

Тем не менее, эта ошибка возникает, когда веб-сервер пытается запустить:

 Traceback (most recent call last):
 [2018-11-29 19:43:10 +0000] [36] [INFO] Starting gunicorn 19.9.0
   File "/usr/local/bin/gunicorn", line 11, in <module>
     sys.exit(run())
 Traceback (most recent call last):
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 61, in run
     WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
   File "/usr/local/bin/gunicorn", line 11, in <module>
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 223, in run
     sys.exit(run())
     super(Application, self).run()
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 72, in run
     Arbiter(self).run()
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 61, in run
   File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 199, in run
     WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
     self.start()
   File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 157, in start
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 223, in run
     self.LISTENERS = sock.create_sockets(self.cfg, self.log, fds)
   File "/usr/local/lib/python3.5/site-packages/gunicorn/sock.py", line 162, in create_sockets
     super(Application, self).run()
     raise ValueError('keyfile "%s" does not exist' % conf.keyfile)
   File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 72, in run
     Arbiter(self).run()
 ValueError: keyfile "/usr/local/airflow/intermediate/private/my_server.key.pem" does not exist
   File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 199, in run
     self.start()
   File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 157, in start
     self.LISTENERS = sock.create_sockets(self.cfg, self.log, fds)
   File "/usr/local/lib/python3.5/site-packages/gunicorn/sock.py", line 162, in create_sockets
     raise ValueError('keyfile "%s" does not exist' % conf.keyfile)
 ValueError: keyfile "/usr/local/airflow/intermediate/private/my_server.key.pem" does not exist

Итак, мой вопрос: как заставить Airflow правильно распознавать ключ и сертификат SSL?Документация Airflow по этому вопросу довольно краткая.

Я надеюсь, что предоставил достаточно контекста - рад предложить больше, если это поможет.Еще раз спасибо.

...