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

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

Проверить корректность установки можно командой:
kubectl get pods -n cert-manager
Все поды в неймспейсе cert-manager должны иметь статус «Running».
Использование
Чтобы cert-manager мог выпускать сертификаты, необходимо создать объект ClusterIssuer, который будет управлять сертификатами на уровне всего кластера. Пример манифеста:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: email@example.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
Здесь:
-
email— ваша почта. Она необходима для создания сертификатов, на нее будут приходить уведомления от Let's Encrypt. -
server— адрес Let's Encrypt или другого центра сертификации. -
privateKeySecretRef— секрет, в котором хранится закрытый ключ. -
solvers.http01.ingress.class— метод подтверждения владения доменом через HTTP, в данном случае с использованием Ingress-контроллера nginx.
Если вы используете другой Ingress-контроллер, необходимо заменить nginx на нужное значение, например, для Traefik:
solvers:
- http01:
ingress:
class: 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:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: email@example.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
Применим манифест:
kubectl apply -f cluster-issuer.yaml
Далее необходимо обновить манифест Ingress, добавив аннотацию для использования cert-manager и секцию tls. Обновленный ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: ingress-example
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
rules:
- host: ingress1.example.com
http:
paths:
- path: /service1
pathType: Prefix
backend:
service:
name: service1
port:
number: 80
- path: /service2
pathType: Prefix
backend:
service:
name: service2
port:
number: 80
tls:
- hosts:
- ingress1.example.com
secretName: ingress-tls
Изменения:
-
Добавлена аннотация
cert-manager.io/cluster-issuer: letsencrypt-prod, указывающая cert-manager использовать созданныйClusterIssuer. -
Добавлена секция
tls, в которой указаны домены, для которых cert-manager должен выпустить сертификаты, и секретingress-tls, где они будут храниться.
Применяем обновленный манифест:
kubectl apply -f ingress.yaml
Через некоторое время cert-manager выпустит сертификаты и сохранит их в секрете ingress-tls. Проверить наличие сертификатов можно командой:
kubectl get secret ingress-tls -n ingress-example -o yaml
Если все прошло успешно, в секрете должны появиться tls.crt и tls.key.
Теперь можно проверить работу HTTPS:
curl -v https://ingress1.example.com/service1
Если запрос проходит без ошибок, значит, сертификаты успешно установлены, и сервисы работают по HTTPS.
Добавьте пожалуйста пример как реализовать DNS Challenge для wildcard сертификатов. Особенно интересен вариант, когда управление DNS запися ми происходить также в TimeWebCloud
Добрый день!
Для выпуска wildcard-сертификатов с DNS Challenge нужно использовать дополнение «cert-manager Webhook».
В статье к аддону уже привели пример манифеста с поддержкой DNS-валидации. Достаточно указать вайлдкард-домен в
dnsNames, например:Если мы неверно поняли ваш вопрос — уточните, пожалуйста, что именно вы хотите реализовать. Будем рады помочь!