Kubernetes External Secrets Operator mit Secret Manager verwenden

Als Markdown ansehen

Konfigurieren Sie den External Secrets Operator, um Kubernetes-Secrets im OVHcloud Secret Manager zu speichern

Ziel

Diese Anleitung erklärt, wie Sie den Kubernetes External Secrets Operator einrichten, um den OVHcloud Secret Manager als Provider zu verwenden.

Voraussetzungen

In der praktischen Anwendung

Einrichten des Secret Manager

Um den Zugriff auf den Secret Manager zu ermöglichen, benötigen Sie einen token, die region und die okms-id Ihres Secret Managers.

Erstellen der Zugangsdaten

Erstellen Sie einen lokalen IAM-Benutzer mit Zugriffsrechten auf Ihre Domain oder verwenden Sie einen Service-Account. Weitere Informationen zur vollständigen Einrichtung und zu den IAM-Richtlinienvorlagen finden Sie unter OKMS-Authentifizierungsmethoden.

Der Benutzer sollte Mitglied einer Gruppe mit der Rolle ADMIN sein. Wenn Sie stattdessen IAM-Richtlinien verwenden, sollte der Benutzer mindestens die folgenden Rechte auf der OKMS-Domain haben:

  • okms:apikms:secret/create
  • okms:apikms:secret/version/getData
  • okms:apiovh:secret/get

Alternativ ist es möglich, einen Benutzer mit der OVHcloud CLI zu erstellen:

ovhcloud iam user create --login "secretmanager-b1033fdd-xxxx-xxxx-xxxx-xxxxxxxxx" --group ADMIN --description "A user create for Secret Manager, linked to xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx" --password "secretmanager-xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx" --email "secretmanager-xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx@ovhcloud.com"

Erstellen Sie dann ein Personal Access Token (PAT) user_pat:

Über die API
Über die CLI

Verwenden Sie den folgenden API-Aufruf:

Mit der folgenden Nutzlast (füllen Sie diese mit Ihren eigenen Werten aus):

{
  "description": "PAT secret manager for domain xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
  "name": "pat-secretmanager-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
}

Die API antwortet mit:

{
  "creation": "2025-11-13T10:38:44.658926311Z",
  "description": "PAT secret manager for domain xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
  "expiresAt": null,
  "lastUsed": null,
  "name": "pat-secretmanager-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
  "token": "eyJhbGciOiJ...punpVAg"
}

Bewahren Sie den Wert des Feldes token auf, da er nicht erneut angezeigt wird und zur Authentifizierung am Secret Manager als user_pat verwendet wird.

Informationen zum Secret Manager

Sie benötigen außerdem die region und die okms-id der OKMS-Domain, die Sie verwenden möchten. Diese ID und diese Region finden Sie im oder über die OVHcloud CLI:

$ ovhcloud okms list
┌──────────────────────────────────────┬─────────────┐
 id region
├──────────────────────────────────────┼─────────────┤
 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx eu-west-par
 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx eu-west-par
└──────────────────────────────────────┴─────────────┘

Einrichten des Secret Providers in Kubernetes

Installation des External Secrets Operator (ESO) auf Ihrem Kubernetes-Cluster

helm repo add external-secrets https://charts.external-secrets.io
helm repo update

helm install external-secrets \
   external-secrets/external-secrets \
    -n external-secrets \
    --create-namespace \
    --set installCRDs=true

Prüfen Sie, ob der ESO ausgeführt wird:

$  kubectl get all -n external-secrets
NAME                                                    READY   STATUS    RESTARTS   AGE
pod/external-secrets-8cbc56569-9875p                    1/1     Running   0          12s
pod/external-secrets-cert-controller-565fcd479b-xbkcp   0/1     Running   0          12s
pod/external-secrets-webhook-7fb59d4b88-9tkl6           0/1     Running   0          12s

NAME                               TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/external-secrets-webhook   ClusterIP   10.3.43.102   <none>        443/TCP   13s

NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/external-secrets                   1/1     1            1           13s
deployment.apps/external-secrets-cert-controller   0/1     1            0           13s
deployment.apps/external-secrets-webhook           0/1     1            0           13s

NAME                                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/external-secrets-8cbc56569                    1         1         1       13s
replicaset.apps/external-secrets-cert-controller-565fcd479b   1         1         0       13s
replicaset.apps/external-secrets-webhook-7fb59d4b88           1         1         0       13s

