Skip to main content

Ghid folosire OpenStack

Cloud-ul facultății folosește OpenStack pentru a oferi studenți cu capacitatea de a crea și configura mașini virtuale în clusterul facultății.

Conectați-vă la Horizon, front-end-ul web al OpenStack, la https://cloud.grid.pub.ro/ și autentificați-vă folosind numele de utilizator și parola LDAP.

Majoritatea imaginilor de mașini virtuale (discuri virtuale de bază) folosesc cloud-init pentru a configura automat mașina virtuală. Ca parte a primei rulări a mașinii virtuale, cloud-init va regenera cheile de gazdă SSH, va reseta parola implicită a utilizatorului la o valoare nevalidă, va dezactiva autentificarea ca utilizatorul root și va injecta cheile utilizatorului în mașina virtuală.

Conexiune la proxy

Vom folosi fep.grid.pub.ro ca proxy pentru conexiunile noastre la mașinile virtuale. Vă puteți conecta la fep folosind ssh user.name@fep.grid.pub.ro și introducând OTP-ul pentru contul dvs. când vi se solicită.

Vă recomandăm, de asemenea, să utilizați -o ServerAliveInterval=100 pentru a instrui clientul SSH trimite balize către server la fiecare 100 de secunde, astfel încât să nu fiți deconectat din cauza inactivității, și -X pentru redirecționarea X11; comanda finală arată astfel:

ssh user.name@fep8.grid.pub.ro -X -o ServerAliveInterval=100
important

Dacă utilizați un sistem Windows, vă recomandăm să creați o mașină virtuală Linux cu o interfață grafică sau o distribuție Linux WSL. De asemenea, puteți utiliza PuTTY drept client SSH.

Generarea perechilor de chei SSH

Deoarece parola utilizatorului mașinii virtuale este resetată la o valoare nevalidă prin cloud-init, nu vă veți putea conecta la mașina virtuală folosind autentificarea prin parolă. În schimb, trebuie să creați mai întâi o cheie SSH care va fi adăugată automat la cheia autorizată implicită a utilizatorului mașinii virtuale.

În primul rând, trebuie să generați o cheie SSH pe fep. Conectați-vă la fep și rulați comenzile de mai jos pentru a genera o cheie RSA de 4096 de biți și pentru a afișa cheia publică a acesteia. Permisiunile din directorul .ssh trebuie să fie 0700, altfel utilitarul ssh va refuza să folosească cheile din interior.

[user.name@fep8 ~]$ mkdir -p ~/.ssh
[user.name@fep8 ~]$ chmod 0700 ~/.ssh
[user.name@fep8 ~]$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_openstack -C "openstack-ssh-key"
[user.name@fep8 ~]$ cat ~/.ssh/id_openstack.pub

După ce aveți cheia publică, conectați-vă la Horizon și accesați tabul Proiect -> Compute -> Key pairs. După aceea, faceți clic pe butonul Importați cheia publică (evidențiat cu verde în imaginea de mai jos).

Cheia OpenStack - prezentare generală

În formular, introduceți un nume pentru cheie, selectați SSH Key pentru Key Type și inserați cheia publică în câmpul Public Key.

Cheie OpenStack - import

Crearea mașinii virtuale

Acum că perechea de chei SSH este disponibilă, putem începe să creăm mașini virtuale. Rețineți că puteți utiliza doar o cantitate limitată din totalul resurselor. Puteți vedea grafice ale cantității totale de resurse pe care le puteți utiliza și ale cantității resursele pe care le-ați folosit până acum prin interfața Horizon, în Project -> Compute -> Overview. Observăm în imaginea de mai jos că resursele sunt limitate la 4 nuclee CPU și 4 GB de RAM.

Resursa OpenStack - prezentare generală

Pentru a crea o nouă mașină virtuală, accesați Project -> Compute -> Instance și faceți clic pe Launch Instance. Aceasta va deschide un formular de configurare în care trebuie să setați parametrii pentru mașina virtuală.

