TLS Secrets¶
Der TLS Secrets-Helper erstellt Kubernetes TLS Secrets für HTTPS-Zertifikate.
Übersicht¶
TLS Secrets speichern Zertifikate und private Schlüssel für HTTPS/TLS-Verschlüsselung. Sie werden typischerweise verwendet für:
- Ingress TLS-Terminierung
- Mutual TLS (mTLS)
- Interne Service-Verschlüsselung
cert-manager empfohlen
Für Production-Umgebungen empfehlen wir cert-manager für automatische Zertifikatsverwaltung. Dieser Helper ist für Szenarien gedacht, in denen Sie bereits vorhandene Zertifikate deployen müssen.
Basis-Konfiguration¶
tls-secrets:
- name: example-com-tls
namespace: production
values:
tls.crt: |
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0...
-----END CERTIFICATE-----
tls.key: |
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKg...
-----END PRIVATE KEY-----
Mehrere Zertifikate¶
tls-secrets:
# Haupt-Domain
- name: example-com-tls
namespace: production
values:
tls.crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
tls.key: |
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
# API-Subdomain
- name: api-example-com-tls
namespace: production
values:
tls.crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
tls.key: |
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
# Wildcard-Zertifikat
- name: wildcard-example-com-tls
namespace: production
values:
tls.crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
tls.key: |
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Mit Zertifikatskette¶
Für Zertifikate mit Intermediate CAs fügen Sie die gesamte Kette in tls.crt ein:
tls-secrets:
- name: example-com-tls
namespace: production
values:
tls.crt: |
-----BEGIN CERTIFICATE-----
# Ihr Zertifikat
MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
# Intermediate CA
MIIEtTCCA52gAwIBAgIRAJdJgE3RtMtBV...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
# Root CA (optional)
MIIFazCCA1OgAwIBAgIRAIIQz7DSQON...
-----END CERTIFICATE-----
tls.key: |
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKg...
-----END PRIVATE KEY-----
Verwendung mit Ingress¶
# TLS Secret erstellen
tls-secrets:
- name: myapp-tls
namespace: production
values:
tls.crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
tls.key: |
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
# Ingress mit TLS
ingress:
- name: myapp-ingress
namespace: production
tls:
- secretName: myapp-tls
hosts:
- myapp.example.com
hosts:
- host: myapp.example.com
http:
paths:
- path: /
backend:
serviceName: myapp
servicePort: http
Vollständiges Beispiel¶
# Chart.yaml
apiVersion: v2
name: my-app
version: 1.0.0
dependencies:
- name: ohmyhelm
alias: app
repository: https://gitlab.com/ayedocloudsolutions/ohmyhelm
version: 1.13.0
# values.yaml
app:
# TLS Zertifikat
tls-secrets:
- name: myapp-tls
namespace: production
values:
tls.crt: |
{{ .Files.Get "certs/myapp.crt" }}
tls.key: |
{{ .Files.Get "certs/myapp.key" }}
# Deployment
chart:
enabled: true
fullnameOverride: "myapp"
container:
image: myapp:latest
ports:
- name: http
containerPort: 8080
ingressSimple:
enabled: true
host: myapp.example.com
path: /
tlsSecretName: myapp-tls
Zertifikate aus Dateien laden¶
Verwenden Sie Helm's .Files.Get um Zertifikate aus Dateien zu laden:
tls-secrets:
- name: server-tls
namespace: production
values:
tls.crt: |
{{ .Files.Get "certs/server.crt" | indent 8 }}
tls.key: |
{{ .Files.Get "certs/server.key" | indent 8 }}
Best Practices¶
- cert-manager für automatische Zertifikate - Let's Encrypt Integration
- Zertifikate nicht in Git - Verwenden Sie External Secrets oder Sealed Secrets
- Kurze Laufzeiten - Automatisieren Sie Renewal-Prozesse
- Separate Secrets pro Domain - Bessere Isolation und einfachere Rotation
- Monitoring - Überwachen Sie Zertifikatsablauf
Troubleshooting¶
Zertifikat prüfen¶
# Secret anzeigen
kubectl get secret myapp-tls -n production -o yaml
# Zertifikat dekodieren und prüfen
kubectl get secret myapp-tls -n production -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout
# Ablaufdatum prüfen
kubectl get secret myapp-tls -n production -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -enddate -noout
Häufige Fehler¶
| Fehler | Ursache | Lösung |
|---|---|---|
certificate verify failed | Zertifikatskette unvollständig | Intermediate CAs hinzufügen |
private key does not match | Key passt nicht zum Cert | Korrekten Private Key verwenden |
certificate has expired | Zertifikat abgelaufen | Neues Zertifikat erstellen |