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
vaultest 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.organizationetprojectsont 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.namesliste les secrets à synchroniser. Omettez-le pour synchroniser tous les secrets de l'environnement.target.nameest le Secret à écrire. Par défaut, c'est le nom de la ressource.refreshIntervalfixe la fréquence de relecture des valeurs. Une modification de la ressource est appliquée immédiatement.rolloutRestartdé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.