Mașinile virtuale pot fi configurate numai folosind configurații predefinite, numite Flavor cu o cantitate prestabilită de resurse în fiecare categorie.

Când creați o mașină virtuală, trebuie să configurați flavor-ul mașinii virtuale. După ce apăsați Launch instance, pe ecran va fi afișată o fereastră de configurare precum cea din imaginea de mai jos.

important

Meniurile în care puteți alege o singură opțiune vor folosi automat opțiunea în mod implicit. Cu toate acestea, dacă sunt disponibile două sau mai multe opțiuni (de exemplu, două rețele sau două chei SSH), trebuie să alegeți una atunci când creați fiecare mașină virtuală. În caz contrar, nu va fi ales niciuna și este posibil să nu vă puteți conecta la mașina virtuală.

Asigurați-vă că parcurgeți fiecare dintre următoarele file.

În meniul Details, trebuie să completați un nume potrivit pentru mașina dvs. virtuală. În cazul nostru, mașina virtuală va fi numită scgc-lab00.

OpenStack VM Create - Details

Lansați instanța

După configurarea anterioară, puteți apăsa Launch Instance. După creare, ar trebui să vedeți următoarea ieșire:

Instanță VM OpenStack

În imaginea anterioară, puteți vedea informații despre mașina virtuală nou creată:

  • Instance Name: scgc-lab00 – numele mașinii virtuale care a fost configurat prin meniul Details
  • Image Name: SCGC Template – imaginea mașinii virtuale care a fost aleasă prin Source Menu
  • IP Address: 10.9.X.Y – adresa IP care este atribuită mașinii virtuale. Vom folosi această adresă IP pentru a ne conecta la mașina virtuală.
  • Key Pair: id_openstack – perechea de chei folosită pentru conexiune
  • Actions – butonul drop-down de unde puteți reseta, reconstrui sau șterge instanța curentă.
important

Mașina virtuală va rula pe unul dintre serverele din cluster. Dacă serverul nu avea imaginea înainte de a încerca să creați mașina virtuală, imaginea va trebui copiată și convertită pe server înainte de a fi utilizată. Aceasta înseamnă că uneori mașina virtuală va porni mai lent (până la 10 minute de timp de așteptare). În acest timp, Power state va fi afișată ca Spawning.

Conectați-vă la mașina virtuală

Imaginea de mai jos arată cum vă puteți conecta la mașina virtuală. Deoarece mașina virtuală rulează în OpenStack (adică în clusterul facultății) și adresa IP atribuită este o adresă privată, nu vă puteți conecta direct la mașina virtuală.

ConectațiConectați

Pentru a vă conecta la mașina virtuală, trebuie mai întâi să vă conectați la fep, care este un server care rulează în clusterul facultății (adică de aici puteți accesa rețeaua OpenStack). Apoi, conectați-vă la mașina virtuală. Fiți atenți la adresa IP care a fost atribuită mașinii virtuale și la numele perechii de chei pe care ați creat-o anterior și pe care l-ați furnizat lui OpenStack. Vă rugăm să rețineți că numele de utilizator pe care trebuie să-l utilizați atunci când vă conectați la mașina virtuală poate fi, de asemenea, diferit. SCGC Template folosește numele de utilizator student.

[user.name@fep8 ~]$ ssh -i ~/.ssh/id_openstack student@10.9.X.Y
The authenticity of host '10.9.X.Y (10.9.X.Y)' can't be established.
...
Are you sure you want to continue connecting (yes/no)? yes # you have to write yes and press Enter
...
student@scgc-lab00:~$

Observați că prima dată când doriți să vă conectați la o nouă mașină virtuală, agentul SSH vă va cere să confirmați conexiunea.

Probleme posibile

Faceți clic pentru a extinde

La conectarea prin SSH, pot apărea următoarele probleme:

  • mașina virtuală a pornit, dar demonul SSH nu a pornit încă. În acest caz, este posibil să vedeți un mesaj de conexiune refuzată. În acest caz, dacă serviciul ar trebui să înceapă în momentul pornirii, așteptați până când mașina virtuală termină procesul de pornire.
