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