Interruptor d’emergència per a un sidecar VPN: bloqueja el trànsit quan surt
Compartir l’espai de noms d’un contenidor VPN no atura l’aplicació quan el túnel cau. Afegeix una política de sortida explícita i prova reinicis, no només desconnectades.
Un contenidor d’aplicació que comparteix l’espai de noms de xarxa d’un contenidor VPN no té cap interfície pròpia, de manera que és fàcil suposar que no pot enviar res quan el túnel falla. Aquesta suposició és falsa en el mode de fallada que importa. Si el procés VPN mor mentre l’espai de noms sobreviu, l’aplicació conserva els seus sockets i l’espai de noms conserva les seves rutes, i el trànsit continua per qualsevol camí que encara estigui instal·lat. Un interruptor d’emergència real és una política de filtratge explícita més proves del cicle de vida del runtime, no una dependència d’arrencada.
Per què compartir l’espai de noms no és un interruptor d’emergència
Compartir un espai de noms significa que l’aplicació utilitza les interfícies, les adreces i la taula de rutes del contenidor VPN. Elimina el camí independent de l’aplicació cap a la xarxa mentre l’espai de noms compartit està intacte, i no diu res sobre què farà aquest espai de noms quan el túnel desaparegui.
Les condicions de dependència de Compose poden ajornar l’arrencada d’una aplicació fins que una dependència estigui sana. Això cobreix un sol moment en el temps i cap fallada posterior, de manera que és una eina d’ordenació d’arrencada i no un tallafoc de sortida continu.
Què passa realment quan el contenidor surt
Distingeix tres esdeveniments. El procés VPN dins del contenidor pot morir mentre el contenidor continua en marxa. El contenidor pot aturar-se o eliminar-se, cosa que destrueix l’espai de noms. El contenidor pot recrear-se, cosa que construeix un espai de noms nou i regles noves.
En el primer cas l’espai de noms persisteix, la ruta per defecte pot continuar apuntant a la interfície física, i l’aplicació continua enviant directament. En el segon cas l’aplicació dependent normalment perd la connectivitat del tot, perquè el seu espai de noms ha desaparegut. En el tercer cas l’aplicació es pot tornar a connectar a un espai de noms nou abans que el túnel estigui a punt. Cada cas necessita una prova diferent, i un disseny que només cobreix la desconnectada ordenada cobreix el cas menys interessant.
Construeix una política de sortida explícita
Escriu la política dins de l’espai de noms compartit perquè s’apliqui als paquets de l’aplicació. La forma és un descartament per defecte amb excepcions estretes: loopback, la interfície del túnel i l’adreça i el port concrets del punt final que necessita el transport del túnel.
L’excepció del punt final ha d’estar enllestida abans que el túnel estigui aixecat, o el client VPN no podrà arribar al seu servidor. Per això el conjunt de regles permet explícitament el transport exterior en lloc de permetre la interfície física en general. Afegeix també regles IPv6 si l’espai de noms té connectivitat IPv6, perquè una política només IPv4 deixa l’altra família oberta.
El DNS també pertany a la política. Si l’aplicació resol noms a través d’un resolutor accessible només dins del túnel, la regla de descartament trencarà la resolució quan el túnel estigui caigut, que és el comportament correcte per a un interruptor d’emergència. Decideix deliberadament si és això el que vols.
Prova el cicle de vida, no només la desconnectada
Envia una petició nova i innòcua mentre el túnel està sa, mata després el procés VPN i envia’n una altra. Repeteix-ho després d’aturar el contenidor, després d’un reinici i després de recrear-lo. Una petició nova importa perquè una connexió existent pot sobreviure a un canvi de regles que bloqueja les noves.
No confiïs en una comprovació d’estat ni en una consulta d’IP de sortida com a mecanisme de bloqueig. Una comprovació observa l’estat i l’informa; una política controla el trànsit. Les dues coses pertanyen al mateix desplegament, i no són substituts.
Enregistra les regles perquè la prova sobrevisqui una actualització
Escriu el resultat esperat de cada cas de fallada a la documentació del desplegament, juntament amb les regles que l’implementen. Aquest registre permet executar la mateixa prova després d’una actualització d’imatge o d’una actualització del runtime, quan el comportament de l’espai de noms o les rutes per defecte poden canviar sense que ningú editi el fitxer de Compose.
Mantén el camí exterior necessari del punt final VPN separat de la sortida d’aplicació sense restriccions, i mantén el DNS i l’IPv6 dins de la cobertura prevista. Si la política permet tota la interfície física per comoditat, l’interruptor d’emergència ha desaparegut. La documentació de xarxes de Docker descriu la disposició d’espai de noms compartit sobre la qual es construeix la política, i és la referència a consultar quan el comportament del runtime està en dubte.