Let’s Encrypt крут, но имеет ряд ограничений
- 50 сертификатов в неделю и 5 дублирующих за этот же период времени (раньше вроде было меньше сертификатов)
- Надо настраивать выпуск везде, где он используется, причем, без DNS challenge часто обновление не работает (не как факт, а из опыта настройки не мной, буквально на днях столкнулся с подобной проблемой)
У меня дома в traefik на текущий момент уже более 58 маршрутов и они постоянно добавляются.
Не буду в данном топике расписывать свой traefik кластер, но имею следующие узлы с certbot
- 4 traefik ноды
- truenas
- jellyfin
- mikroik router
- Home-assitant
- Старый сервер с certbot и bash скриптами деплоя (я сейчас от него избавляюсь)
- хз, может что-то еще
Раньше был еще NPM, но с него ушел на traefik
Вопрос в чем, как правильно и удобно все еще организовать с минимальным количеством перевыпуска сертификатов?
В traefik раньше был рашинг сертификатов, но от него отказались и в 3 версии сейчас на каждой ноде свой файл (я начинал разбираться с кубером, но так и не осилил эту тему за один заход)
Вариант 1. Базовый
Забиваем на это и выпускаем где надо сертификат, надеемся, что не упремся в лимиты
Вариант 2. Скриптовый
У меня он был ранее реализован. Выпускаем wildcard сертификат и копируем его куда надо.
Смысл в том, что у нас есть один инстанс с certbot, как правило, там еще и nginx крутится и в хуках получения сертификатов мы пишем кучу скриптов, которые копируют новый сертификат на нужный хост и там его применяют, но получается, что должен быть один хост для этого, нет отказоустойчивости, но зато на баше можно написать все, что угодно, например, у меня в микротике надо его еще было перепривязывать к сервисам
Вариант 3. Кластерный
Я пытался реализовать его в traefik + consul + vrrp, но в 3 версии traefik это убрали по причин проблем во 2 версии.
Смысл в том, что сертификаты хранятся в распределенной БД и выпускает его один узел, который успел залочить базу, далее он обновляет сертификат и снимает блокировку, остальные узлы подтягивают
Мне такой вариант понравился для traefik т.к. у меня дома реверс прокси работает при наличии хотя бы одного работающего узла proxmox, но при этом по мере увеличения количества узлов надежность увеличивается + сетевой трафик снижается (если интересно, то могу расписать схему)
Вариант 4. Распределенная БД
Для для traefik использовал consul, Proxmox использует corosync.
Суть в том, чтобы поднять некую распределенную ФС, которая бы синхронизировала каталоги во всех системах, а обновление было на одной или двух.
Грубо говоря, на certbot-node вызываем certbot certonly --standalone -d *.domain.com, а на остальных нодах имеем /etc/letsencrypt уже с сертификатом
Но тут надо понимать, что не все системы смогут корректно работать, proxmox, truenas и прочие можно просто настроить через веб интерфейс и они будут сами выпускать сертификаты
Вариант 4. Полукластерный, полускриптовый
Что-то типа k8s
Поднимаем ноду с certbot, она выпускает сертификаты и складывает их в vault, а сторонние узлы вытягивают из волта
Но тут надо понимать, что
- Надо подружить с волтом эти системы
- Надо отслеживать обновление сертификата
Вариант 5. Ansible
Это как развитие 2 варианта, выпускаем сертификат и дергаем ansible, а можно в самом ansible выпускать
Например, я пользую Semaphore UI для запуска плейбуков, там можно добавить запуск по расписанию, а в GIT сложить плейбук, который будет деплоить сертификаты на узлы
Можно еще вариант 5.1 преложить с волтом, когда сам сертификат остается в волте, а ansible его оттуда стягивает на хост
А какие еще есть варианты и что выбрать?
Про безопасность
Ну и не забываем про безопасность, для хомлабы не столь критично, но при утере wildcard сертификата злоумышленник получает возможность скомпрометировать любой домен




