Модуль 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 или внешний сервис). Применяется внутри выбранного namespace;
- ClusterIssuer — аналог Issuer, но действует на весь кластер и доступен во всех namespace;
- Certificate — определяет, какой сертификат требуется: указывает параметры, такие как субъект, срок действия, использованный Issuer/ClusterIssuer и дополнительные опции;
- CertificateRequest — заявка на выпуск или продление сертификатов;
- Challenge — описывает задание, используемое для прохождения валидации домена (например,
HTTP-01,DNS-01 challengeдля Let’s Encrypt); - Order — объединяет связанные Challenge в последовательность для получения сертификата у ACME-сервера (например, Let’s Encrypt).
Компонент содержит следующие контейнеры:
- cert-manager — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к метрикам контейнера cert-manager.
Для прохождения
DNS-01 challengecert-manager поддерживает ряд популярных DNS-провайдеров, таких как AzureDNS, Cloudflare, DigitalOcean и т.д. С полным списком поддерживаемых DNS-провайдеров можно ознакомиться в документации cert-manager. Для неподдерживаемых “из коробки” провайдеров используются issuer типа webhook, которые являются внешними компонентами. Для корректной работы таких провайдеров их необходимо устанавливать в системный namespaced8-cert-manager. При внесении изменений в этот namespace рекомендуется всегда учитывать наличие подобных расширений для сохранения их работоспособности. - Webhook — компонент состоящий из одного контейнера webhook и выполняющий следующие операции:
- валидацию кастомных ресурсов Issuer, ClusterIssuer, Certificate, CertificateRequest, Challenge, Order;
- мутацию кастомных ресурсов CertificateRequest, при этом webhook добавляет информацию о пользователе, создавшем запрос на сертификат.
В DKP валидация отключена для ресурсов в неймспейсе
d8-cert-manager, а также для неймспейсов с меткойcert-manager.io/disable-validation=true. -
Cainjector — дополнительный компонент, состоящий из одного контейнера cainjector. Cainjector отвечает за автоматическую подстановку или обновление сертификатов корневого центра сертификации (CA) во все релевантные ресурсы Kubernetes: ValidatingWebhookConfiguration, MutatingWebhookConfiguration, CustomResourceDefinition и APIService. Это обеспечивает актуальность доверенных корневых сертификатов для сервисов, использующих webhooks и расширения API.
Cainjector активируется параметром
.spec.settings.enableCAInjectorв настройках модуляcert-manager. DKP не использует cainjector, поэтому включать нужно только в том случае, если вы используете в своих сервисах пользовательские инъекции CA.Cainjector обрабатывает только ресурсы с аннотациями
cert-manager.io/inject-ca-from,cert-manager.io/inject-ca-from-secretилиcert-manager.io/inject-apiserver-caв зависимости от типа ресурса. - Cm-acme-http-solver — временный pod с контейнером acmesolver, запускаемый для прохождения
HTTP-01 Challengeпри валидации домена через ACME (например, Let’s Encrypt). Этот pod автоматически создаётся контроллером 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.