Files
laboratori-cloud/labs/lab-02-network/tutorial/03-verify-network-isolation.md
Luca Sacchi Ricciardi 5b2c8c37aa feat(lab-02): complete Phase 3 - Network & VPC lab
Implement Lab 02 with Docker bridge networks simulating VPC/Subnets.

Test Infrastructure (RED phase):
- 6 bash test scripts for network creation, isolation, INF-02 compliance
- Fail-fast orchestration with run-all-tests.sh
- Quick validation script for development

Documentation (Diátaxis framework):
- 3 tutorials: VPC creation, container deployment, isolation verification
- 4 how-to guides: create network, inspect config, test isolation, cleanup
- 3 reference docs: Docker network commands, Compose syntax, VPC mapping
- 1 explanation: Docker ↔ VPC parallels (PARA-01/02/03/04)

Infrastructure (GREEN phase):
- docker-compose.yml with VPC networks (10.0.1.0/24, 10.0.2.0/24)
- 5 services: web, app, db, test-public, test-private
- INF-02 compliant: 127.0.0.1 bindings only, no 0.0.0.0
- Private network with --internal flag
- Multi-homed app container (public + private networks)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 17:26:35 +01:00

5.9 KiB

Tutorial: Verificare l'Isolamento delle Reti VPC

In questo tutorial imparerai a verificare e testare l'isolamento tra le reti Docker bridge, confermando che la tua architettura VPC multi-tier funziona correttamente.

Obiettivo

Verificare che:

  • I container nella stessa rete possono comunicare
  • I container in reti diverse NON possono comunicare (isolamento)
  • Il DNS funziona entro la stessa rete
  • I container multi-homed possono raggiungere entrambe le reti

Prerequisiti

  • Completati Tutorial 1 e Tutorial 2
  • Container in esecuzione: docker compose ps mostra 3 container attivi

Passo 1: Verificare i Container in Esecuzione

Esegui:

cd ~/laboratori-cloud/labs/lab-02-network
docker compose ps

Assicurati che lab02-web, lab02-app, e lab02-db siano "Up".

Se non lo sono:

docker compose up -d

Passo 2: Test Comunicazione Stessa Rete

I container nella stessa rete devono potersi comunicare.

Esegui:

# Verifica: app puo raggiungere web (stessa rete pubblica)
docker exec lab02-app ping -c 2 lab02-web

Atteso:

PING lab02-web (10.0.1.10): 56 data bytes
64 bytes from 10.0.1.10: seq=0 ttl=64 time=0.123 ms
64 bytes from 10.0.1.10: seq=1 ttl=64 time=0.045 ms
--- lab02-web ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss

SUCCESS = Comunicazione funziona nella stessa rete.


Passo 3: Test Comunicazione Cross-Rete (DEVE FALLIRE)

Verifica che l'isolamento funzioni.

Esegui:

# Verifica: web NON puo raggiungere db (reti diverse)
docker exec lab02-web ping -c 2 lab02-db

Atteso:

ping: bad address 'lab02-db'

Oppure:

PING lab02-db (10.0.2.10): 56 data bytes
--- lab02-db ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss

FALLIMENTO ATTESO = Isolamento funzionante!

Questo e corretto: lab02-web (10.0.1.10) non puo raggiungere lab02-db (10.0.2.10) perche sono in reti diverse.


Passo 4: Test Container Multi-Homed

Il container lab02-app e connesso a entrambe le reti.

Esegui:

# Verifica: app puo raggiungere web (stessa rete pubblica)
docker exec lab02-app ping -c 2 lab02-web

Atteso: SUCCESSO

Esegui:

# Verifica: app puo raggiungere db (stessa rete privata)
docker exec lab02-app ping -c 2 lab02-db

Atteso: SUCCESSO

Questo dimostra che lab02-app puo fungere da ponte tra le reti.


Passo 5: Test DNS Resolution

Verifica che il DNS funzioni entro la stessa rete.

Esegui:

# Test DNS nella stessa rete
docker exec lab02-app nslookup lab02-web

Atteso:

Name:      lab02-web
Address 1: 10.0.1.10

Esegui:

# Test DNS cross-rete (dovrebbe fallire)
docker exec lab02-web nslookup lab02-db

Atteso: Fallisce o restituisce errore


Passo 6: Test Accesso da Host

Verifica INF-02 compliance: servizi privati non accessibili dall'host.

Esegui:

# Test accesso web (pubblico, ma solo localhost)
curl http://127.0.0.1:8080

Atteso: SUCCESSO (HTML response)

Esegui:

# Test accesso app
curl http://127.0.0.1:8081

Atteso: SUCCESSO

Esegui:

# Test accesso database (privato - NON deve funzionare)
curl http://127.0.0.1:5432

Atteso:

curl: (7) Failed to connect to 127.0.0.1 port 5432 after X ms: Connection refused

Questo e corretto! Il database e nella rete privata senza porte esposte.


Passo 7: Test Isolamento Internet (Rete Privata)

La rete privata con flag --internal non puo raggiungere internet.

Esegui:

# Test database non puo raggiungere internet
docker exec lab02-db ping -c 1 -W 1 8.8.8.8

Atteso: FALLISCE (nessuna route verso internet)

Questo e corretto per una subnet privata cloud.


Passo 8: Test Container di Isolamento

Usa lo script di test del lab.

Esegui:

bash tests/02-isolation-verification-test.sh

Questo script verifica automaticamente tutti i casi di isolamento.


Matrice di Connettività

Source Target Stesso Network Risultato
web (10.0.1.10) app (10.0.1.20) Si (vpc-public) SUCCESSO
app (10.0.1.20) db (10.0.2.10) Si (vpc-private) SUCCESSO
web (10.0.1.10) db (10.0.2.10) No FALLISCE
db (10.0.2.10) web (10.0.1.10) No FALLISCE
Host (127.0.0.1) web (8080) Port mapping SUCCESSO
Host (127.0.0.1) db (5432) Nessun mapping FALLISCE
db Internet (8.8.8.8) --internal flag FALLISCE

Verifica

Hai completato questo tutorial quando:

  • Container nella stessa rete comunicano
  • Container in reti diverse sono isolati (ping fallisce)
  • Container multi-homed raggiungono entrambe le reti
  • DNS risolve i nomi nella stessa rete
  • Servizi privati non accessibili dall'host
  • Rete privata non raggiunge internet

Prossimi Passi


Troubleshooting

Problema: Tutti i ping funzionano (nessun isolamento)

Causa: Container potrebbero essere nella rete di default bridge

Soluzione:

# Verifica reti dei container
docker inspect lab02-web --format '{{json .NetworkSettings.Networks}}'

# Devono mostrare solo lab02-vpc-public, non "bridge"

Problema: lab02-app non puo raggiungere nessuno

Causa: IP statici potrebbero entrare in conflitto

Soluzione:

# Ricrea senza IP statici
docker compose down
# Rimuovi ipv4_address dal compose
docker compose up -d

Problema: DNS non funziona

Soluzione:

# Verifica configurazione DNS container
docker exec lab02-app cat /etc/resolv.conf

# Dovrebbe mostrare 127.0.0.11 (Docker embedded DNS)

Problema: Container web non si avvia

Soluzione:

# Verifica logs
docker compose logs web

# Verifica che la porta non sia in uso
ss -tlnp | grep 8080