Come utilizzare Kubernetes External Secrets Operator con Secret Manager

Vedi come Markdown

Scopri come configurare External Secrets Operator per archiviare i secret Kubernetes sul Secret Manager di OVHcloud

Obiettivo

Questa guida spiega come configurare l'External Secrets Operator di Kubernetes per utilizzare il Secret Manager di OVHcloud come provider.

Warning

Questa guida descrive l'utilizzo di External Secrets Operator con il provider HashiCorp Vault per accedere al Secret Manager di OVHcloud tramite l'API compatibile HashiCorp Vault KV2.

OVHcloud fornisce ora un provider External Secrets Operator nativo. Ti consigliamo di utilizzarlo per i nuovi deployment. Consulta la documentazione del provider OVHcloud.

Prerequisiti

Procedura

Configurazione del Secret Manager

Per consentire l'accesso al Secret Manager, avrai bisogno di un token, della region e dell'okms-id del tuo Secret Manager.

Creazione delle credenziali

Crea un utente locale IAM con i diritti di accesso al tuo dominio, oppure utilizza un account di servizio. Consulta Metodi di autenticazione OKMS per la configurazione completa e i modelli di policy IAM.

L'utente deve appartenere a un gruppo con il ruolo ADMIN oppure, se utilizzi delle policy IAM, deve avere almeno i seguenti diritti sul dominio OKMS:

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

È anche possibile creare un utente con la CLI OVHcloud:

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"

Quindi crea un token di accesso personale (Personal Access Token o PAT) user_pat:

Tramite l'API
Tramite la CLI

Utilizza la seguente chiamata API:

Con il seguente payload (compilalo con i tuoi valori):

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

L'API risponderà con:

{
  "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"
}

Conserva il valore del campo token poiché non verrà più visualizzato e sarà utilizzato per autenticarsi al Secret Manager come user_pat.

Informazioni del Secret Manager

Avrai bisogno anche della region e dell'okms-id del dominio OKMS che desideri utilizzare. Questo ID e questa regione sono disponibili nella o tramite la CLI OVHcloud:

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

Configurazione del Secret Provider in Kubernetes

Installazione dell'External Secrets Operator (ESO) sul tuo cluster Kubernetes

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

Verifica che l'ESO sia in esecuzione:

$  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

Creazione di un secret contenente il PAT

Inizia codificando il tuo user_pat in base 64 in modo da poterlo memorizzare in un secret Kubernetes.

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

Oppure, se il user_pat è memorizzato in una variabile d'ambiente:

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

Quindi crea un file secret.yaml:

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

E applica la risorsa al cluster con il comando kubectl apply -f secret.yaml.

Oppure, se utilizzi una variabile d'ambiente:

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

Il secret dovrebbe essere stato creato:

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

Configurazione dell'External Secrets Operator

Innanzitutto, configura un ClusterSecretStore che si occupa della sincronizzazione con il Secret Manager. Configuriamo il SecretStore utilizzando HashiCorp Vault con l'autenticazione tramite token e l'endpoint OKMS come backend.

Aggiungi il user_pat come secret per poterlo utilizzare nei chart.

Per definire una nuova risorsa ClusterSecretStore, crea un file clustersecretstore.yaml con il seguente contenuto:

apiVersion: external-secrets.io/v1
kind: ClusterSecretStore
metadata:
  name: vault-secret-store
spec:
  provider:
      vault:
        server: "https://<region>.okms.ovh.net/api/<okms_id>" # endpoint OKMS, inserisci la regione corretta e il tuo okms_id
        path: "secret"
        version: "v2" 
        auth:
            tokenSecretRef:
              name: ovhcloud-vault-token # il secret k8s che contiene il tuo PAT
              key: token
              namespace: external-secrets
Info

È supportata solo l'autenticazione tramite token.

Info

Questa integrazione funziona anche con un SecretStore.

Il nome della regione può essere ricavato dalla posizione della tua regione utilizzando:

GET/location

Ad esempio, per Europe (France - Paris), l'endpoint OKMS è eu-west-par.okms.ovh.net.

Esegui il deploy della risorsa nel tuo cluster:

kubectl apply -f clustersecretstore.yaml

Utilizzo dell'External Secrets Operator

Una volta configurato il ClusterSecretStore, puoi definire gli ExternalSecret provenienti dal Secret Manager. Crea un file externalsecret.yaml con il seguente contenuto:

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

Applica la risorsa nel tuo cluster:

kubectl apply -f externalsecret.yaml

Questo creerà un oggetto Secret Kubernetes.

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

Per ulteriori informazioni sulla gestione dell'External Secrets Operator, consulta la documentazione dedicata, utilizzando il provider HashiCorp Vault: https://external-secrets.io/latest/.

Per saperne di più

Metodi di autenticazione OKMS

Utilizzare il Secret Manager con l'API REST

Contatta la nostra Community di utenti.

Questa pagina ti è stata utile?