[user.name@fep8 ~]$ ssh -i ~/.ssh/id_openstack student@10.9.X.Y
ssh: connect to host 10.9.X.Y port 22: Connection refused

SSH și-a salvat amprenta cheii. Deoarece mașinile virtuale sunt inițializate prin cloud-init, cheile de gazdă SSH vor diferi între instanțe. Dacă acesta este cazul, trebuie să ștergeți cheia SSH din ~/.ssh/known_hosts înainte de a încerca să vă conectați din nou.

[user.name@fep8 ~]$ ssh -i ~/.ssh/id_openstack student@10.9.X.Y
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
...
  • mașina virtuală a refuzat cheia SSH (și probabil va solicita autentificarea cu parolă). Acest lucru se datorează probabil faptului că cheia SSH publică nu se află în fișierul ~/.ssh/authorized_keys al utilizatorului mașinii virtuale, deoarece a fost fie ștearsă, fie nu a fost injectată corect prin cloud-init. Pentru a verifica dacă cheia a fost injectată, faceți clic pe mașina virtuală din Project -> Compute -> Instances, apoi navigați la tab-ul Log. Dacă cheia a fost adăugată corect, ar trebui să vedeți un set de linii ca următoarea, spre sfârșitul jurnalului. Dacă cheia nu a fost adăugată sau a fost ștearsă după conectare și nu puteți accesa mașina virtuală, trebuie să ștergeți și să creați din nou mașina virtuală.
ci-info: +++++++++Chei autorizate de la /home/student/.ssh/authorized_keys pentru utilizatorul student++++++++++
ci-info: +---------+----------------------------------- --------------+---------+-------------------+
ci-info: | Tip cheie | Amprenta (md5) | Opțiuni | Comentariu |
ci-info: +---------+----------------------------------- --------------+---------+-------------------+
ci-info: | ssh-rsa | 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff | - | openstack-ssh-key |
ci-info: +---------+----------------------------------- --------------+---------+-------------------+

Conectați-vă la mașina virtuală cu redirecționare X

OS

Linux folosește o arhitectură client-server pentru sistemul de ferestre X. SSH vă permite să redirecționați informații despre aplicații grafice prin funcționalitatea de redirecționare X11.

Linux vine în mod implicit cu funcționalitatea client X11, deci dacă serverul SSH permite redirecționarea X11, puteți folosi opțiunea -X când vă conectați la sistemul de la distanță. Dacă trebuie să treceți prin mai multe sisteme atunci când vă conectați (de exemplu, vă conectați la fep înainte de a vă conecta la mașina virtuală OpenStack), trebuie să setați acest flag pentru fiecare conexiune.

user@workstation ~ $ ssh -X user.name@fep.grid.pub.ro
...
[user.name@fep8 ~]$ ssh -X -i ~/.ssh/id_openstack student@10.9.X.Y

Deoarece X11 va redirecționa întreaga interfață grafică, vă recomandăm să o utilizați rar, și chiar activarea compresiei prin folosirea opțiunii -C către clientul SSH. Dacă aveți nevoie doar să accesați informații despre un anumit port folosind o aplicație care este deja instalat pe sistemul local (de exemplu, o pagină web pe care o accesați folosind un browser), ar trebui să utilizați opțiunea -D pentru redirecționarea dinamică a portului (proxy), sau -L pentru redirecționarea portului obișnuit (unu-la-unu).

Testare

Pentru a testa că redirecționarea X11 funcționează, vom folosi câteva aplicații simple. Pe mașina virtuală, instalați x11-apps și rulați xeyes sau xclock. Dacă redirecționarea portului X11 funcționează corect, ar trebui să vedeți o fereastră nou deschisă pe sistemul dvs., cu o pereche de ochi care urmăresc indicatorul mouse-ului sau, respectiv, un ceas analogic.

