Interruptor de emerxencia para un sidecar VPN: bloquea o tráfico cando sae
Compartir o espazo de nomes dun contedor VPN non detén a aplicación cando morre o túnel. Engade unha política de saída explícita e proba reinicios, non só desconexións.
Un contedor de aplicación que comparte o espazo de nomes de rede dun contedor VPN non ten interface propia, polo que é doado supor que non pode enviar nada cando o túnel falla. Ese suposto é erróneo no modo de fallo que importa. Se o proceso VPN morre mentres o espazo de nomes sobrevive, a aplicación conserva os seus sockets e o espazo de nomes conserva as súas rutas, e o tráfico continúa polo camiño que siga instalado. Un interruptor de emerxencia real é unha política de filtrado explícita máis probas do ciclo de vida do runtime, non unha dependencia de arranque.
Por que compartir o espazo de nomes non é un interruptor de emerxencia
Compartir un espazo de nomes significa que a aplicación usa as interfaces, os enderezos e a táboa de rutas do contedor VPN. Elimina o camiño independente da aplicación cara á rede mentres o espazo de nomes compartido está intacto, e non di nada sobre o que fará ese espazo de nomes cando o túnel desapareza.
As condicións de dependencia de Compose poden atrasar o arranque dunha aplicación ata que unha dependencia estea sá. Iso cobre un único momento no tempo e ningún fallo posterior, así que é unha ferramenta de ordenación de arranque e non un cortalumes de saída continuo.
Que ocorre realmente cando o contedor sae
Distinga tres acontecementos. O proceso VPN dentro do contedor pode morrer mentres o contedor segue en execución. O contedor pode deterse ou eliminarse, o que destrúe o espazo de nomes. O contedor pode recrearse, o que constrúe un espazo de nomes novo e regras novas.
No primeiro caso o espazo de nomes persiste, a ruta por defecto pode seguir apuntando á interface física, e a aplicación segue enviando directamente. No segundo caso a aplicación dependente adoita perder a conectividade por completo, porque o seu espazo de nomes desapareceu. No terceiro caso a aplicación pode reconectarse a un espazo de nomes novo antes de que o túnel estea listo. Cada caso necesita unha proba distinta, e un deseño que só cobre a desconexión ordenada cobre o menos interesante.
Construír unha política de saída explícita
Escriba a política dentro do espazo de nomes compartido para que se aplique aos paquetes da aplicación. A forma é un descarte por defecto con excepcións estreitas: loopback, a interface do túnel e o enderezo e o port concretos do punto final que necesita o transporte do túnel.
A excepción do punto final debe estar no seu sitio antes de que o túnel estea levantado, ou o cliente VPN non poderá alcanzar o seu servidor. Por iso o conxunto de regras permite explicitamente o transporte exterior en lugar de permitir a interface física en xeral. Engada tamén regras IPv6 se o espazo de nomes ten conectividade IPv6, porque unha política só IPv4 deixa aberta a outra familia.
O DNS tamén forma parte da política. Se a aplicación resolve nomes mediante un resolutor accesible só dentro do túnel, a regra de descarte romperá a resolución cando o túnel estea caído, que é o comportamento correcto para un interruptor de emerxencia. Decida a propósito se é iso o que quere.
Probar o ciclo de vida, non só a desconexión
Envíe unha petición nova e inocua mentres o túnel está san, logo mate o proceso VPN e envíe outra. Repítao tras unha parada do contedor, tras un reinicio e tras unha recreación. Unha petición nova importa porque unha conexión existente pode sobrevivir a un cambio de regras que bloquea as novas.
Non confíe nunha comprobación de estado nin nunha consulta de IP de saída como mecanismo de bloqueo. Unha comprobación observa o estado e infórmao; unha política controla o tráfico. As dúas cousas pertencen ao mesmo despregamento, e non son substitutas.
Rexistrar as regras para que a proba sobreviva a unha actualización
Escriba o resultado esperado de cada caso de fallo na documentación do despregamento, xunto coas regras que o implementan. Ese rexistro permite executar a mesma proba tras unha actualización de imaxe ou do runtime, cando o comportamento do espazo de nomes ou as rutas por defecto poden cambiar sen que ninguén edite o ficheiro de Compose.
Manteña o camiño exterior necesario do punto final VPN separado da saída de aplicación sen restricións, e manteña o DNS e o IPv6 dentro da cobertura prevista. Se a política permite toda a interface física por comodidade, o interruptor de emerxencia desapareceu. A documentación de redes de Docker describe a disposición de espazo de nomes compartido sobre a que se constrúe a política, e é a referencia que hai que consultar cando o comportamento do runtime está en dúbida.