Докер сочиняет 3.1(рой), секреты, ssl и nginx

У меня nginx работает внутри контейнера докера. В файле conf nginx внутри блока сервера я поместил в конфигурацию ssl - порт, crt и ключ. Простейший возможный способ найти файлы crt и key для nginx - это создать секрет докера для двух файлов, и он монтируется в /run/secrets/, когда порождается служба. Однако я хочу, чтобы в образе докера были файлы crt и key, которые могут быть как из готовых файлов, которые может использовать nginx, и если клиент создает секрет и подключает файлы crt и key, я хочу, чтобы nginx использовал их,

Переходя к документам составления файла 3.1 для секрета, я понял, что либо секрет должен существовать заранее, либо должен быть создан как часть файла составления. Теперь проблема заключается в том, что если он должен существовать заранее, то я заставляю клиента создавать секрет (что означает не только создание секрета, но также наличие файлов crt и key, готовых для передачи в качестве входных данных для команды create secret). Если я создаю его в файле compose, мне все равно нужен доступ к файлам crt и key, которые клиент должен предоставить. Что означает, в любом случае, вещь не работает из коробки.

Как мне это решить?

Если кто-то прочитал это далеко и до сих пор не потерял интерес, даже если вышеуказанное будет решено, другая проблема, с которой я сталкиваюсь, заключается в том, что в Config nginx я не могу указать 2 сертификата в порядке приоритета, чтобы выбрать их под одним и тем же блок сервера. У кого-нибудь тоже есть идеи по этому поводу?

1 ответ

Я думаю, что лучшим вариантом для вас является создание собственного сценария точки входа для контейнера NGINX в сочетании с переменными среды и шаблоном nginx.conf. Они позаботятся о правильной конфигурации сертификатов.

Ваш скрипт будет выглядеть примерно так (с учетом альпийского изображения):

#!/bin/sh

if  [ -z $CERTS_FOLDER ]; then CERTS_FOLDER="/etc/nginx/default_crts/"; fi
sed -i "s|{CERTS_FOLDER}|${CERTS_FOLDER}|g" /etc/nginx/nginx.conf

nginx -g "daemon off;"

И соответствующий раздел в вашем nginx.conf будет выглядеть так:

server {
    listen                  443 ssl;
    ssl                     on;
    server_name             my-server;
    ssl_certificate         {CERTS_FOLDER}my-server.crt;
    ...

Таким образом, вы можете предоставить некоторые готовые сертификаты и переопределить их, используя переменные среды compose.

Другие вопросы по тегам