Rotation auto des secrets Vault pour K8s ça marche pas

michel-barre 21/11/2025
RÉSOLU
michel-barre
Auteur Actif
Avatar de michel-barre
michel-barre
Auteur Actif

salut les pros. j'essaie de mettre en place la rotation automatique des secrets vault pour nos applications dans k8s. j'utilise vault-agent pour injecter les secrets via un sidecar. ça marche pour l'injection initiale mais quand le secret est renouvelé dans vault (par exemple toutes les 5min pour un token db), l'app ne voit pas le nouveau secret. elle continue d'utiliser l'ancien même si le fichier est mis à jour dans le pod

# vault-agent sidecar config exemple
containers:
  - name: app
    image: my-app
    volumemounts:
      - name: vault-secrets
        mountpath: /vault/secrets
  - name: vault-agent
    image: hashicorp/vault-agent:1.14.0
    args:
      - "agent"
      - "-config=/etc/vault-agent-config.hcl"
    volumemounts:
      - name: vault-secrets
        mountpath: /vault/secrets
    env:
      - name: vault_addr
        value: "https://vault.example.com"
volumes:
  - name: vault-secrets
    emptydir: {}
21/11/2025 à 16:34

9 commentaires

smoulin
Membre Actif Secouriste
Avatar de smoulin
smoulin
Membre Actif Secouriste

hmm ça sent le problème de rafraîchissement d'app. vault-agent met à jour le fichier mais l'app ne relit pas le fichier. comment ton app lit le secret ? elle lit le fichier une fois au démarrage ou elle monitore les changements sur le fs ?

22/11/2025 à 14:07
bmarques
Membre Actif Secouriste
Avatar de bmarques
bmarques
Membre Actif Secouriste

exactement. faut que ton app soit capable de détecter le changement du fichier (inotify par exemple) ou que tu la redémarres. sinon le plus simple c'est d'utiliser l'init container de vault agent pour injecter le secret avant le démarrage de l'app et de laisser k8s redéployer le pod quand le secret change (via external-secrets ou vault-k8s-secret-controller)

23/11/2025 à 12:00
valerie79
Membre Actif
Avatar de valerie79
valerie79
Membre Actif

ouais ou ptete que le file descriptor est toujours ouvert sur l'ancien fichier. si ton app garde un fd ouvert, même si l'inode change, elle voit toujours l'ancienne version. c'est un piège classique avec les montages de secrets dans k8s (configmaps/secrets) si t'utilises pas subpath

24/11/2025 à 06:07
dufour-zacharie
Membre Actif Secouriste
Avatar de dufour-zacharie
dufour-zacharie
Membre Actif Secouriste

si c'est un volume emptydir partagé entre l'app et l'agent, vault-agent est censé mettre à jour le fichier directement. mais comme dit, l'app doit relire. des frameworks web le font nativement, d'autres non. quelle techno c'est ton app

25/11/2025 à 01:12
smoulin
Membre Actif Secouriste
Avatar de smoulin
smoulin
Membre Actif Secouriste

t'as vérifié les logs de vault-agent dans le sidecar ? il doit indiquer qu'il a écrit un nouveau secret. si ça se trouve c'est vault qui n'envoie pas les mises à jour à l'agent

25/11/2025 à 22:20
michel-barre
Auteur Actif
Avatar de michel-barre
michel-barre
Auteur Actif

mon app est en java avec spring boot. par défaut spring ne relit pas les fichiers de config automatiquement. il les charge une fois au démarrage. j'avais pas pensé à l'inotify ou au redémarrage

26/11/2025 à 20:37
bmarques
Membre Actif Secouriste
Avatar de bmarques
bmarques
Membre Actif Secouriste

ah spring boot c'est chiant pour ça. t'as des libs comme spring-cloud-starter-vault-config qui peuvent aider mais ça demande une intégration plus poussée. sinon, la méthode bourrine c'est de redémarrer le pod. regarde du côté des contrôleurs comme external-secrets qui peuvent recréer un secret k8s et ainsi déclencher un rollout du deployment

27/11/2025 à 19:12
valerie79
Membre Actif
Avatar de valerie79
valerie79
Membre Actif

sinon tu peux faire un script dans vault-agent qui, après avoir écrit le secret, va faire un curl vers un endpoint de ton app pour la forcer à recharger la config. c'est pas super propre mais ça dépanne

28/11/2025 à 16:05
michel-barre
Auteur Actif
Avatar de michel-barre
michel-barre
Auteur Actif

ok je vois. j'avais mis un

watch -n 1 ls -li /vault/secrets
dans l'app et je voyais bien l'inode changer. mais comme vous dites, spring ne relit pas. je vais tester la solution avec external-secrets pour qu'il recrée le secret k8s et force un rollout du deployment. c'est plus propre que de redémarrer l'app manuellement ou un webhook. merci les gars

29/11/2025 à 10:25

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire