Docker networking - 7 ways
Docker networking - 7 ways
Bridge
- Sous reseau naté sur le réseau normal (hôte) - 172.17.0.0/16 par défaultUser defined bridge
: Réseaux bridges isolés les uns des autres
docker network create mybridge network
The host
- Même réseau que le host, il partage son IP et tout le reste (ports...)macvlan (bridge mode)
- Connecté directement à notre réseau physique, un peu comme une VM - Tu peux lui attribuer une adresse de ton réseau local Donner son Subnet local et Gateway (routeur), et son parent (l'interface réseau de l'hôte) pour la mapper dessus.
attention
Cela donne une MAC address au container, et une interface ne peux pas avoir plusieurs mac sur une interface. Il faut faut accepter le mode promiscuité.
ip link set eth0 promisc on
Activer le mode dans l'hyperviseur si disponible.
danger
- PAS de DHCP pour machines MACVLAN
- SPECIFIER UNE IP ADDRESS FIXE POUR LE CONTAINER, AFIN EVITER CONFLIT (VOIR DOC POUR LES OPTIONS AU DEPLOYMENT)
docker network create -d macvlan \
--subnet=172.16.86.0/24 \
--gateway=172.16.86.1 \
-o parent=eth0 \
pub_net
macvlan (802.1q mode)
- Connecté directement a notre réseau physique, un peu comme une VM - tu peux lui attribuer une adresse de ton réseau local Réseau sous forme de vlan - eth0.20 eth0.30 etc.. Donner son Subnet local et Gateway (box) et son parent --> l'interface réseau de l'hôte avec un sous interface en eth0.20 par exemple (pour un VLAN 20) pour la mapper dessus Ce réseau crée a l'hôte des sous interfaces
docker network create -d macvlan \
--subnet 192.168.20.0/24
--gateway 192.168.20.1 \
-o parent=eth0.20 \
macvlan20
Cela rajoute la sous interface et peut être avec un réseau différent de l'hôte.
IPvlan (L2)
(et (L3) existe aussi) Les container vont pouvoir avoir leur propre IP sur notre réseau local mais cette fois en partageant la MAC address de l'hôte
docker network create -d ipvlan \
--subnet 192.168.1.0/24
--gateway 192.168.1.1 \
-o parent=eth0 \
new_ipvlan_network
Puis run un container :
docker run -tid --rm --network new_ipvlan_network \
--ip 192.168.1.4/24 \
-name container01 busybox
IPvlan (L3)
Le container considère l'host (son ip) comme étant le routeur, donc l'ip du host est la gateway du réseau des containers. On peux par exemple faire des routes statiques sur l'host, afin de faire communiquer nos sous réseau du L3.
docker network create -d ipvlan \
--subnet 192.168.94.0/24 #le réseau que nous créons
-o parent=eth0 -o ipvlan_mode=l3 \ #pas de gateway car le parent est la gateway
--subnet 192.168.95.0/24 \ #on fait a si on veux créer plusieur réseau sur la même interface
new_ipvlan_network
Puis pour l'utiliser :
docker run -tid --rm --network new_ipvlan_network \
--ip 192.168.94.8/24 \
-name container01 busybox
docker run -tid --rm --network new_ipvlan_network \
--ip 192.168.95.9/24 \
-name container02 busybox
Vérifier les configs :
docker inspect new_ipvlan_network
Les containers n'ont pas internet, pas de routes mais peut pinger les autres container et par le nom aussi.
Donc ajouter une vrai route sur le réseau si on veux faire communiquer vers à l'extérieur en gros ton host deviens un routeur entre tes containers. N:B : no broadcast traffic
The NONE Network
The null network: Il n'y a que la localhost