Sealed Secrets

Sealed Secrets ist eine Kubernetes-Lösung zur sicheren Speicherung und Verwaltung geheimer Daten (z. B. Passwörter, API-Schlüssel oder Zertifikate). Sie kombiniert Public-Key-Verschlüsselung mit Kubernetes-CRDs (Custom Resource Definitions), um sensible Informationen sicher bereitzustellen, ohne dass sie im Klartext gespeichert werden.

Warum Sealed Secrets?

Ich möchte ja in Kombination mit Flux meinen kompletten k3s Cluster mit deklarativen Code betanken. Das heißt ich habe die komplette Konfiguration im git Repository liegen. Ziemlich häufig müssen auch Secrets in den einzelnen Konfigurationen hinterlegt werden. Damit ich alles beisammen habe, habe ich mich für Sealed Secrets entschieden.

Vorteile von Sealed Secrets

Wie funktionieren Sealed Secrets?

  1. Installation des Sealed-Secret-Controllers:

    • Ein Kubernetes-Operator (Sealed-Secret-Controller) wird im Cluster installiert.
    • Dieser generiert automatisch ein Schlüsselpaar (Public/Private Key).
  2. Verschlüsselung mit dem Public Key:

    • Der Public Key wird genutzt, um ein Kubernetes-Secret außerhalb des Clusters zu verschlüsseln.
    • Das verschlüsselte Secret wird als SealedSecret-Ressource gespeichert und kann sicher in einem Git-Repository oder einer CI/CD-Pipeline verwaltet werden.
  3. Entschlüsselung durch den Sealed-Secret-Controller:

    • Im Cluster entschlüsselt der Sealed-Secret-Controller das SealedSecret automatisch mit dem Private Key und erstellt ein herkömmliches Kubernetes-Secret.

Sealed Secret erstellen

  1. Ein normales Secret erzeugen:
Terminal window
kubectl create secret generic mysecret --from-literal=password=supersecure -n mynamespace --dry-run=client -o yaml > secret.yaml
  1. Das Secret mit kubeseal verschlüsseln:
Terminal window
kubeseal --format=yaml < secret.yaml > sealedsecret.yaml
  1. Das SealedSecret ins Cluster deployen:
Terminal window
kubectl apply -f sealedsecret.yaml

Der Sealed-Secret-Controller entschlüsselt es automatisch und stellt das Kubernetes-Secret bereit. Hier ein Beispiel wie das verschlüsselete Secret aussieht:

apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
creationTimestamp: null
name: git-auth-secret
namespace: www-trinityonline-de
spec:
encryptedData:
identity: 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
identity.pub: AgAgR/9dfHHsknns4mjgemH7pLrf0bkA9AlmrBVPV+VP7oT/F9RbLIY7afkSU+PJHxvytrVLSe4iTqWPrKLi+yjm0hhxYszp/204ADngEY9kpU8gl5GXZ/hv1kW+e5twWBVXnruErwVODZVjnMm91GqAnA82MJVkl3mXDWBLXNIjSJRGcNYMgHPyq8vUr2ROqXuty9f/16v8kb3IQdf2AmLe5xBXsVQfwYJHWkwnhlBxjqXCfrAD37s8+XfvLC6qoI4ojzrwUvEsbv8mi7T6JqbXlHxYWIujhqndakRcOIkpghwK5tXpr+/CRu5MNxTcwO/zLMz1oEYcZ4XEtQPQ6urIXs5taGAlvgoNA8tihKp8PO6zEsznpKhJf9uMXsBBQG4ZuJsG5HiBALrCipA/8NUVmvMlyf0WiS6KOqGQKVVkR1zmS/ZV1sY1leAU+vXcaVdF2adswr0+mh0eHmjmif1ZkRhGSUZmAoaNQSRe5ZReaU+6SvZq6p5RoZzDkfnlS8moxmRlUlbOtCweFV/k7q4kpEWC0f8cAy13b7kdkUfbD6dzAWVvOrGf9fY3OFuOfVmVMt66VJy1Q9AZyz3I1elT3vRYmCao/zM+FMOp+PlSj9CfPCH9+VdHkV7Q1hGV3TvOKkmaWp7NFuB0k6ZDixLGEfP8/ETaQ7xRgsrxNj+7mO6NLHs0wTMkGLiGypTqSLSvW042DNh1LRhl6Dp7hul2YOO3YOUgHMUHHcRvZbSJyztlOoQp+TOA11XVRiAejeS2ewnSmuS6pNzfFC/6Od0ep7QpCMcdoXVOgSfDeX7X3t3dqIl2gX4PuPkh9QA23yUQoKtaibsjJ/UZdMYibn4orRR9V2EQLPgoCJboQAxm+RrZb+23ILC63qRiFF3MhgoFSihWzzI5RSEpK6R+rylcuNED5mM6kG54eSUmZ25w2V4+jEWPJ6q9jX327Zbmo/tlgMPikrICYw2nwR49v/q7RBOdMovAuyR4e1WyxQRf+XMWuAryAZWwTbawWOGCk0b9W98HpjgzucrCYsL1id3odEicFlPP7EX+uA79/BzqfQPhtpgv3goTnP7OV7CmJUNuiaMxDbjwVwA3j3Mm5OrNLFDNaglw2CSBF35PE3WGCh2jikorJh2zglG6v630DV1NSIzEhj6SCB2kEW8tJ/n9UVDURHrN2JacloJ9FK35McqaFxpCHpLVeeKnvOdNiHJbuKDMfPUoFLqSN1U9tlQhiOueIwPRMEeEJAR0AA8tdC34NAutMs3cG1dJahvo/s7vJHVcR5CCekVK2u3jC3gflRm4rNNeyAS2TPbxs0d+I6Gd6oObhjPyBccBRFixpEgUojQh3V134e6LrP3u+RFMilIHGOHPLzZQhvqVOIcxCNJVz5bZmgeCZskqCQyR4XtbU4asNILOvcAynaG9Zb6RworOINjgoeSIUug0IVro23QQ4ZrbXopxTb9jXBkyLBL9abYMpEnx7L70KsR1CV4tIR86IZ0iPBdRzUNIeZr5pS4ctam7udqlR+QWZy00YtwZPRnQKx+1WMV4stu2SUFCuVBd+NidJ+UORxptu2/O8bJ6rlwvm1lgjQv2qDEHXc+RbXpw+8QhqicVIV6O4QCBtkLIZdmGO+G+gqXJOpE3IvF3hacxmNaGravTny0ZU2Hz/+07SL9rFxBF
known_hosts: AgCVJQE25q8akgVfU9Dq6Tp3yC+LFOvv8vx0gnSG5fjUBipZ564+K2St5vSAFcYuyXJWJ/lf6tHR+F2R/j7IzXJF696Qthg6sqtlaYHYfWuDEFjO3gFzf2S3Mi6evQ47VQBWCDlWzsCeHnhBCvDdHy7SpkT6x+7X5tXvwEn578yKR6Qd2Lu07KbnqoafiJhn6JB5uo435tPjfATnKNno/B48lQBTaPoAuT0ZhKsyoHdrU/751irfweLvqgtza2qc3uDt3oUsiJBccrstLMC6G68VEsOIhq5Ss4iPaGLp+3ISR2nQMiD5TXpRXkWeTWM9s1NsG0vLYbMAWYYSKMIX8PRczImvIo1rHBhShe5XZ8ZmqEHVmc6X3Mqp3BQW3bJ6lpTK81eWVfx4cBwsuCi0qfL22+fMcyJ3xF/GsSUN0IBQ7b3JGKjWSfBlCgK7C+JBJPr6zfxcTsPaFbvzqMr94xVaRyoVvObuccFdeZ/+dA0IqMT2TJLiO+98PExQaPep/8cEjXabdgymz9qxRvSi7qyJl30RFYcmF0oTvSBTy1Ahae+r4IPmXf2AQhu3sqlhdrgpKFS52ZgKKTzRNHzRlA6QiaffSEUFqDIvCAzF1wqv52xTiJ+LrdnZnvW4a0QSWYasfqzU9HEHkGTexfhpXximy2zzfCipN4E3ZfV82VeCBpLT/BHCBuU2O80U7wlueGnlY9KAbctrtLNtj7znHohsK1aYMw1e18cFV3sl9fv8LONh3cANRRepQs0DMdhj0lGCkH3bd8q70vhx0T5Jd2U7zHzeKC10Y0O3JLmhTPYYEXzQFZ59wVkNKN6sYKU2h0WAdG5fxamNRc+KkVpq3vJghED3NK6/YQ9YLzTQloTE4F8MR7NFiWDFqbr318w0ymlnITbs7LRbIB18xq4sqrTScjaTLYM5MNOkReVm+xqY3669/Y15u75AP79gBBShTuW5NWwTyrQgdVdRZVeZ4Tuo8BNt1QeEMONzqHG/3N/rbzkeT9pWDNSVA5+usbNvpbwPam6xwt7dZw/G8by8Rc7yqvbtfcxiVTCYAOK6ADprFltFgZHpAyMF9cDzJs0HoKcgZde7vFvmrK+xPgKQ2Tf0HdjYsy6JMyNpO5PPShP9z6v9nsns1tMY5ea0V4HbFLHmg8GflUy5RTXwfQIfX9bhvaZLkN6uDXO7xOrdrFRcz0k6sg5ibxmByrvQZQYdmDYcC1xsWKxZcqSMm/1SZA2JJZJetB5V5PnbQE2txXOus5F72DTOMSI7Rno3F9k7xUy+L9joyLtUtbxqaanvBeQ8GS5ikRD8KRVTESsv+zeA//qhnwW5XtlfgtegczVG4vhVLbSkCngMxer44vUq/SdwRR5EcngISZmGfnSKDKze4tbskQ/Ll88tr4g13GsMuyuOoDS/ID2pTspz2hT1mxwGC7rCDQjA3jLJb+wyiJ0ydJA69NGswjDq+D61gWvDtmLpi67XLlM7V5dEQL6fU/xKhknHI3eWGnw0rhNJzFPeDklxa4SFXDfsEdKiFtzJ+Eg6r5cWhSN7GrG/T5BU8uFQJA4PHYLB0vng4yXbAaSTpwQdRsLiXlp+D+ja1ZylnnSI9Pml/4bvDK1BwUsXcS9yMiL2DU4Ar66Vr7Ckj/UGruwtezyQSnYKlS2FyIjCRMOt7eN/oJHB+dHlffrOCEZpUvURIlzHQKyydaQQ/yhCeZFbRYuOXYaxkiLJ+D8g1m6PAv2E2YSkXac/58FjdQuDu0dbhD9/Tm96YE4qUDnF4eSDbKF9FeMAwxAUe4Q/em8hzGuysnAf6nkgxeZzoewzDR5IZOFn5739wWCqnamblPrgvZo5sxPYWfb9pgVfP7bXIqnT7ROqOyhhoY4wgIcZ8njCzai9NoOM8ecQoPXF0NyeDmlnh8QC0NsYFYNumubhRHLCSmy7LcIUzbSiUUjIZLdxEj7p8vRui4usM00iu61L6FV0WwZjJkCK5INh4FJ55NGoZVqBsrBYPyg/j+uy4ZXdrHfynKvWwa1nNz5xZenLSNfxXcp1RX73mFyggT1adkWkcsBZ3QXUwOCwae/TTUoWMOdyw/ScxfiYx26D+HwuHUhHW4J2Lf8fHe4rjnxL9SVESQaKQRZCNKO0fA==
template:
metadata:
creationTimestamp: null
name: git-auth-secret
namespace: www-trinityonline-de

Backup

Sollte der Cluster neu aufgesetzt werden, wird der sealed-secret key neu erstellt. Von daher ist es wichtig, dass der jetztige Key gesichert wird, da ihr sonst eure Secrets nicht mehr entschlüsseln könnt.

Der Key kann wie folgt gesichert werden:

Terminal window
kubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml > sealed-secrets-backup.yaml

Ich sichere den Key in meinem pass password manager.

Terminal window
cat sealed-secrets-backup.yaml| xclip -selection clipboard
rm sealed-secrets-backup.yaml

Die originale Datei wird mittels rm entfernt!

Zurückspielen kann man den Key wie folgt:

Terminal window
kubectl apply -f sealed-secrets-backup.yaml

Danach sollte der Sealed Secrets Controller neugestartet werden:

Terminal window
kubectl delete pod -n kube-system -l name=sealed-secrets-controller
Gemacht mit ❤️ und Astro
© 2025
Impressum
Datenschutz