Les symptômes
Un matin, plus rien ne sort : les indexeurs ne répondent plus, les téléchargements sont en timeout, et les services qui passent par le VPN sont injoignables. Aucun changement de config récent. Le genre de panne qui sent le facteur externe.
Le diagnostic
La chaîne en question : plusieurs conteneurs partagent le namespace réseau d'un conteneur VPN (network_mode: service:vpn). Si le conteneur VPN tombe, tout ce qui est accroché derrière tombe avec lui — par design.
Le coupable : l'image du conteneur VPN était dépréciée et ne se mettait plus à jour. Côté fournisseur VPN, un changement d'API d'authentification a rendu l'ancienne version incapable de se connecter. Le conteneur bouclait en redémarrage, et toute la chaîne derrière était morte.
La correction
- Migration vers une image maintenue et configuration de la nouvelle méthode d'authentification
- Vérification de la kill switch : sans VPN, rien ne doit sortir en clair — c'était le cas, au moins ça
- Ajout d'une sonde de monitoring sur la sortie VPN elle-même (vérifier l'IP publique vue depuis le conteneur), pas seulement sur l'état du conteneur
Les leçons
- Un conteneur
runningn'est pas un conteneur fonctionnel. Monitorer le service, pas le process. - Les images Docker ont une durée de vie. Faire l'inventaire des images non maintenues avant qu'elles ne choisissent leur moment.
- Les architectures en namespace partagé sont élégantes mais créent un point de défaillance unique — il faut le savoir et le surveiller en conséquence.