Как обрабатывать декларативную конфигурацию Nginx с помощью Let's Encrypt?
Я управляю экземпляром nginx, который выполняет балансировку нагрузки http и TLS-терминацию.
До сих пор я создавал сертификаты TLS вручную, используяcertbot --nginx
и выбираем хост, для которого я хотел бы арендовать сертификат.
Я хотел бы, чтобы мой сервер опрашивал репозиторий git, который служит единственным источником достоверной информации о моей конфигурации nginx (GitOps).
Как мне выполнить автоматическое создание и обновление сертификатов ACME TLS для моей конфигурации nginx (желательно с использованием сертификатов Let's Encrypt)?
Полагаю, понадобится что-то (сертбот?), чтобы:
- определить, каким блокам серверов нужны SSL-сертификаты,
- запустить вызов ACME,
- сохраните сертификат в заданном месте или предскажите местоположение по умолчанию при написании конфигурации nginx.
- продлить сертификат до истечения срока его действия
Как справиться с этой задачей?
http {
# upstreams pointing to kubernetes clusters
upstream development {
server 192.168.XX.XX;
server 192.168.XX.XX;
server 192.168.XX.XX;
}
upstream staging {
server 192.168.XX.XX;
server 192.168.XX.XX;
server 192.168.XX.XX;
}
# example config for one application running on development cluster
server {
server_name dev.app1.example.com;
proxy_set_header Host $host;
location / {
proxy_pass https://development;
}
listen 443 ssl;
ssl_certificate /path/to/fullchain.pem; # how would I generate those without manual intervention?
ssl_certificate_key /path/to/privkey.pem; # how would I generate those without manual intervention?
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
}
Сноска. Я знаю, что я мог бы просто выполнить балансировку нагрузки TCP и обработать завершение TLS восходящим потоком, но я хотел бы управлять одним балансировщиком нагрузки, который может выполнять маршрутизацию на основе пути к различным восходящим потокам (также пик SSL кажется немного неприятным).
TLDR: Я ищу декларативный способ управления моей конфигурацией nginx, который также позаботится об управлении сертификатами.