GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come configurare gli spazi dei nomi di rete nei contenitori Docker

Questo post spiega come Docker utilizza lo spazio dei nomi di rete per isolare le risorse.

La figura seguente mostra la configurazione del lab per aiutarti a comprendere visivamente i passaggi:

1. Crea due spazi dei nomi di rete:ns1 e ns2 .

– Aggiungi due nuovi spazi dei nomi di rete:

# ip netns add ns1
# ip netns add ns2

I comandi precedenti creano spazio di rete passando un flag alla chiamata di sistema clone(), CLONE_NEWNT.

– Controlla le nuove ns create:

# ip netns list
ns2
ns1

Quando lo strumento IP crea uno spazio dei nomi di rete, creerà un montaggio di collegamento per esso in /var/run/netns/ come segue:

# ls /var/run/netns/
ns1 ns2

– Elenca le interfacce visibili all'interno dei nuovi namespace creati. Puoi vedere dopo la prima creazione, il dispositivo di loopback lo è inattivo e la tabella delle rotte è vuota:

# 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. Crea mydocker0 bridge:

– Crea il bridge Linux mydocker0 nello spazio dei nomi di rete predefinito:

# 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. Crea VETH per connettere gli spazi dei nomi di rete sullo spazio dei nomi ns1:

– Configura una coppia di dispositivi Ethernet virtuali:veth1&veth1p per connettere lo spazio dei nomi predefinito e lo spazio dei nomi 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

– Assegnando veth1 a mydocker0 e veth1 allo spazio dei nomi 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

– Cambia il nome di veth1p in 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

– Assegna l'indirizzo IP a eth0 nello spazio dei nomi 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. Segui gli stessi passaggi sullo spazio dei nomi 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. Testare la connettività di rete tra due spazi dei nomi:

# 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. Come aggiornare automaticamente i contenitori Docker in esecuzione

  2. Come esportare e importare contenitori Docker

  3. Come usare Docker Compose

  4. Come collegare i contenitori Docker

  5. Come passare le variabili d'ambiente ai container Docker

Come eseguire i contenitori Docker

Come rimuovere i contenitori Docker

Come fermare i container Docker

Come ottenere l'indirizzo IP del contenitore Docker

Come rinominare o rinominare i contenitori Docker

Come gestire i container Docker