Zum Inhalt

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:

my-chart/
├── Chart.yaml
├── values.yaml
├── certs/
│   ├── server.crt
│   └── server.key
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

  1. cert-manager für automatische Zertifikate - Let's Encrypt Integration
  2. Zertifikate nicht in Git - Verwenden Sie External Secrets oder Sealed Secrets
  3. Kurze Laufzeiten - Automatisieren Sie Renewal-Prozesse
  4. Separate Secrets pro Domain - Bessere Isolation und einfachere Rotation
  5. 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

Siehe auch