SSL-сертификат для ОС, оптимизированной для контейнеров (Docker) - PullRequest
2 голосов
/ 21 июня 2020

Вопрос: как сделать так, чтобы веб-трафик c проходил через сервер certbot, а ЗАТЕМ через ваше приложение, когда порт 80/443 может быть назначен только одному серверу в ОС с оптимизированным контейнером?

Контекст: обычный certbot install не работает для "Оптимизированной для контейнеров ОС" Google Cloud (которая запрещает доступ для записи, поэтому ни один файл не может быть выполнен). Итак, я использовал контейнер cerbot docker от letsencrypt, но для этого требуется, чтобы был открыт порт 80/443, который использует мое текущее веб-приложение.

Раньше я запускал certbot, а затем останавливал сервер на своем старый экземпляр и сертификация останется на 90 дней. Однако запуск контейнера certbot docker предоставляет SSL только тогда, когда он работает на порте 80/443, но после остановки сертификат SSL больше не действителен.

Docker для letsencrypt: https://hub.docker.com/r/linuxserver/letsencrypt

Docker веб-приложение, которое я хочу разместить на порту 80/443: https://hub.docker.com/r/lbjay/canvas-docker

Информация об экземпляре, оптимизированном для контейнеров Google: https://cloud.google.com/container-optimized-os/docs/concepts/features-and-benefits

1 Ответ

2 голосов
/ 12 июля 2020

Вот решение для использования проверки DNS для Certbot через облачный DNS в образе контейнера certbot/dns-google. Он будет использовать учетные данные учетной записи службы для запуска подключаемого модуля certbot-dns-google в исполняемом контейнере; это настроит сертификаты LetsEncrypt в привязанном к привязке месте на хосте.

Сначала вам нужно добавить файл в свой экземпляр с учетными данными учетной записи службы для Администратор DNS роль - подробности см. В примечаниях ниже. В приведенном ниже примере команды файл учетных данных имеет вид dns-sv c -account. json (помещается в рабочий каталог, из которого вызывается команда).

docker run --rm \
    -v /etc/letsencrypt:/etc/letsencrypt:rw \
    -v ${PWD}/dns-svc-acct.json:/var/dns-svc-acct.json \
    certbot/dns-google certonly \
        --dns-google \
        --dns-google-credentials /var/dns-svc-acct.json \
        --dns-google-propagation-seconds 90 \
        --agree-tos -m team@site.com --non-interactive \
        -d site.com

Некоторые примечания по флагам:

  • -v config-dir-mount

    Это монтирует каталог конфигурации, чтобы файлы Certbot создает в контейнере и распространяется в файловой системе хоста.

  • -v credentials-file-mount

    Это монтируется учетные данные учетной записи службы с хоста на контейнере.

  • --dns-google-credentials path-to-credentials

    Контейнер будет использовать учетные данные подключенной учетной записи службы для администрирования изменений в Cloud DNS для проверки на сервере ACME (включая создание и удаление записи DNS TXT).

  • --dns-google-propagation-seconds n | необязательно, по умолчанию: 60

  • --agree-tos, -m email, --non-interactive | необязательно

    Это может быть полезно для неинтерактивного запуска контейнера; они особенно полезны, когда взаимодействие с пользователем может быть невозможно (например, непрерывная доставка).

  • Справочник по командной строке Certbot

...