Files
K3S/addons/cert-manager
Sergey Antropoff 38aaadbfb1 docs: sync addon docs with explicit external/internal service modes
Обновлена документация под новые аддоны (gitlab, redis, mongodb, kafka, kafka-ui, rabbitmq) и новую модель явного выбора зависимостей. Добавлены и унифицированы описания переключателей *_database_mode и *_redis_mode, обновлена таблица зависимостей аддонов, примеры конфигурации и список vault-секретов.
2026-04-29 23:21:04 +03:00
..
2026-04-24 21:01:26 +03:00

cert-manager

Автоматически выдаёт и обновляет TLS сертификаты в кластере. Поддерживает самоподписанные сертификаты (для homelab) и Let's Encrypt (для публичных доменов). Сертификаты обновляются автоматически за 30 дней до истечения.

Быстрый старт

# group_vars/all/addons.yml
addon_cert_manager: true
cert_manager_issuer: "letsencrypt"        # none | selfsigned | letsencrypt
cert_manager_acme_email: "admin@example.com"
make addon-cert-manager

Параметры

Переменная Умолч. Описание
cert_manager_issuer letsencrypt Тип ClusterIssuer
cert_manager_acme_email admin@example.com Email для Let's Encrypt
cert_manager_default_issuer_name letsencrypt-prod Имя ClusterIssuer для аннотаций

Режимы ClusterIssuer

selfsigned — внутренний CA (homelab/dev)

Создаются: selfsigned-issuer, cluster-ca, cluster-ca-issuer.

cert_manager_issuer: "selfsigned"

Аннотация на Ingress:

annotations:
  cert-manager.io/cluster-issuer: "cluster-ca-issuer"

letsencrypt — публичные домены

Создаются оба исуера: letsencrypt-staging и letsencrypt-prod.

cert_manager_issuer: "letsencrypt"
cert_manager_acme_email: "admin@example.com"

Аннотация на Ingress:

annotations:
  cert-manager.io/cluster-issuer: "letsencrypt-prod"

Для тестирования используй letsencrypt-staging — без лимитов rate limit.

Использование в Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - myapp.example.com
      secretName: myapp-tls
  rules:
    - host: myapp.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-app
                port:
                  number: 80

Ручной Certificate ресурс

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: my-app-tls
  namespace: my-app
spec:
  secretName: my-app-tls-secret
  duration: 2160h    # 90 дней
  renewBefore: 360h  # обновить за 15 дней
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
    - myapp.example.com
    - www.myapp.example.com

Диагностика

# Статус Certificate
kubectl get certificate -A
kubectl describe certificate my-app-tls -n my-app

# Статус CertificateRequest
kubectl get certificaterequest -A

# Логи cert-manager
kubectl logs -n cert-manager deployment/cert-manager -f

# Проверить что сертификат Let's Encrypt получен:
kubectl get secret my-app-tls -n my-app -o jsonpath='{.data.tls\.crt}' | \
  base64 -d | openssl x509 -noout -dates

Официальные ресурсы