Обновлена документация под новые аддоны (gitlab, redis, mongodb, kafka, kafka-ui, rabbitmq) и новую модель явного выбора зависимостей. Добавлены и унифицированы описания переключателей *_database_mode и *_redis_mode, обновлена таблица зависимостей аддонов, примеры конфигурации и список vault-секретов.
129 lines
3.6 KiB
Markdown
129 lines
3.6 KiB
Markdown
# 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)
|