Docker - Connexion Directe entre Conteneurs

Introduction

Par défaut, les conteneurs Docker utilisent un réseau bridge virtuel (docker0) pour communiquer, avec une passerelle par défaut pour le routage. Pour établir une communication directe sans passerelle, on peut créer des liens point à point entre deux conteneurs en assignant des interfaces peer. Cette méthode ne nécessite ni sous-réseau ni masque réseau, offrant ainsi une connectivité simplifiée.

Étape 1 : Démarrage des conteneurs

On lance deux conteneurs avec l'option --net=none pour les isoler du réseau bridge par défaut. Vérifiez leur état avec les commandes Docker appropriées.


# Lancer le premier conteneur
docker run -it -d --net=none --name conteneur-alpha ubuntu /bin/bash
# Lancer le second conteneur
docker run -it -d --net=none --name conteneur-beta ubuntu /bin/bash
# Vérifier les conteneurs en cours d'exécution
docker ps
# Lister les réseaux disponibles
docker network ls
# Inspecter le réseau 'none' pour confirmer l'absence de configuration IP
docker network inspect none

Étape 2 : Création des fichiers de suivi d'espace de noms réseau

Obtenir les PID des conteneurs et créer des liens symboliques pour accéder à leurs espaces de noms réseau via /var/run/netns.


# Récupérer les PID des conteneurs
pid_alpha=$(docker inspect -f '{{.State.Pid}}' conteneur-alpha)
pid_beta=$(docker inspect -f '{{.State.Pid}}' conteneur-beta)
# Créer le répertoire pour les espaces de noms réseau
mkdir -p /var/run/netns
# Établir les liens symboliques
ln -s /proc/$pid_alpha/ns/net /var/run/netns/$pid_alpha
ln -s /proc/$pid_beta/ns/net /var/run/netns/$pid_beta

Étape 3 : Création des interfaces peer et configuraton du routage

Générer une paire d'interfaces veth, les assigner aux conteneurs respectifs, configurre les adresses IP et les routes directes.


# Créer une paire d'interfaces veth avec des noms personnalisés
ip link add iface-alpha type veth peer name iface-beta
# Assigner iface-alpha à l'espace de noms du premier conteneur
ip link set iface-alpha netns $pid_alpha
ip netns exec $pid_alpha ip addr add 192.168.10.1/32 dev iface-alpha
ip netns exec $pid_alpha ip link set iface-alpha up
ip netns exec $pid_alpha ip route add 192.168.10.2/32 dev iface-alpha
# Assigner iface-beta à l'espace de noms du second conteneur
ip link set iface-beta netns $pid_beta
ip netns exec $pid_beta ip addr add 192.168.10.2/32 dev iface-beta
ip netns exec $pid_beta ip link set iface-beta up
ip netns exec $pid_beta ip route add 192.168.10.1/32 dev iface-beta

Étape 4 : Vérification de la connectivité

Attacher aux conteneurs et tester la communication avec des commandes ping pour confirmer la liaison directe.


# Vérification depuis conteneur-alpha
docker attach conteneur-alpha
ip addr show | grep iface-alpha
ping 192.168.10.2
# Quitter et tester depuis conteneur-beta
docker attach conteneur-beta
ip addr show | grep iface-beta
ping 192.168.10.1

Étiquettes: Docker networking Linux containers veth-pairs

Publié le 26 juin à 01h26