L'opérateur FerrVault lit les secrets d'un environnement de vault et les écrit dans un Secret Kubernetes ordinaire. Vos charges de travail lisent ce Secret comme d'habitude. L'opérateur le garde à jour, le supprime avec la ressource qui l'a déclaré, et peut redémarrer les charges qui le consomment quand une valeur change.

Il lui faut un token de compte de service avec le rôle viewer sur l'environnement à synchroniser. Créez-en un par cluster.

1. Installer l'opérateur

Le chart est publié comme artefact OCI sur GHCR :

helm install ferrvault-operator oci://ghcr.io/ferrlabs/charts/ferrvault-operator \
  --namespace ferrvault-system --create-namespace

La mise à jour se fait avec helm upgrade sur la même release. Les CRD sont conservées à la désinstallation : retirer le chart ne supprime jamais vos ressources ni les Secrets qu'elles gèrent.

2. Stocker le token

Placez le token dans un Secret, dans le namespace de la charge qui en a besoin :

kubectl -n my-app create secret generic ferrvault-sat --from-literal=token='fvsat_...'

3. Déclarer la connexion et le secret

apiVersion: ferrvault.com/v1alpha1
kind: FerrVaultConnection
metadata:
  name: ferrvault
  namespace: my-app
spec:
  url: https://api.ferrvault.com
  organization: acme
  tokenSecretRef:
    name: ferrvault-sat
    key: token
---
apiVersion: ferrvault.com/v1alpha1
kind: FerrVaultSecret
metadata:
  name: web-env
  namespace: my-app
spec:
  connectionRef:
    name: ferrvault
  project: web
  vault: web
  selector:
    names: [DATABASE_URL, STRIPE_KEY]
  target:
    name: web-env
  refreshInterval: 30m
  rolloutRestart:
    - kind: Deployment
      name: api
  • vault est le slug du vault, et doit correspondre au vault auquel le token est lié. L'environnement vient du token : il n'y a pas de champ pour lui.
  • organization et project sont exigés par les CRD aujourd'hui mais pas utilisés : le token décide déjà de ce que l'opérateur peut lire. N'importe quelle valeur non vide convient.
  • selector.names liste les secrets à synchroniser. Omettez-le pour synchroniser tous les secrets de l'environnement.
  • target.name est le Secret à écrire. Par défaut, c'est le nom de la ressource.
  • refreshInterval fixe la fréquence de relecture des valeurs. Une modification de la ressource est appliquée immédiatement.
  • rolloutRestart désigne les charges à redémarrer quand les valeurs synchronisées changent.

4. Vérifier

kubectl -n my-app get ferrvaultsecrets
kubectl -n my-app describe ferrvaultsecret web-env

Une ressource saine est Ready et indique sa dernière synchronisation. Si certains noms demandés n'existent pas dans l'environnement, elle reste Ready=False et les liste, et les autres clés sont tout de même écrites.

Transformer les valeurs

spec.transforms réécrit les valeurs avant qu'elles n'arrivent dans le Secret, dans l'ordre :

type Champs Effet
prefix value Ajoute value devant chaque clé.
suffix value Ajoute value après chaque clé.
rename from, to Renomme une clé.
base64Decode keys (optionnel) Décode depuis le base64 les clés listées, ou toutes.
jsonExpand key Aplatit un objet JSON en clés <KEY>_<SUB>.

Une transformation qui échoue laisse la ressource Ready=False avec Reason=TransformError, et le Secret garde sa dernière valeur valide.