Обновлена документация под новые аддоны (gitlab, redis, mongodb, kafka, kafka-ui, rabbitmq) и новую модель явного выбора зависимостей. Добавлены и унифицированы описания переключателей *_database_mode и *_redis_mode, обновлена таблица зависимостей аддонов, примеры конфигурации и список vault-секретов.
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
Официальные ресурсы
- Официальный сайт: https://cert-manager.io/
- Официальная документация: https://cert-manager.io/docs/
- Версии Helm chart / ПО: https://artifacthub.io/packages/helm/cert-manager/cert-manager