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.

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: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:

POST/me/identity/user/{user}/token

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?