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.

Artigos relacionados