Sealed Secrets verschlüsselt Kubernetes Secrets, damit diese ohne Bedenken in einem git Repository gespeichert werden können.
Details
Der Inhalt eines Kubernetes Secret ist üblicherweise nicht verschlüsselt, sodass es nicht zu empfehlen ist, das Secret zusammen mit anderen Kubernetes Definitionen in der Versionskontrolle oder an einem ungesicherten Ort zu speichern. Dadurch werden manuelle und fehleranfällige Schritte notwendig, um eine Applikation zu deployen. Als Lösung betreiben wir einen Controller, der das Entschlüsseln der Sealed Secrets übernimmt und diese in normale Secret Objekte umwandelt.
Verfügbarkeit
Bei NKE ist Sealed Secrets als optionaler Serivce verfügbar. Die Funktionalität kann über das Cockpit für bestehende NKE Cluster aktiviert werden.
Nutzung
Um Sealed Secrets zu nutzen, müssen Sie zunächst die CLI-Utility kubeseal
installieren, welche Teil des Projekts sealed-secrets ist. Nach Installation von kubeseal
für Ihr Betriebssystem können Sie Secrets lokal verschlüsseln.
Definieren Sie dazu Ihr normales, unverschlüsseltes Secret in einer lokalen Datei mit dem Namen
secret.yaml
.apiVersion: v1 kind: Secret metadata: name: example namespace: dev type: Opaque stringData: password: verysecure
Verwenden Sie kubeseal, um eine verschlüsselte SealedSecret Ressource zu generieren.
kubeseal --controller-namespace nine-system < secret.yaml > sealed-secret.json
Hinweis: der aktuelle kube Kontext muss auf den NKE Cluster verweisen.
Alternativ können die kubeconfig und der Kontext mit zusätzlichen Optionen
an kubeseal geliefert werden.Wenden Sie es über
kubectl
an.$ kubectl apply -f sealed-secret.json sealedsecret.bitnami.com/example created
Überprüfen Sie die Secret Ressource, die der Controller erstellt hat.
$ kubectl get secret example -o jsonpath='{.data.password}' | base64 -d verysecure
Um das Secret wieder zu löschen, kann einfach das SealedSecret gelöscht werden. Der Controller entfernt dann das Secret Objekt.
$ kubectl delete sealedsecret example
sealedsecret.bitnami.com "example" deleted
Beachten Sie, dass wir in einem produktiven Szenario nicht empfehlen, SealedSecret lokal mit kubectl
anzuwenden. Stattdessen können Sie es in Ihrem Konfigurations-Repository speichern und Argo CD das Erstellen überlassen.