GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Mengonfigurasi Ruang Nama Jaringan di Wadah Docker

Posting ini memberi tahu bagaimana Docker menggunakan namespace jaringan untuk mengisolasi sumber daya.

Gambar berikut adalah pengaturan lab untuk membantu Anda memahami langkah-langkah secara visual:

1. Buat dua ruang nama jaringan:ns1 dan ns2 .

– Tambahkan dua ruang nama naetwork baru:

# ip netns add ns1
# ip netns add ns2

Perintah di atas membuat ruang jaringan dengan meneruskan flag ke panggilan sistem clone(), CLONE_NEWNT.

– Periksa ns yang baru dibuat:

# ip netns list
ns2
ns1

Saat alat IP membuat namespace jaringan, itu akan membuat pengikatan mount untuknya di bawah /var/run/netns/ sebagai berikut:

# ls /var/run/netns/
ns1 ns2

– Buat daftar antarmuka yang terlihat di dalam ruang nama yang baru dibuat. Anda dapat melihat setelah pertama kali dibuat, perangkat loopback lo down dan tabel rute kosong:

# 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. Buat jembatan mydocker0:

– Buat jembatan mydocker0 Linux di bawah namespace jaringan default:

# 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. Buat VETH untuk menghubungkan ruang nama jaringan di ruang nama ns1:

– Siapkan sepasang perangkat Ethernet virtual- veth1&veth1p untuk menghubungkan namespace default dan namespace 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

– Menetapkan veth1 ke mydocker0 dan veth1 ke namespace 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

– Ubah nama veth1p menjadi 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

– Tetapkan alamat IP ke eth0 di namespace 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. Ikuti langkah yang sama pada namespace 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. Uji konektivitas jaringan antara dua ruang nama:

# 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. Cara Mendaftar Kontainer Docker

  2. Cara mengkonfigurasi buruh pelabuhan untuk menggunakan proxy

  3. Cara menghapus semua wadah Docker

  1. Cara Menggunakan Tulis Docker

  2. Bagaimana Menghubungkan Kontainer Docker

  3. Bagaimana Melewati Variabel Lingkungan ke Docker Containers

  1. Bagaimana Mengelola Kontainer Docker? Praktik terbaik

  2. Cara Memperbarui Wadah Docker yang Berjalan Secara Otomatis

  3. Cara Mengekspor dan Mengimpor Kontainer Docker