Модуль cert-manager автоматизирует полный цикл управления сертификатами в кластере: от выпуска и продления сертификатов, включая самоподписанные, до интеграции с внешними центрами сертификации, такими как Let’s Encrypt, HashiCorp Vault и Venafi. Это упрощает обеспечение безопасности сервисов и позволяет централизованно контролировать процессы, связанные с сертификатами.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме контейнеры разных подов показаны как взаимодействующие напрямую. Фактически обмен выполняется через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса приводится над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме каждый под показан в единственном экземпляре.
Архитектура модуля cert-manager на уровне 2 модели C4 и его взаимодействия с другими компонентами DKP изображены на следующей диаграмме:

Компоненты модуля
Модуль cert-manager состоит из следующих компонентов:
-
Cert-manager — контроллер, обеспечивающий полный цикл управления сертификатами в Deckhouse Kubernetes Platform (DKP).
Cert-managerуправляет следующими кастомными ресурсами:- Issuer — описывает настройки источника, от которого выпускаются сертификаты, например CA, ACME-сервис или внешний PKI-провайдер. Действует в пределах выбранного неймспейса;
- ClusterIssuer — кластерный аналог Issuer: действует на весь кластер и доступен во всех неймспейсах;
- Certificate — описывает требуемый сертификат: субъект, срок действия, используемый Issuer или ClusterIssuer, а также дополнительные параметры выпуска;
- CertificateRequest — заявка на выпуск или продление сертификата;
- Challenge — задание для прохождения проверки владения доменом, например с помощью HTTP-01 или DNS-01 challenge в ACME;
- Order — объект ACME, объединяющий связанные Challenge в последовательность для получения сертификата у ACME-сервера, например Let’s Encrypt.
Компонент содержит следующие контейнеры:
- cert-manager — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к метрикам контейнера cert-manager.
Для прохождения DNS-01 challenge
cert-managerподдерживает ряд популярных DNS-провайдеров, включая AzureDNS, Cloudflare и DigitalOcean. С полным списком поддерживаемых DNS-провайдеров можно ознакомиться в документации cert-manager. Для провайдеров, не поддерживаемых «из коробки», используются issuer типа вебхук. Такие issuer являются внешними компонентами, поэтому для корректной работы их необходимо устанавливать в системный неймспейсd8-cert-manager. При внесении изменений в этом неймспейсе учитывайте наличие подобных расширений, чтобы сохранить их работоспособность. - Webhook — компонент, состоящий из одного вебхук-контейнера и выполняющий следующие операции:
- валидацию кастомных ресурсов Issuer, ClusterIssuer, Certificate, CertificateRequest, Challenge, Order;
- мутацию кастомных ресурсов CertificateRequest — вебхук добавляет информацию о пользователе, создавшем запрос на сертификат.
В DKP валидация отключена для ресурсов в неймспейсе
d8-cert-manager, а также для неймспейсов с лейбломcert-manager.io/disable-validation=true. -
Cainjector — дополнительный компонент, состоящий из одного контейнера cainjector. Cainjector отвечает за автоматическую подстановку или обновление сертификатов корневого центра сертификации (CA) во все релевантные ресурсы Kubernetes: ValidatingWebhookConfiguration, MutatingWebhookConfiguration, CustomResourceDefinition и APIService. Это обеспечивает актуальность доверенных корневых сертификатов для сервисов, использующих вебхуки и расширения API.
Cainjector включается параметром
.spec.settings.enableCAInjectorв настройках модуляcert-manager. DKP не использует cainjector для собственных компонентов, поэтому включайте его только в том случае, если вашим приложениям или внешним расширениям требуется инъекция CA в ресурсы Kubernetes.Cainjector обрабатывает только ресурсы с аннотациями
cert-manager.io/inject-ca-from,cert-manager.io/inject-ca-from-secretилиcert-manager.io/inject-apiserver-caв зависимости от типа ресурса. - Cm-acme-http-solver — временный под с контейнером acmesolver, запускаемый для прохождения HTTP-01 Challenge при валидации домена через ACME (например, Let’s Encrypt). Этот под автоматически создаётся контроллером
cert-managerна время исполнения HTTP-01 Challenge и удаляется по завершении процедуры. Такой подход реализует безопасную временную публикацию ресурса, подтверждающего владение доменом для получения сертификата.
Взаимодействия модуля
Модуль cert-manager взаимодействует со следующими компонентами:
-
Kube-apiserver:
- управляет кастомными ресурсами Issuer, ClusterIssuer, Certificate, CertificateRequest, Challenge, Order;
- отслеживает и обновляет ресурсы ValidatingWebhookConfiguration, MutatingWebhookConfiguration, CustomResourceDefinition и APIService.
-
ACME-сервис — обрабатывает запросы на подтверждение домена и выпуск сертификатов.
-
PKI-сервис — обрабатывает запросы для выпуска и обновления (перевыпуска) сертификатов.
-
DNS-провайдер — обрабатывает запросы на добавление и удаление записей в службах DNS для прохождения DNS-01 Challenge при валидации домена через ACME-сервер.
С модулем взаимодействуют следующие внешние компоненты:
-
Kube-apiserver:
- отправляет вебхук-запросы на валидацию кастомных ресурсов Issuer, ClusterIssuer, Certificate, CertificateRequest, Challenge, Order;
- отправляет вебхук-запросы на мутацию кастомных ресурсов CertificateRequest.
-
Prometheus-main — собирает метрики
cert-manager. -
Nginx Controller — пересылает запросы от ACME-сервера к
cm-acme-http-solver.