No hi ha res malament amb l’aplicació ni res malament amb el túnel, i el tauler encara no carrega. Quan un servei s’executa amb network_mode: service:vpn, comparteix l’espai de noms de xarxa del contenidor VPN, cosa que significa que l’oient i els ports publicats pertanyen a aquest espai de noms i no al servei. D’aquí se’n deriven tres decisions: on s’enllaça l’aplicació, quin contenidor publica el port i com d’estret és el camí de gestió. Poseu-les en l’ordre equivocat i cada paràmetre individual semblarà correcte mentre la combinació no pot funcionar.

Qui posseeix l’espai de noms del port

Amb un espai de noms compartit, afegir una entrada ports: al servei dependent no fa res d’útil, i diverses opcions de xarxa no hi són compatibles per disseny. Publiqueu-ho al contenidor que posseeix l’espai de noms. Aquest contenidor és també aquell l’adreça del qual apareix a l’amfitrió, així que el mapatge es llegeix com una entrada i no una per servei.

services:
  vpn:
    image: vpn-client-image
    cap_add: [NET_ADMIN]
    ports:
      - "127.0.0.1:8080:8080"
  app:
    network_mode: "service:vpn"

Fixeu-vos en l’adreça a l’esquerra del mapatge. Enllaçar a 127.0.0.1 manté el port publicat al loopback de l’amfitrió, que normalment és el que vol una interfície de gestió. Enllaçar a 0.0.0.0 l’exposa a totes les interfícies de l’amfitrió, i això és una decisió de seguretat diferent, no una comoditat.

Feu que l’aplicació escolti on l’espai de noms ho espera

Un oient enllaçat a 127.0.0.1 dins de l’espai de noms només és accessible des de dins d’aquest espai. Els ports publicats de l’amfitrió arriben de fora, així que l’aplicació ha d’enllaçar una adreça més àmplia perquè el mapatge funcioni. És un canvi d’una línia a la majoria de servidors, i és el pas que la gent s’salta després de copiar una guia d’enduriment escrita per a un desplegament sense contenidors.

docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/

La llista d’oients dins de l’aplicació us diu la veritat sobre l’adreça d’enllaç, i docker port us diu què ha publicat realment el propietari. Si el primer mostra 127.0.0.1 i el segon mostra un mapatge a l’amfitrió, heu trobat el desajust sense tocar la configuració de la VPN.

Trieu com entra el camí de gestió

Hi ha tres disposicions raonables. Publiqueu al contenidor VPN i hi arribeu des de l’amfitrió o la xarxa local. Poseu un proxy invers davant de l’espai de noms i doneu al proxy l’únic port exposat. O manteniu el tauler accessible només des de dins de l’espai de noms mitjançant una sessió exec o un túnel SSH, que és l’exposició més petita i la comoditat més baixa.

Quina encaixa depèn de qui necessita la interfície i des d’on. Un sol administrador al mateix amfitrió queda servit per un enllaç de loopback. Un equip que hi arriba a través de la VPN necessita un camí deliberat i un propietari amb nom. Triar l’opció del proxy us dona TLS i registres d’accés, a canvi d’un altre component a mantenir actualitzat.

Obriu el port de gestió sense obrir-ho tot

La política pròpia d’accés local o de bloqueig del client VPN pot descartar una petició de gestió entrant fins i tot mentre el túnel sortint funciona perfectament. Permeteu una excepció documentada per a l’origen i el port previstos, i després confirmeu que la protecció ordinària del túnel no ha canviat. Desactivar l’interruptor de seguretat per fer carregar un tauler intercanvia un control real per una pestanya del navegador.

Deixeu activada l’autenticació pròpia de l’aplicació. Ser dins d’una pila connectada a la VPN no autoritza cada usuari local ni cada dispositiu que pugui arribar a l’amfitrió, i un panell d’administració sense autenticació darrere d’un túnel continua sent un panell d’administració sense autenticació.

Verifiqueu des del dispositiu de gestió i torneu a verificar més tard

Proveu des de la màquina que realment gestionarà el servei, no des de l’amfitrió, i després verifiqueu per separat el camí d’internet que l’aplicació necessita. Un èxit de gestió demostra una direcció i no diu res sobre la sortida.

Torneu a provar després que es recreï la pila. Un propietari de xarxa substituït canvia l’espai de noms al qual s’adjunta l’aplicació, i una URL que funcionava abans d’una actualització pot no apuntar enlloc després. Anoteu el mapatge publicat i l’adreça d’enllaç perquè la propera reconstrucció sigui una comprovació de dos minuts en lloc d’una investigació repetida.

Articles relacionats