9 commentaires
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)
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
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
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
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
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 !
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