student@scgc-lab00:~$ sudo apt install -y x11-apps
student@scgc-lab00:~$ xeyes
student@scgc-lab00:~$ xclock
important

Pentru a deschide conexiunile SSH, puteți deschide mai multe conexiuni SSH la mașina virtuală în OpenStack, sau utilizați o aplicație de multiplexare a terminalelor precum screen sau tmux (aceasta este opțiunea recomandată, deoarece vă permite, de asemenea, să nu vă pierdeți sesiunea chiar și atunci când pierdeți conexiunea la internet).

De exemplu, pentru tmux, scrieți tmux în terminalul mașinii virtuale. Veți vedea că apare o nouă interfață, cu un verde panglică în partea de jos. În mod implicit, tmux folosește combinația de taste <C-b> ca secvență de control (<C-b> este notația folosită de vim pentru "apasă ctrl și apasă b în același timp", și o vom folosi aici). Pentru a crea un al doilea terminal în modul de împărțire orizontală, apăsați <C-b> (aceasta este combinația de taste ctrl+b și apoi ghilimele "). După aceea, puteți naviga între panouri folosind <C-b><săgeți> - de exemplu, <C-b><săgeată-jos> pentru a merge la următorul panou în jos de la poziția curentă.

Configurare avansată a rețelei

Faceți clic pentru a extinde

Dacă nu vă puteți conecta la mașina virtuală din OpenStack, înseamnă că tot traficul OpenStack este trimis printr-un firewall. Pentru a vedea regulile permise în politica de securitate implicită (cea pe care o folosește mașina virtuală, cu excepția cazului în care ați creat o altă politică și ați setat-o în timpul procesului de creare a mașinii virtuale). Conectați-vă la interfața web, navigați la Project -> Network -> Security Groups și faceți clic pe Manage Rules pentru grupurile de securitate dorite.

Puteți vedea că în mod implicit, tot traficul generat de mașina virtuală este permis în afara (regulile care specifică direcția Egress, atât pentru IPv4, cât și pentru IPv6 permit toate protocoalele IP și intervalele de porturi și către orice IP (CIDR 0.0.0.0/0 pentru IPv4 și ::/0 pentru IPv6).

Cu toate acestea, pentru traficul de intrare este permis numai pe anumite porturi de la orice IP (vezi regulile pentru IPv4 și CIDR 0.0.0.0/0), în timp ce alte porturi sunt accesibile numai de la mașinile virtuale cu o interfață de rețea în grupul de securitate "implicit". (regulile cu default sub Remote Security Group).

În general, aceste reguli sunt menite să permită conexiunilor care provin de la orice IP (de exemplu, fep) să acceseze doar anumite servicii (de exemplu, SSH pe portul 22, HTTP(S) pe porturile 80, 443 și 8080, RDP pe portul 3389, VNC pe portul 5901), în timp ce mașinile virtuale pot comunica pe orice port.

Pentru a permite altor mașini virtuale să comunice cu mașina voastră virtuală, faceți clic pe Add Rule și selectați regula Other Protocol, direcția Ingress, -1 ca protocol IP, Tipul CIDR pentru Remote și "10.9.A.B/32" (adresa IP dorită a mașinii virtuale) pentru valoarea CIDR. De asemenea, puteți utiliza 0.0.0.0/0 pentru CIDR, dar acest lucru este mai puțin sigur, deoarece ar permite oricărui IP să se conecteze la porturile mașinii virtuale, astfel, toate măsurile de securitate vor trebui implementate pe mașina virtuală în sine.

OpenStack Security Group - CIDR

Configurarea IP-urilor public

Pentru configurarea IP-urilor publice, este necesar să folosim o rețea privată în care vor rula mașinile virtuale.

Configurarea rețelei private

Configurarea rețelelor private se face din meniul Project -> Network -> Networks. În cadrul acestui meniu vom face clic pe butonul Create Network. În urma acestei acțiuni, a apărut o fereastră de configurare unei noi rețele.

OpenStack Network Menu

Vom configura rețeaua privată cu numele private-network completând câmpul Network Name.

OpenStack Network Creation

Accesând tabul Subnet, vom putea completa câmpurile de configurare a rețelei. Recomandăm configuarea numelui rețelei folosind câmpul Subnet Name cu numele private-subnet. Adresa de rețea va fi configurată completând câmpul Network Address. Vom folosi adresa de rețea 172.10.0.0/24 și com configura adresa gateway cu valoarea 172.10.0.1 completând câmpul Gateway IP.

OpenStack Subnet Creation

note

Configurarea inițială a rețelei nu ne va permite să comunicăm în Internet. Pentru a face asta, este necesar să legăm rețeaua privată la un ruter care va conecta rețeaua privată la rețeaua externă Net224.

În acest moment putem sa ne conectăm la mașina virtuală și sa vedem dacă avem conectivitate la Internet. Nu vom avea acces la internet deocamtadă.

Crearea unui ruter

Putem vizualiza ruterele dintr-un proiect de OpenStack folosind meniul Projects -> Network -> Routers. Vom avea nevoie să generăm un ruter nou apăsând butonul Create router.

OpenStack Router Menu

Pentru configurarea unui ruter trebuie să setăm un nume în câmpul Router Name și vom selecta conectarea la rețeaua Net224.

OpenStack Router Creation

După ce am generat ruterul, trebuie să îl conectăm la rețeaua privată pe care am generat-o la subsecțiunea Configurarea rețelei private. Pentru adăugarea conexiunii la rețea, trebuie să facem clic pe numele ruterului și în noul meniu să accesăm tabul Interfaces și să apăsăm pe butonul Add Interface.

OpenStack Router Interfaces

În această fereastră vom selecta rețeaua private-network și vom adăuga adresa IP configurată anterior. În cazul din exemplu, vom configura gateway-ul 172.10.0.1.

OpenStack Router Add Port

Alocarea unui IP public

Odată ce am setat rețeaua privată pentru mașina virtuala și am adăugat ruterul pentru a avea conectivitate la Internet, trebuie sa alocăm un IP public mașinii virtuale. Pentru a face asta, vom folosi meniul Project -> Network -> Floating IPs.

OpenStack Floating IP Menu

Vom aloca un IP public apăsând pe butonul Allocate Floating IP. Pentru a aloca un IP public vom folosi rețeaua Net224.

OpenStack Floating IP Creation

Observăm că a apărut un IP public în lista meniului Floating IPs

OpenStack Floating IP Setup

Pentru asocierea unui IP public cu o masină publică, vom accesa meniul Project -> Compute -> Instance. În dreptul masinii virtuale la care vrem să asociem o adresă IP publică vom apăsa pe meniul drop-down din dreptul mașinii virtuale și vom selecta opțiunea Associate Floating IP.

În noua fereastră apărută vom selecta IP-ul public alocat mai devreme. Putem vedea că în acest moment în dreptul mașinii virtuale apar două IP-uri; IP-ul public asociat cu mașina virtuală si adresa IP privată pe care o va vedea mașina virtuală.

OpenStack Public IP Validation

Observăm că acum apar două adrese pentru inferfața de rețea a mașinii virtuale.

OpenStack Public IP Validation

Ștergeți mașina virtuală

După fiecare laborator și ori de câte ori nu mai aveți nevoie de o mașină virtuală, vă rugăm să o ștergeți.Din interfața web, accesați Project -> Compute -> Instance și ștergeți mașina virtuală. Puteți fie să selectați toate mașinile virtuale pe care doriți să le ștergeți din caseta de selectare din stânga, apoi faceți clic pe Delete Instances sau selectați Delete Instance din meniul drop-down din dreapta.

De asemenea, puteți să ștergeți regula grupului de securitate pe care ați creat-o anterior dacă nu trebuie să permiteți comunicarea cu mașinile din afara proiectului.