GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment configurer les espaces de noms réseau dans les conteneurs Docker

Cet article explique comment Docker utilise l'espace de noms réseau pour isoler les ressources.

La figure suivante représente la configuration de l'atelier pour vous aider à comprendre visuellement les étapes :

1. Créez deux espaces de noms réseau :ns1 et ns2 .

– Ajoutez deux nouveaux espaces de noms naetwork :

# ip netns add ns1
# ip netns add ns2

Les commandes ci-dessus créent un espace réseau en passant un indicateur à l'appel système clone(), CLONE_NEWNT.

– Vérifiez les nouveaux ns créés :

# ip netns list
ns2
ns1

Lorsque l'outil IP crée un espace de noms réseau, il crée un montage lié pour celui-ci sous /var/run/netns/ comme suit :

# ls /var/run/netns/
ns1 ns2

– Lister les interfaces visibles à l'intérieur des nouveaux espaces de noms créés. Vous pouvez voir après la première création, le périphérique de bouclage lo est en panne et la table de routage est vide :

# ip netns exec ns1 ip a
1: lo: [LOOPBACK] mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# ip netns exec ns2 ip a
1: lo: [LOOPBACK] mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# ip netns exec ns2 ip route
# 

2. Créez le pont mydocker0 :

– Créez un pont Linux mydocker0 sous l'espace de noms réseau par défaut :

# brctl addbr mydocker0
# brctl show
bridge name bridge id STP enabled interfaces
...
mydocker0 8000.000000000000 no
...
# ip a add 172.16.1.254/16 dev mydocker0
# ip link set dev mydocker0 up
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.182.64.1 0.0.0.0 UG 100 0 0 enp0s3
10.182.64.0 0.0.0.0 255.255.248.0 U 100 0 0 enp0s3
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 mydocker0 
...

3. Créez VETH pour connecter les espaces de noms réseau sur l'espace de noms ns1 :

– Configurez une paire de périphériques Ethernet virtuels - veth1 et veth1p pour connecter l'espace de noms par défaut et l'espace de noms ns1 :

# ip link add veth1 type veth peer name veth1p
# ip -d link show |grep veth1
6149: veth1p@veth1: [BROADCAST,MULTICAST,M-DOWN] mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
6150: veth1@veth1p: [BROADCAST,MULTICAST,M-DOWN] mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

– Associer veth1 à mydocker0 et veth1 à l'espace de noms ns1 :

# brctl addif mydocker0 veth1
# ip link set veth1 up
# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.3a6bde86d9e8 no br0
veth890eaea
mydocker0 8000.6efa891a7162 no veth1 >>>>>>>>
...
# ip link set veth1p netns ns1
# ip netns exec ns1 ip a
1: lo: [LOOPBACK] mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6149: veth1p@if6150:  mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 2a:3b:ea:e3:63:dd brd ff:ff:ff:ff:ff:ff link-netnsid 0

– Changez le nom de veth1p en eth0 :

# ip netns exec ns1 ip link set veth1p name eth0
# ip netns exec ns1 ip a
1: lo: [LOOPBACK] mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6149: eth0@if6150:  mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 2a:3b:ea:e3:63:dd brd ff:ff:ff:ff:ff:ff link-netnsid 0

– Attribuez l'adresse IP à eth0 dans l'espace de noms ns1 :

# ip netns exec ns1 ip link set eth0 up
# ip netns exec ns1 ip a add 172.16.1.1/16 dev eth0
# ip netns exec ns1 ip route add default via 172.16.1.254
# ip netns exec ns1 ip route
default via 172.16.1.254 dev eth0
172.16.0.0/16 dev eth0 proto kernel scope link src 172.16.1.1

4. Suivez les mêmes étapes sur l'espace de noms ns2 :

# ip link add veth2 type veth peer name veth2p
# brctl addif mydocker0 veth2
# ip link set veth2 up
# ip link set veth2p netns ns2
# ip netns exec ns2 ip link set veth2p name eth0
# ip netns exec ns2 ip link set eth0 up
# ip netns exec ns2 ip addr add 172.16.1.2/16 dev eth0
# ip netns exec ns2 ip route add default via 172.16.1.254

5. Testez la connectivité réseau entre deux espaces de noms :

# ip netns exec ns1 ping -c 2 172.16.1.2
PING 172.16.1.2 (172.16.1.2) 56(84) bytes of data.
64 bytes from 172.16.1.2: icmp_seq=1 ttl=64 time=0.457 ms
64 bytes from 172.16.1.2: icmp_seq=2 ttl=64 time=0.049 ms
--- 172.16.1.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1057ms
rtt min/avg/max/mdev = 0.049/0.253/0.457/0.204 ms
# ip netns exec ns2 ping -c 2 172.16.1.1
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_seq=1 ttl=64 time=0.058 ms
64 bytes from 172.16.1.1: icmp_seq=2 ttl=64 time=0.045 ms

--- 172.16.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1055ms
rtt min/avg/max/mdev = 0.045/0.051/0.058/0.009 ms


Docker
  1. Comment mettre à jour automatiquement les conteneurs Docker en cours d'exécution

  2. Comment exporter et importer des conteneurs Docker

  3. Comment utiliser Docker Compose

  4. Comment connecter des conteneurs Docker

  5. Comment répertorier les conteneurs Docker

Comment exécuter des conteneurs Docker

Comment supprimer les conteneurs Docker

Comment arrêter les conteneurs Docker

Comment obtenir l'adresse IP du conteneur Docker

Comment nommer ou renommer les conteneurs Docker

Comment gérer les conteneurs Docker