Sicherheit

Synchronisieren von Secrets in Kubernetes mit dem External Secrets Operator

Abubakar Siddiq Ango
Abubakar Siddiq Ango Senior Developer Advocate
17. Juni 2026 3 Minuten Lesezeit Mittelstufe
Sicherheit Verwaltung von Geheimnissen openbao externe-Geheimnisse

Voraussetzungen

  • „Speichern und Auslesen von Geheimnissen mit OpenBao“ (Teil 3) abgeschlossen – OpenBao speichert ein Geheimnis unter secret/myapp/config
  • kubectl und Helm sind installiert

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. Geheimnis Objekte.
  • A SecretStore legt fest, wie OpenBao erreicht wird (der Vault-kompatible Anbieter, ein Token, der KV-Pfad und die Version).
  • Ein ExternGeheim gibt den Quellpfad, die Schlüssel und das Ziel an Geheimnis um zu schreiben.
  • Workloads nutzen das Ergebnis wie gewohnt Geheimnis; Die Rotation in OpenBao erfolgt im Aktualisierungsintervall.