cert-manager — это расширение для Kubernetes, которое автоматизирует выпуск и обновление сертификатов. Оно позволяет выпускать сертификаты от Let's Encrypt и других центров сертификации, а также использовать внутренние корневые сертификаты. cert-manager упрощает работу с сертификатами, автоматически продлевая их перед истечением срока действия и обеспечивая безопасное шифрование для сервисов в кластере. Он интегрируется с Ingress-контроллерами и поддерживает различные механизмы проверки домена. Это делает его удобным инструментом для автоматизации управления сертификатами в Kubernetes.
Установка
Для установки cert-manager откройте панель управления кластером, перейдите во вкладку «Дополнения» и выберите cert-manager.

В открывшемся мастере установки нажмите кнопку «Установить» и дождитесь завершения процесса.

Проверить корректность установки можно командой:
Все поды в неймспейсе cert-manager должны иметь статус «Running».
Использование
Чтобы cert-manager мог выпускать сертификаты, необходимо создать объект ClusterIssuer, который будет управлять сертификатами на уровне всего кластера. Пример манифеста:
Здесь:
-
email— ваша почта. Она необходима для создания сертификатов, на нее будут приходить уведомления от Let's Encrypt. -
server— адрес Let's Encrypt или другого центра сертификации. -
privateKeySecretRef— секрет, в котором хранится закрытый ключ. -
solvers.http01.ingress.class— метод подтверждения владения доменом через HTTP, в данном случае с использованием Ingress-контроллера nginx.
Если вы используете другой Ingress-контроллер, необходимо заменить nginx на нужное значение, например, для Traefik:
Пример использования cert-manager
Рассмотрим использование cert-manager на примере ресурсов, описанных в статье про Nginx Ingress.
Если вы следовали той инструкции, у вас уже настроены:
- 3 деплоймента
- Nginx Ingress
- LoadBalancer
Сервисы доступны по:
- http://ingress1.example.com/service1
- http://ingress1.example.com/service2
- http://ingress2.example.com/
Теперь опишем ClusterIssuer в файле cluster-issuer.yaml:
Применим манифест:
Далее необходимо обновить манифест Ingress, добавив аннотацию для использования cert-manager и секцию tls. Обновленный ingress.yaml:
Изменения:
-
Добавлена аннотация
cert-manager.io/cluster-issuer: letsencrypt-prod, указывающая cert-manager использовать созданныйClusterIssuer. -
Добавлена секция
tls, в которой указаны домены, для которых cert-manager должен выпустить сертификаты, и секретingress-tls, где они будут храниться.
Применяем обновленный манифест:
Через некоторое время cert-manager выпустит сертификаты и сохранит их в секрете ingress-tls. Проверить наличие сертификатов можно командой:
Если все прошло успешно, в секрете должны появиться tls.crt и tls.key.
Теперь можно проверить работу HTTPS:
Если запрос проходит без ошибок, значит, сертификаты успешно установлены, и сервисы работают по HTTPS.