Cert-Manager & Zertifikate
Cluster Issuer
Einrichtung und Verwaltung von ClusterIssuers für TLS-Zertifikate.
Was ist ein ClusterIssuer?
Ein ClusterIssuer ist eine Ressource des cert-manager, die als clusterweite Zertifizierungsstelle (CA) fungiert. Im Gegensatz zu einem namespaced Issuer können Ressourcen aus allen Namespaces auf einen ClusterIssuer zugreifen. Dies ermöglicht die zentrale Verwaltung eines "Let's Encrypt"-Kontos für den gesamten Cluster.
Offizielle cert-manager Dokumentation
Schnellstart (HTTP-01)
Der schnellste Weg zu einem gültigen TLS-Zertifikat ist die ACME HTTP-01 Challenge. Voraussetzung hierfür ist lediglich eine öffentliche Domain, die auf die externe IP Ihres Ingress-Controllers verweist.
1. ClusterIssuer erstellen
Legen Sie eine Datei cluster-issuer.yaml mit folgendem Inhalt an:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: info@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx2. Ingress konfigurieren
Ergänzen Sie Ihren Ingress um die erforderliche Annotation:
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- example.com
secretName: example-com-tlsChallenge-Methoden: HTTP-01 vs DNS-01
| Feature | HTTP-01 | DNS-01 |
|---|---|---|
| Komplexität | Niedrig | Mittel |
| Voraussetzung | Port 80 öffentlich erreichbar | API-Zugriff auf DNS-Provider |
Wildcards (*.example.com) | Nein | Ja |
| Interne Dienste | Nein | Ja |
Verwenden Sie HTTP-01 für Standard-Webseiten. DNS-01 ist zwingend erforderlich für Wildcard-Zertifikate oder wenn der Dienst nicht öffentlich erreichbar ist (z.B. interne Dashboards).
DNS Provider (Cloudflare)
Für die Nutzung von DNS-01 Challenges (z.B. für Wildcards) benötigt cert-manager Zugriff auf Ihre DNS-Verwaltung.
1. API Token Secret erstellen
Hinterlegen Sie Ihren Cloudflare API-Token in einem Kubernetes Secret:
apiVersion: v1
kind: Secret
metadata:
name: cloudflare-api-token
namespace: cert-manager
type: Opaque
stringData:
api-token: <IHRE_CLOUDFLARE_API_TOKEN>2. ClusterIssuer für Cloudflare konfigurieren
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-dns
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: info@example.com
privateKeySecretRef:
name: letsencrypt-dns
solvers:
- dns01:
cloudflare:
email: info@example.com
apiTokenSecretRef:
name: cloudflare-api-token
key: api-tokenWildcard-Zertifikate
Mit Wildcard-Zertifikaten (z.B. *.example.com) sichern Sie beliebig viele Subdomains (app1.example.com, app2.example.com) mit einem einzigen Zertifikat ab.
Voraussetzungen:
- Es MUSS der DNS-01 Challenge-Typ verwendet werden.
- Im Ingress wird der Host als Wildcard angegeben:
spec:
tls:
- hosts:
- "*.example.com"
secretName: wildcard-example-com-tlsProduktion vs. Staging
Let's Encrypt limitiert die Anzahl der Zertifikatsausstellungen in der Produktionsumgebung strikt (Rate Limits).
Nutzen Sie für Tests immer die Staging-Umgebung!
Staging ClusterIssuer
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
# Staging URL
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: info@example.com
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- http01:
ingress:
class: nginxZertifikate aus der Staging-Umgebung sind technisch valide, werden aber von Browsern als "nicht vertrauenswürdig" angezeigt. Sie eignen sich perfekt, um die Konfiguration zu validieren, ohne Produktions-Limits zu verbrauchen.
Best Practices
Zur Härtung Ihrer Ingress-Konfiguration empfehlen wir folgende Einstellungen:
- Algorithmus: Setzen Sie auf
ECDSAstatt RSA für gesteigerte Performance und Sicherheit. - Rotation: Erzwingen Sie regelmässige Erneuerungen mit
Always.
Beispiele finden Sie in der Ingress NGINX Dokumentation.