web-dev-qa-db-fra.com

Restreindre l'accès à Internet - Docker Container

J'ai une situation pour restreindre l'accès à Internet du conteneur dans le réseau d'équilibrage de charge. par exemple dans cette image ci-dessous

easy for your reference

Seul container4 se connecte à Internet; autres trois communiquent uniquement via container4 avec le monde extérieur. Par exemple, si container1 a besoin du support smtp, il transmettra la requête smtp à container4 pour y accéder.

Aucun conteneur autre que container4 ne doit être autorisé à accéder directement à Internet! Cela devrait être appliqué au niveau Docker.

Je crois qu'il sera configurable sur la création d'un réseau docker , quelqu'un peut-il expliquer comment y parvenir?

18
Bilal Usean

Création d'un réseau pour accéder à Internet

docker network create --subnet = 172.19.0.0/16 internet

Création d'un réseau pour bloquer l'accès à Internet

docker network create --internal --subnet 10.1.1.0/24 no-internet

Si vous souhaitez connecter un conteneur Docker à Internet

docker network connect internet container-name

Si vous souhaitez bloquer l'accès à Internet

docker network connect no-internet container-name

Remarque

dans le réseau interne, nous ne pouvons pas exposer les ports pour se connecter au monde extérieur, veuillez vous référer à ceci question pour plus de détails

23
Bilal Usean

Comme trouvé ici , je l'ai fait fonctionner avec docker-compose. Enregistrer sous docker-compose.yml:

version: '3'

services:
  outgoing-wont-work:
    image: Alpine
    networks:
      - no-internet
    command: ping -c 3 google.com # will crash

  internal-will-work:
    image: Alpine
    networks:
      - no-internet
    command: ping -c 3 internal-and-external

  internal-and-external:
    image: Alpine
    networks:
      - no-internet
      - internet
    command: ping -c 3 google.com

networks:
  no-internet:
    driver: bridge
    internal: true
  internet:
    driver: bridge

Exécutez ensuite docker-compose up -d, docker-compose ps affichera quelque chose comme ceci après quelques secondes:

              Name                            Command               State    Ports
----------------------------------------------------------------------------------
dco_inet_internal-and-external_1   ping -c 3 google.com             Exit 0        
dco_inet_internal-will-work_1      ping -c 3 internal-and-ext ...   Exit 0        
dco_inet_outgoing-wont-work_1      ping -c 3 google.com             Exit 1      
18
exic