Cómo utilizar Kubernetes External Secrets Operator con Secret Manager

Ver como Markdown

Descubra cómo configurar External Secrets Operator para almacenar los secretos de Kubernetes en el Secret Manager de OVHcloud

Objetivo

Esta guía explica cómo configurar el External Secrets Operator de Kubernetes para utilizar el Secret Manager de OVHcloud como proveedor.

Warning

Esta guía describe el uso de External Secrets Operator con el proveedor HashiCorp Vault para acceder al Secret Manager de OVHcloud mediante la API compatible con HashiCorp Vault KV2.

OVHcloud ofrece ahora un proveedor nativo de External Secrets Operator. Recomendamos utilizarlo para los nuevos despliegues. Consulte la documentación del proveedor OVHcloud.

Requisitos

Procedimiento

Configuración del Secret Manager

Para permitir el acceso al Secret Manager, necesitará un token, la region y el okms-id de su Secret Manager.

Creación de las credenciales

Cree un usuario local IAM con derechos de acceso a su dominio, o utilice una cuenta de servicio. Consulte Métodos de autenticación OKMS para conocer la configuración completa y las plantillas de políticas IAM.

El usuario debe pertenecer a un grupo con el rol ADMIN o, si utiliza políticas IAM, debe tener al menos los siguientes derechos sobre el dominio OKMS:

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

También es posible crear un usuario 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"

A continuación, cree un token de acceso personal (Personal Access Token o PAT) user_pat:

A través de la API
A través de la CLI

Utilice la siguiente llamada a la API:

Con el siguiente payload (complételo con sus propios valores):

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

La API responderá 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"
}

Conserve el valor del campo token, ya que no volverá a mostrarse y se utilizará para autenticarse en el Secret Manager como user_pat.

Información del Secret Manager

También necesitará la region y el okms-id del dominio OKMS que desee utilizar. Este ID y esta región se encuentran en el o mediante la CLI OVHcloud:

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

Configuración del Secret Provider en Kubernetes

Instalación del External Secrets Operator (ESO) en su clúster de 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

Compruebe que el ESO se está ejecutando:

$  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

Creación de un secreto que contenga el PAT

Empiece por codificar su user_pat en base 64 para poder almacenarlo en un secreto de Kubernetes.

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

O, si el user_pat está almacenado en una variable de entorno:

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

A continuación, cree un archivo secret.yaml:

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

Y aplique el recurso al clúster con el comando kubectl apply -f secret.yaml.

O, si utiliza una variable de entorno:

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

El secreto debería haberse creado:

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

Configuración del External Secrets Operator

En primer lugar, configure un ClusterSecretStore que se encarga de la sincronización con el Secret Manager. Configuramos el SecretStore utilizando HashiCorp Vault con autenticación por token y el endpoint OKMS como backend.

Añada el user_pat como secreto para poder utilizarlo en los charts.

Para definir un nuevo recurso ClusterSecretStore, cree un archivo clustersecretstore.yaml con el siguiente contenido:

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, indique la región correcta y su okms_id
        path: "secret"
        version: "v2" 
        auth:
            tokenSecretRef:
              name: ovhcloud-vault-token # el secreto k8s que contiene su PAT
              key: token
              namespace: external-secrets
Info

Solo se admite la autenticación por token.

Info

Esta integración también funciona con un SecretStore.

El nombre de la región puede obtenerse a partir de la ubicación de su región utilizando:

GET/location

Por ejemplo, para Europe (France - Paris), el endpoint OKMS es eu-west-par.okms.ovh.net.

Despliegue el recurso en su clúster:

kubectl apply -f clustersecretstore.yaml

Uso del External Secrets Operator

Una vez configurado el ClusterSecretStore, puede definir los ExternalSecret procedentes del Secret Manager. Cree un archivo externalsecret.yaml con el siguiente contenido:

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

Aplique el recurso en su clúster:

kubectl apply -f externalsecret.yaml

Esto creará un objeto Secret de Kubernetes.

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

Para obtener más información sobre cómo gestionar el External Secrets Operator, consulte la documentación dedicada, utilizando el proveedor HashiCorp Vault: https://external-secrets.io/latest/.

Más información

Métodos de autenticación OKMS

Utilizar el Secret Manager con la API REST

Interactúe con nuestra comunidad de usuarios.

¿Le ha resultado útil esta página?