# cert-manager Автоматически выдаёт и обновляет TLS сертификаты в кластере. Поддерживает самоподписанные сертификаты (для homelab) и Let's Encrypt (для публичных доменов). Сертификаты обновляются автоматически за 30 дней до истечения. ## Быстрый старт ```yaml # group_vars/all/addons.yml addon_cert_manager: true cert_manager_issuer: "letsencrypt" # none | selfsigned | letsencrypt cert_manager_acme_email: "admin@example.com" ``` ```bash 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`. ```yaml cert_manager_issuer: "selfsigned" ``` Аннотация на Ingress: ```yaml annotations: cert-manager.io/cluster-issuer: "cluster-ca-issuer" ``` ### letsencrypt — публичные домены Создаются оба исуера: `letsencrypt-staging` и `letsencrypt-prod`. ```yaml cert_manager_issuer: "letsencrypt" cert_manager_acme_email: "admin@example.com" ``` Аннотация на Ingress: ```yaml annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" ``` Для тестирования используй `letsencrypt-staging` — без лимитов rate limit. ## Использование в Ingress ```yaml 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 ресурс ```yaml 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 ``` ## Диагностика ```bash # Статус 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/) - Официальная документация: [https://cert-manager.io/docs/](https://cert-manager.io/docs/) - Версии Helm chart / ПО: [https://artifacthub.io/packages/helm/cert-manager/cert-manager](https://artifacthub.io/packages/helm/cert-manager/cert-manager)