Докер сочиняет 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.