Einführung
Dein Geheimnis befindet sich in OpenBao. Nun wirst du es als gewöhnlichen Kubernetes-Pod an den Cluster übermitteln. Geheimnis, synchronisiert durch die Operator für externe Geheimnisse (ESO). In Ihren Manifesten wird ein Pfad in OpenBao angegeben; der geheime Wert taucht darin nie auf.
Die ESO nutzt zwei Ressourcen: eine SecretStore in dem beschrieben wird, wie man auf ein Backend zugreift, und ein ExternGeheim in der festgelegt ist, welche Werte abgerufen werden sollen und was Kubernetes Geheimnis um zu schreiben.
Schritt 1 – Installieren Sie den External Secrets Operator
helm add external-secrets https://charts.external-secrets.io
helm update
helm external-secrets external-secrets/external-secrets \
-n external-secrets-system --create-namespace --wait
Überprüfen Sie, ob der Operator läuft:
kubectl get pods -n external-secrets-system
NAME BEREIT STATUS NEUSTARTS LAUFZEIT
external-secrets-8977b889d-vt4sq 1/1 Läuft 0 80s
external-secrets-cert-controller-5d4dc587db-pkckx 1/1 Läuft 0 80s
external-secrets-webhook-85d855b54-4w9hq 1/1 Läuft 0 80s
Schritt 2 – Weisen Sie ESO ein Token und einen SecretStore zu
ESO authentifiziert sich bei OpenBao mit einem Token. OpenBao ist Vault-kompatibel, daher verwenden Sie ESOs Tresorraum Anbieter. Erstellen Sie einen Namespace, einen Kubernetes Geheimnis die den OpenBao-Token halten (Stamm im Entwicklungsmodus, Base64-kodiert als cm9vdA==), und ein SecretStore mit Verweis auf den OpenBao-Dienst:
kubectl create namespace demo-app
kubectl apply -f- <<'EOF'
apiVersion: v1
kind: Secret
metadata:
name: openbao-token
namespace: demo-app
data:
token: cm9vdA== # base64("root")
---
apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
name: openbao-backend
namespace: demo-app
spec:
provider:
vault:
server: "http://openbao.openbao.svc:8200"
path: "secret"
version: "v2"
auth:
tokenSecretRef:
name: "openbao-token"
key: "token"
EOF
In der Produktion würden Sie ESO ein Token mit eingeschränkter Gültigkeit aus einer speziellen Richtlinie zuweisen, das Lesezugriff nur auf die Pfade gewährt, die es benötigt.
Schritt 3 – Erstellen eines ExternalSecret
Die ExternGeheim gibt den Quellpfad und die abzurufenden Schlüssel sowie das Ziel an Geheimnis um Folgendes zu erstellen:
kubectl apply -f- <<'EOF'
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: myapp-config
namespace: demo-app
spec:
refreshInterval: "15s"
secretStoreRef:
name: openbao-backend
kind: SecretStore
target:
name: myapp-config
data:
- secretKey: api_key
remoteRef:
key: myapp/config
property: api_key
- secretKey: db_password
remoteRef:
key: myapp/config
property: db_password
EOF
Schritt 4 – Überprüfen Sie den synchronisierten Secret
Überprüfen Sie, ob die ExternGeheim synchronisiert:
kubectl -n demo-app get externalsecret myapp-config
NAME STORE AKTUALISIERUNGSINTERVALL STATUS BEREIT
myapp-config openbao-backend 15s SecretSynced True
ESO hat ein natives Kubernetes-System entwickelt Geheimnis mit den Werten aus OpenBao:
kubectl -n demo-app get secret myapp-config -o jsonpath='{.data.api_key}' | base64 -d
s3cr3t-123
Der Wert stimmt mit dem überein, den Sie in OpenBao gespeichert haben, und er ist noch nie in einem Manifest aufgetaucht.
Schritt 5 – In einer Arbeitslast einsetzen
myapp-config ist ein gewöhnlicher Geheimnis, daher wird es von einem Pod auf die übliche Weise verarbeitet:
envFrom:
- secretRef:
name: myapp-config
Wenn Sie den Wert in OpenBao ändern, aktualisiert ESO die Geheimnis auf seiner refreshInterval, und Ihre Anwendung übernimmt den neuen Wert beim nächsten Neustart.
Aufräumen
kubectl delete namespace demo-app
helm external-secrets -n external-secrets-system
Wie geht es weiter?
Sie verfügen nun über die Open-Source-Grundlage: OpenBao speichert Geheimnisse und ESO synchronisiert diese mit Kubernetes. Auf dieser Basis können Sie pfadbezogene Richtlinien, dynamische Geheimnisse und Audit-Protokollierung hinzufügen – und das Ganze als verwaltete, mandantenfähige Plattform mit Kubermatic SecureGuard betreiben.
Zusammenfassung
- Der „External Secrets Operator“ synchronisiert Geheimnisse aus einem Backend in das native Kubernetes-System.
GeheimnisObjekte. - A
SecretStorelegt fest, wie OpenBao erreicht wird (der Vault-kompatible Anbieter, ein Token, der KV-Pfad und die Version). - Ein
ExternGeheimgibt den Quellpfad, die Schlüssel und das Ziel anGeheimnisum zu schreiben. - Workloads nutzen das Ergebnis wie gewohnt
Geheimnis; Die Rotation in OpenBao erfolgt im Aktualisierungsintervall.