Erstellen eines Secrets, das den PAT enthält

Kodieren Sie zunächst Ihren user_pat in Base64, damit er in einem Kubernetes-Secret gespeichert werden kann.

$ echo -n "<token>" | base64
ZXlKaG...wVkFn

Alternativ, falls der user_pat in einer Umgebungsvariable gespeichert wurde:

PAT_TOKEN_B64=$(echo -n $PAT_TOKEN | base64) ; echo $PAT_TOKEN_B64

Erstellen Sie dann eine secret.yaml-Datei:

 apiVersion: v1
kind: Secret
metadata:
  name: ovhcloud-vault-token
  namespace: external-secrets
data:
  token: ZXlKaG...wVkFn

Und wenden Sie diese mit dem Befehl kubectl apply -f secret.yaml an.

Alternativ, falls Sie eine Umgebungsvariable verwenden:

kubectl create secret generic ovhcloud-vault-token -n external-secrets --from-literal=token=$PAT_TOKEN_B64

Das Secret sollte erstellt worden sein:

$ kubectl get secret ovhcloud-vault-token -n external-secrets
NAME                   TYPE     DATA   AGE
ovhcloud-vault-token   Opaque   1      5m

Konfigurieren des External Secrets Operator

Richten Sie zunächst einen ClusterSecretStore ein, der für die Synchronisierung mit dem Secret Manager zuständig ist. Wir konfigurieren den SecretStore mit HashiCorp Vault, Token-Authentifizierung und dem OKMS-Endpunkt als Backend.

Fügen Sie den user_pat als Secret hinzu, um ihn in den Charts verwenden zu können.

Um eine neue ClusterSecretStore-Ressource zu definieren, erstellen Sie eine clustersecretstore.yaml-Datei mit folgendem Inhalt:

apiVersion: external-secrets.io/v1
kind: ClusterSecretStore
metadata:
  name: vault-secret-store
spec:
  provider:
      vault:
        server: "https://<region>.okms.ovh.net/api/<okms_id>" # OKMS-Endpunkt, tragen Sie die korrekte Region und Ihre okms_id ein
        path: "secret"
        version: "v2" 
        auth:
            tokenSecretRef:
              name: ovhcloud-vault-token # Das k8s-Secret, das Ihren PAT enthält
              key: token 
              namespace: external-secrets
Info

Es wird nur die Token-Authentifizierung unterstützt.

Info

Diese Integration funktioniert auch mit einem SecretStore.

Der Name der Region kann aus Ihrem Regionsstandort abgeleitet werden mit:

GET/location

Ein Beispiel: Für Europe (France - Paris) lautet der OKMS-Endpunkt eu-west-par.okms.ovh.net.

Deployen Sie die Ressource in Ihrem Cluster:

kubectl apply -f clustersecretstore.yaml

Verwenden des External Secrets Operator

Sobald der ClusterSecretStore eingerichtet ist, können Sie das ExternalSecret definieren, das aus dem Secret Manager stammt.

Erstellen Sie eine externalsecret.yaml-Datei mit folgendem Inhalt:

apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: docker-config-secret
  namespace: external-secrets
spec:
  refreshInterval: 30m
  secretStoreRef:
    name: vault-secret-store
    kind: ClusterSecretStore
  target:
    template:
      type: kubernetes.io/dockerconfigjson
      data:
        .dockerconfigjson: "{{ .mysecret | toString }}"
    name: ovhregistrycred
    creationPolicy: Owner
  data:
  - secretKey: mysecret
    remoteRef:
      key: prod/va1/dockerconfigjson

Wenden Sie die Ressource in Ihrem Cluster an:

kubectl apply -f externalsecret.yaml

Dadurch wird ein Kubernetes-Secret-Objekt erstellt.

$ kubectl get secret -n external-secrets
NAME                                     TYPE                             DATA   AGE
...
ovhregistrycred                          kubernetes.io/dockerconfigjson   1      15m
...

Weitere Informationen zur Verwaltung des External Secrets Operator finden Sie in der dedizierten Dokumentation zum HashiCorp Vault-Provider: https://external-secrets.io/latest/.

Weiterführende Informationen

OKMS-Authentifizierungsmethoden

Secret Manager mit der REST-API verwenden

Treten Sie unserer User Community bei.

War diese Seite hilfreich?