Jak używać Kubernetes External Secrets Operator z Secret Manager

Pokaż jako Markdown

Skonfiguruj External Secrets Operator, aby przechowywać sekrety Kubernetes w OVHcloud Secret Manager

Wprowadzenie

Ten przewodnik wyjaśnia, jak skonfigurować Kubernetes External Secrets Operator, aby używać OVHcloud Secret Manager jako dostawcy.

Warning

Ten przewodnik opisuje korzystanie z External Secrets Operator z dostawcą HashiCorp Vault, aby uzyskać dostęp do OVHcloud Secret Manager za pośrednictwem API zgodnego z HashiCorp Vault KV2.

OVHcloud udostępnia teraz natywnego dostawcę External Secrets Operator. Zalecamy korzystanie z niego w nowych wdrożeniach. Zobacz dokumentację dostawcy OVHcloud.

Wymagania początkowe

W praktyce

Konfiguracja Secret Manager

Aby umożliwić dostęp do Secret Manager, potrzebujesz token, region oraz okms-id swojego Secret Manager.

Tworzenie danych uwierzytelniających

Utwórz lokalnego użytkownika IAM z prawami dostępu do Twojej domeny lub użyj konta serwisowego. Zapoznaj się z przewodnikiem Metody uwierzytelniania OKMS, aby poznać pełną konfigurację oraz szablony polityk IAM.

Użytkownik powinien należeć do grupy z rolą ADMIN. Jeśli zamiast tego używasz polityk IAM, użytkownik powinien mieć co najmniej następujące uprawnienia do domeny OKMS:

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

Alternatywnie można utworzyć użytkownika za pomocą 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"

Następnie utwórz Personal Access Token (PAT) user_pat:

Przez API
Przez CLI

Użyj następującego wywołania API:

Z następującym ładunkiem (uzupełnij go własnymi wartościami):

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

API odpowie:

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

Zachowaj wartość pola token, ponieważ nie zostanie ona ponownie wyświetlona i będzie używana do uwierzytelniania w Secret Manager jako user_pat.

Informacje o Secret Manager

Będziesz również potrzebować region oraz okms-id domeny OKMS, której chcesz użyć. Ten identyfikator i ten region znajdziesz w lub za pomocą CLI OVHcloud:

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

Konfiguracja Secret Provider w Kubernetes

Instalacja External Secrets Operator (ESO) na klastrze 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

Sprawdź, czy ESO działa:

$  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

Tworzenie sekretu zawierającego PAT

Zacznij od zakodowania swojego user_pat w formacie base64, aby można było go przechowywać w sekrecie Kubernetes.

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

Alternatywnie, jeśli user_pat został zapisany w zmiennej środowiskowej:

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

Następnie utwórz plik secret.yaml:

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

Następnie zastosuj go za pomocą polecenia kubectl apply -f secret.yaml.

Alternatywnie, jeśli używasz zmiennej środowiskowej:

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

Sekret powinien zostać utworzony:

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

Konfiguracja External Secrets Operator

Najpierw skonfiguruj ClusterSecretStore, który odpowiada za synchronizację z Secret Manager. Konfigurujemy SecretStore przy użyciu HashiCorp Vault z uwierzytelnianiem za pomocą tokena oraz z endpointem OKMS jako backendem.

Dodaj user_pat jako sekret, aby móc go używać w chartach.

Aby zdefiniować nowy zasób ClusterSecretStore, utwórz plik clustersecretstore.yaml o następującej treści:

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, wpisz właściwy region oraz swoje okms_id
        path: "secret"
        version: "v2" 
        auth:
            tokenSecretRef:
              name: ovhcloud-vault-token # Sekret k8s zawierający Twój PAT
              key: token 
              namespace: external-secrets
Info

Obsługiwane jest wyłącznie uwierzytelnianie za pomocą tokena.

Info

Ta integracja działa również z SecretStore.

Nazwę regionu można ustalić na podstawie lokalizacji regionu za pomocą:

GET/location

Na przykład dla Europe (France - Paris) endpoint OKMS to eu-west-par.okms.ovh.net.

Wdróż zasób w swoim klastrze:

kubectl apply -f clustersecretstore.yaml

Korzystanie z External Secrets Operator

Po skonfigurowaniu ClusterSecretStore możesz zdefiniować ExternalSecret pochodzący z Secret Manager.

Utwórz plik externalsecret.yaml o następującej treści:

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

Zastosuj zasób w swoim klastrze:

kubectl apply -f externalsecret.yaml

Spowoduje to utworzenie obiektu Secret Kubernetes.

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

Więcej informacji na temat zarządzania External Secrets Operator znajdziesz w dedykowanej dokumentacji, korzystając z dostawcy HashiCorp Vault: https://external-secrets.io/latest/.

Sprawdź również

Metody uwierzytelniania OKMS

Korzystanie z Secret Manager za pomocą API REST

Dołącz do grona naszych użytkowników.

Czy ta strona była pomocna?