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, например:Если мы неверно поняли ваш вопрос — уточните, пожалуйста, что именно вы хотите реализовать. Будем рады помочь!