Isoler les conteneurs grâce aux réseaux Docker

Une des fonctionnalités intéressantes de Docker est de permettre l’isolation des conteneurs les uns des autres, aussi bien au niveau des fichiers auxquels ils ont accès que des conteneurs avec qui ils peuvent communiquer. Les réseaux Docker permettent de réaliser l’isolation réseau.

L’idée est de mettre dans des réseaux séparés les services n’ayant pas besoin de communiquer entre eux, pour améliorer la sécurité de l’infrastructure.

Note:

Par exemple, la compromission d’un service dans un réseau particulier ne permet pas d’accéder aux autres services qui ne seraient pas exposés sur internet.

Imaginons un service web et sa base de données. Le service web a besoin d’être exposé sur Internet, via Traefik, mais sa base de données n’a pas besoin.

Ce qui nous donnerait quelque chose comme :

snippet.yaml
networks:
  # C'est le réseau dans lequel se trouve
  # Traefik sur toutes les machines.
  proxy:
    external: true
  # Ce réseau est créé uniquement pour
  # ce fichier Compose. db est la clé
  # pour s'y référer dans le fichier Compose.
  db:
    # Son vrai nom, pour Docker
    name: exemple-db

services:
  exemple:
    # On voit que le service est dans le réseau proxy, pour être
    # accessible depuis Traefik, mais aussi dans le réseau db, pour
    # pouvoir parler à la base de données.
    networks:
      - proxy
      - db
  # La base de donnée n'est que dans son réseau, et n'est donc
  # pas accessible depuis Internet.
  exemple_db:
    networks:
      - db

Note:

Dans cet exemple, si un des services du réseau proxy est compromis, il ne pourra pas contacter le service exemple_db, ce qui est une bonne chose pour la sécurité.

  • technique/docker/good_practices/networks.txt
  • de qduchemi