Rotation auto des secrets Vault pour K8s ça marche pas

Posté par michel-barre le 21/11/2025
RÉSOLU

michel-barre

Membre depuis le 06/06/2020

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

Commentaires

smoulin

Membre depuis le 15/02/2020

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 ?

bmarques

Membre depuis le 26/07/2024

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)

valerie79

Membre depuis le 03/11/2021

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

dufour-zacharie

Membre depuis le 01/04/2020

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

smoulin

Membre depuis le 15/02/2020

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

michel-barre

Membre depuis le 06/06/2020

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

bmarques

Membre depuis le 26/07/2024

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

valerie79

Membre depuis le 03/11/2021

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

michel-barre

Membre depuis le 06/06/2020

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

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