Ho un server con due container docker in esecuzione. Uno di questi è il frontend di una piccola applicazione, servita con http-server
. Questa applicazione utilizza Javascript fetch API per recuperare i dati da un database veramente semplice basato sul modulo json-server di Node.js, che è in esecuzione nell'altro contenitore.
Succede quello json-server
rende la porta 3000 disponibile all'utente esterno, ad esempio se qualcuno punta un browser su http://example.com:3000
, i miei dati saranno disponibili senza il filtraggio e la presentazione forniti dal frontend. Questo non è quello che voglio.
Vorrei bloccare la porta 3000 al mondo esterno, consentendo al mio altro contenitore docker di recuperare i dati come al solito. Penso che questo possa essere fatto su base IP, ma non so come farlo.
Questa è la mia attuale configurazione di Iptables, creata principalmente da Docker come standard.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http-alt
ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:3000
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Nella configurazione sopra, IP 172.17.0.2 è la mia applicazione di frontend, mentre 172.17.0.3 è l'IP del mio contenitore di database.
Il contenitore di front-end è stato avviato con
docker run -p 80:8080 --name=frontend -d mtr/frontend
e il secondo con
docker run -p 3000:3000 --name=database -d mtr/database
Ho anche considerato la possibilità di avere un modo Docker per rendere questo accesso limitato, ma dopo molte ricerche non ho trovato nulla.
Qualche suggerimento su come posso farlo succedere?