Como utilizar o Kubernetes External Secrets Operator com o Secret Manager

Ver como Markdown

Descubra como configurar o External Secrets Operator para armazenar os segredos Kubernetes no Secret Manager da OVHcloud

Objetivo

Este manual explica como configurar o External Secrets Operator do Kubernetes para utilizar o Secret Manager da OVHcloud como fornecedor.

Warning

Este manual descreve a utilização do External Secrets Operator com o fornecedor HashiCorp Vault para aceder ao Secret Manager da OVHcloud através da API compatível com HashiCorp Vault KV2.

A OVHcloud disponibiliza agora um fornecedor External Secrets Operator nativo. Recomendamos a sua utilização para novas implementações. Consulte a documentação do fornecedor OVHcloud.

Requisitos

Instruções

Configuração do Secret Manager

Para permitir o acesso ao Secret Manager, irá precisar de um token, da region e do okms-id do seu Secret Manager.

Criação das credenciais

Crie um utilizador local IAM com direitos de acesso ao seu domínio, ou utilize uma conta de serviço. Consulte Métodos de autenticação OKMS para obter a configuração completa e os modelos de políticas IAM.

O utilizador deve pertencer a um grupo com a função ADMIN ou, caso utilize políticas IAM, deve ter pelo menos os seguintes direitos sobre o domínio OKMS:

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

Também é possível criar um utilizador com a 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"

Em seguida, crie um token de acesso pessoal (Personal Access Token ou PAT) user_pat:

Através da API
Através da CLI

Utilize a seguinte chamada à API:

Com o seguinte payload (preencha-o com os seus valores):

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

A API responderá com:

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

Guarde o valor do campo token, pois não será apresentado novamente e será utilizado para se autenticar no Secret Manager como user_pat.

Informações do Secret Manager

Irá também precisar da region e do okms-id do domínio OKMS que pretende utilizar. Este ID e esta região podem ser encontrados no ou através da CLI OVHcloud:

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

Configuração do Secret Provider no Kubernetes

Instalação do External Secrets Operator (ESO) no seu 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

Verifique se o ESO está em execução:

$  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

Criação de um segredo que contém o PAT

Comece por codificar o seu user_pat em base 64 para que possa ser armazenado num segredo Kubernetes.

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

Ou, se o user_pat estiver armazenado numa variável de ambiente:

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

Em seguida, crie um ficheiro secret.yaml:

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

E aplique o recurso ao cluster com o comando kubectl apply -f secret.yaml.

Ou, se utilizar uma variável de ambiente:

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

O segredo deverá ter sido criado:

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

Configuração do External Secrets Operator

Em primeiro lugar, configure um ClusterSecretStore responsável pela sincronização com o Secret Manager. Configuramos o SecretStore utilizando o HashiCorp Vault com autenticação por token e o endpoint OKMS como backend.

Adicione o user_pat como segredo para poder utilizá-lo nos charts.

Para definir um novo recurso ClusterSecretStore, crie um ficheiro clustersecretstore.yaml com o seguinte conteúdo:

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, preencha com a região correta e o seu okms_id
        path: "secret"
        version: "v2" 
        auth:
            tokenSecretRef:
              name: ovhcloud-vault-token # o secret k8s que contém o seu PAT
              key: token
              namespace: external-secrets
Info

Apenas é suportada a autenticação por token.

Info

Esta integração também funciona com um SecretStore.

O nome da região pode ser obtido a partir da localização da sua região utilizando:

GET/location

Por exemplo, para Europe (France - Paris), o endpoint OKMS é eu-west-par.okms.ovh.net.

Implemente o recurso no seu cluster:

kubectl apply -f clustersecretstore.yaml

Utilização do External Secrets Operator

Depois de configurado o ClusterSecretStore, pode definir os ExternalSecret provenientes do Secret Manager. Crie um ficheiro externalsecret.yaml com o seguinte conteúdo:

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 o recurso no seu cluster:

kubectl apply -f externalsecret.yaml

Isto irá criar um objeto Secret do Kubernetes.

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

Para mais informações sobre a gestão do External Secrets Operator, consulte a documentação dedicada, utilizando o fornecedor HashiCorp Vault: https://external-secrets.io/latest/.

Quer saber mais?

Métodos de autenticação OKMS

Utilizar o Secret Manager com a API REST

Fale com a nossa comunidade de utilizadores.

Esta página foi útil?