- README.md: перепиcан как компактный обзор (98 строк) с навигацией по docs/ - docs/: 13 файлов — getting-started, architecture, configuration, addons, storage, security, cicd, observability, networking, operations, make-reference, molecule-testing, troubleshooting - addons/*/README.md: 31 новый файл — описание, параметры, примеры кода для каждого из 34 аддонов (vault и external-secrets уже существовали)
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