Differences

This shows you the differences between two versions of the page.

Link to this comparison view

rl:labs:11:contents:01 [2013/12/12 08:24]
razvan.deaconescu [01. [15p] Conectare logică a două containere]
rl:labs:11:contents:01 [2024/01/08 12:29] (current)
vlad_iulius.nastase [01. [0p] Definere proiect]
Line 1: Line 1:
-==== 01. [15pConectare logică a două containere ​====+==== 01. [0pDefinere proiect ​====
  
-Până acum în laboratorul ​de Rețele Locale am simulat o topologie de rețea folosind containere LXC (Linux Containers)Pentru a vedea ce containere LXC sunt disponibile într-un sistem folosim pe stația ''​host''​ comanda ''​lxc-list'':<​code bash> +Din stanga sus, de lângă logo-ul Google Cloud se poate fie selecta proiectul ​de lucru, fie crea un nou proiect
-root@host:​~#​ lxc-list +
-RUNNING+
  
-FROZEN+Dacă cream un nou proiect (apăsăm pe butonul aferent), pagina pentru proiect nou va fi deschisă pe ecran de unde putem seta numele proiectului și organizația la care este asociat. ​
  
-STOPPED +Pentru acest laborator, ne vom folosi de proiectul **upb-retele-locale-2024** prin contul oferit de catre asistent.
-  blue (auto) +
-  green (auto) +
-  red (auto) +
-</​code>​+
  
-Pe stația ''​host''​ sunt disponibile,​ pe moment, două interfețe: interfața de loopback (''​lo''​) și intefața de rețea a stației (''​eth0''​). Putem observa acest lucru folosind comanda<code bash+<note tip
-root@host:​~#​ ip a s +Dacă nu vă apare proiectul ​în listăîncercați să îl utați folosind ​numele ​proiectului ​(''​upb-retele-locale-2024''​).
-1: lo: <​LOOPBACK,​UP,​LOWER_UP>​ mtu 16436 qdisc noqueue state UNKNOWN  +
-[...] +
-2: eth0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000 +
-[...] +
-</​code>​ +
- +
-Observăm că sunt 3 containere ​în sistem (''​blue''​''​green''​ ș''​red''​),​ toate în starea ''​STOPPED''​ (oprite). Pentru a porni container-ul ''​blue''​ vom folosi comanda ''​lxc-start -d -n blue'':<​code bash> +
-root@host:​~#​ lxc-start -n blue -d +
-root@host:​~#​ lxc-list +
-RUNNING +
-  blue (auto) +
- +
-FROZEN +
- +
-STOPPED +
-  green (auto) +
-  red (auto) +
-   +
-root@host:​~#​ ip a s +
-1: lo: <​LOOPBACK,​UP,​LOWER_UP>​ mtu 16436 qdisc noqueue state UNKNOWN  +
-[...] +
-2: eth0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000 +
-[...] +
-20: veth-blue: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000 +
-</​code>​ +
-Observăcă starea container-ului ''​blue''​ este ''​RUNNING''​. Parametrul ''​-d''​ este folosit pentru a porni containerul în mod ''​daemon'',​ iar ''​-n''​ specifică ​numele ​containerului ce se dorește a fi pornit. De asemenea, observăm apariția interfeței virtuale ''​veth-blue'',​ interfață ce face legătura stației ''​host''​ cu stația ''​blue'' ​(mai precis cu interfața ''​eth0''​ internă stației ''​blue''​). +
- +
-<note important>​ +
-Trebuie să folosim parametrul ​''​-d''​ al comenzii ''​lxc-start'' ​pentru a porni containerul ca un daemon (în background). Altfel, terminalul curent va fi blocat de comenzile rulate în container și nu vom putea ieși din acesta folosind combinația de taste ''​Ctrl+a''​ și apoi ''​q''​.+
 </​note>​ </​note>​
- 
-Porniți container-ul ''​green''​ și verificați că este în starea ''​RUNNING''<​code bash> 
-root@host:​~#​ lxc-start -n green -d 
-root@host:​~#​ lxc-list 
-RUNNING 
-  blue (auto) 
-  green (auto) 
- 
-FROZEN 
- 
-STOPPED 
-  red (auto) 
- 
-root@host:​~#​ ip a s 
-1: lo: <​LOOPBACK,​UP,​LOWER_UP>​ mtu 16436 qdisc noqueue state UNKNOWN ​ 
-[...] 
-2: eth0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000 
-[...] 
-20: veth-blue: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000 
-[...] 
-23: veth-green: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000 
-</​code>​ 
-Observăm că acum sunt pornite containerele ''​blue''​ și ''​green''​. Observăm că pe stația ''​host''​ există două interfețe virtuale: ''​veth-blue''​ (legătura cu stația ''​blue''​) si ''​veth-green''​ (legătura cu stația ''​green''​). 
- 
-Dorim să conectăm cele 2 containere (''​blue''​ și ''​green''​) în același switch virtual. Pe Linux putem simula un switch folosind noțiunea de //bridge//. Pentru crearea și configurarea unui bridge vom folosi comanda ''​brctl''​. 
- 
-Pe stația ''​host''​ vom crea un bridge (denumit ''​br0''​) executând comanda:<​code>​ 
-root@host:​~#​ brctl addbr br0 
-</​code>​ 
- 
-Pentru a verifica că bridge-ul a fost creat folosim comanda ''​brctl show'':<​code>​ 
-root@host:​~#​ brctl show 
-bridge name     ​bridge id               STP enabled ​    ​interfaces 
-br0             ​8000.000000000000 ​      no 
-</​code>​ 
- 
-Pentru a permite conectivitatea între containere și între containere și stația ''​host''​ va trebui să legăm interfețele virtuale aferente în bridge-ul proaspăt creat. Altfel spus, dorim să conectăm la bridge-ul ''​br0''​ interfețele aferente de pe stația ''​host''​ ale lui ''​blue''​ (adică interfața ''​veth-blue''​) și lui ''​green''​ (interfața ''​veth-green''​). Vom folosi comanda ''​brctl addif'':<​code bash> 
-root@host:​~#​ brctl addif br0 veth-blue 
-root@host:​~#​ brctl show 
-bridge name     ​bridge id               STP enabled ​    ​interfaces 
-br0             ​8000.7acc4f8a0686 ​      ​no ​             veth-blue 
-root@host:​~#​ brctl addif br0 veth-green 
-root@host:​~#​ brctl show 
-bridge name     ​bridge id               STP enabled ​    ​interfaces 
-br0             ​8000.3a89dafa5a72 ​      ​no ​             veth-blue 
-                                                        veth-green 
-</​code>​ 
-Pentru a valida operațiunea de adăugare folosim comanda ''​brctl show''​. 
- 
-**Exercițiu**:​ Pentru a testa conectivitatea între containere, trebuie configurate adrese IP pe interfețele interne (''​eth0''​) alte containerelor. Configurați pe interfața ''​eth0''​ a stației ''​blue''​ adresa IP 192.168.1.4/​24 și pe interfața ''​eth0''​ a stației ''​green''​ adresa IP 192.168.1.3/​24. Pentru reamintire, puteți parcurge [[:​rl:​labs:​07:​contents:​01]]. 
- 
-<​solution -hidden> 
-<code bash> 
-root@blue:​~#​ ip a a 192.168.1.4/​24 dev eth0 
-root@blue:​~#​ ip l s dev eth0 up 
-root@blue:​~#​ ip a s dev eth0 
-19: eth0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000 
-    link/ether 00:​16:​3e:​32:​0f:​ae brd ff:​ff:​ff:​ff:​ff:​ff 
-    inet 192.168.1.4/​24 scope global eth0 
-    inet6 fe80::​216:​3eff:​fe32:​fae/​64 scope link  
-       ​valid_lft forever preferred_lft forever 
- 
-root@green:​~#​ ip a a 192.168.1.3/​24 dev eth0 
-root@green:​~#​ ip l s dev eth0 up 
-root@green:​~#​ ip a s dev eth0 
-22: eth0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000 
-    link/ether 00:​16:​3e:​d1:​b2:​95 brd ff:​ff:​ff:​ff:​ff:​ff 
-    inet 192.168.1.3/​24 scope global eth0 
-    inet6 fe80::​216:​3eff:​fed1:​b295/​64 scope link  
-       ​valid_lft forever preferred_lft forever 
-</​code>​ 
-</​solution>​ 
- 
-Pentru testarea conectivității între containere folosim comanda ''​ping''​ dintr-un container sau altul:<​code bash> 
-root@blue:​~#​ ping -c 2 192.168.1.3 
-PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. 
-From 192.168.1.4 icmp_seq=1 Destination Host Unreachable 
-From 192.168.1.4 icmp_seq=2 Destination Host Unreachable 
- 
---- 192.168.1.3 ping statistics --- 
-2 packets transmitted,​ 0 received, +2 errors, 100% packet loss, time 999ms 
-pipe 2 
-root@blue:​~#​ ip r s 
-192.168.1.0/​24 dev eth0  proto kernel ​ scope link  src 192.168.1.4 ​ 
- 
-root@green:​~#​ ping -c 2 192.168.1.4 
-PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data. 
-From 192.168.1.3 icmp_seq=1 Destination Host Unreachable 
-From 192.168.1.3 icmp_seq=2 Destination Host Unreachable 
- 
---- 192.168.1.4 ping statistics --- 
-2 packets transmitted,​ 0 received, +2 errors, 100% packet loss, time 1007ms 
-pipe 2 
-root@green:​~#​ ip r s    
-192.168.1.0/​24 dev eth0  proto kernel ​ scope link  src 192.168.1.3 ​ 
-</​code>​ 
- 
-Observăm că nu avem conectivitate deși interfețele sunt active și adresele IP fac parte din aceeași rețea și tabela de rutare conține intrarea corespunzătoare. Problema poate fi de la bridge. Pe stația ''​host''​ verificăm legătura de nivel 2 a bridge-ului ''​br0'':<​code bash> 
-root@host:​~#​ ip link show dev br0 
-20: br0: <​BROADCAST,​MULTICAST>​ mtu 1500 qdisc noqueue state DOWN 
-    link/ether 3a:​89:​da:​fa:​5a:​72 brd ff:​ff:​ff:​ff:​ff:​ff 
-</​code>​ 
-Observăm că bridge-ul este inactiv (''​state DOWN''​). Activăm bridge-ul:<​code bash> 
-root@host:​~#​ ip link set dev br0 up 
-root@host:​~#​ ip link show dev br0 
-20: br0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc noqueue state UP 
-    link/ether 3a:​89:​da:​fa:​5a:​72 brd ff:​ff:​ff:​ff:​ff:​ff 
-</​code>​ 
- 
-Testăm din nou conectivitatea între containerele ''​green''​ și ''​blue'':<​code bash> 
-root@green:​~#​ ping -c 2 192.168.1.4 
-PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data. 
-64 bytes from 192.168.1.4:​ icmp_req=1 ttl=64 time=0.070 ms 
-64 bytes from 192.168.1.4:​ icmp_req=2 ttl=64 time=0.045 ms 
- 
---- 192.168.1.4 ping statistics --- 
-2 packets transmitted,​ 2 received, 0% packet loss, time 999ms 
-rtt min/​avg/​max/​mdev = 0.045/​0.057/​0.070/​0.014 ms 
- 
-root@blue:​~#​ ping -c 2 192.168.1.3 
-PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. 
-64 bytes from 192.168.1.3:​ icmp_req=1 ttl=64 time=0.036 ms 
-64 bytes from 192.168.1.3:​ icmp_req=2 ttl=64 time=0.029 ms 
- 
---- 192.168.1.3 ping statistics --- 
-2 packets transmitted,​ 2 received, 0% packet loss, time 999ms 
-rtt min/​avg/​max/​mdev = 0.029/​0.032/​0.036/​0.006 ms 
-</​code>​ 
- 
-Acum există conectivitate între cele două containere. 
rl/labs/11/contents/01.1386829488.txt.gz · Last modified: 2013/12/12 08:24 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0