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).
Î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
.
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.
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.
- Details Menu
- Source Menu
- Flavor Menu
- Network Menu
- Key Pair
Î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
.
În meniul Source
, trebuie să selectați varianta de imagine care va fi baza mașinii virtuale. În secțiunea Available
, veți vedea mai multe imagini din care o puteți alege pe cea potrivită. Alege SCGC Template
, făcând clic pe săgeata sus din dreapta.
În terminologia OpenStack, un flavor este setul predefinit de specificații care va descrie resursele care vor fi alocate la crearea mașinii virtuale. Un flavor specifică dimensiunea totală a discului care poate fi utilizat de mașina virtuală, numărul de procesoare virtuale și cantitatea de RAM care va fi alocată în timpul creării. Pentru această sarcină, alegeți varianta m1.medium
care are 1
CPU virtual, 1.5GB
RAM și 16GB
spațiu pe disc.
Pentru a vă conecta la mașina virtuală, trebuie să selectați o rețea. Dacă nu este specificat altfel, alegeți întotdeauna vlan9
. Dacă rețeaua vlan9
nu este prezentă, nu vă veți putea conecta la mașina virtuală prin SSH.
Pentru a vă putea conecta la mașina virtuală, trebuie să selectați o pereche de chei.
important
Cheia trebuie furnizată în acest pas. Nu poate fi adăugată mai târziu, deoarece cheia este injectată în mașina virtuală în momentul creării.
Lansați instanța
După configurarea anterioară, puteți apăsa Launch Instance
. După creare, ar trebui să vedeți următoarea ieșire:
Î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 meniulDetails
- Image Name:
SCGC Template
– imaginea mașinii virtuale care a fost aleasă prinSource 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ă.
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 princloud-init
. Pentru a verifica dacă cheia a fost injectată, faceți clic pe mașina virtuală dinProject
->Compute
->Instances
, apoi navigați la tab-ulLog
. 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
- MacOS
- Windows
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).
Clientul MacOS SSH are funcționalitate de redirecționare X11, dar este posibil să nu aibă un server X11 instalat. Mai întâi trebuie să instalați un server X11 înainte de a putea redirecționa interfața grafică. Vă rugăm să urmați aceste instrucțiuni. Ulterior, puteți utiliza aceleași comenzi descrise pentru clientul Linux.
Dacă utilizați o mașină virtuală Linux cu o interfață grafică, puteți utiliza pașii descriși pentru clientul Linux (mai sus). În caz contrar, dacă utilizați WSL, încercați pașii descriși [aici](https://techcommunity.microsoft.com/t5/windows-dev-appconsult/running-wsl-gui-apps-on-windows-10/ba -p/1493242) mai întâi; apoi, utilizați pașii descriși pentru clientul Linux.
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.
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.
Vom configura rețeaua privată cu numele private-network
completând câmpul Network Name
.
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
.
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
.
Pentru configurarea unui ruter trebuie să setăm un nume în câmpul Router Name
și vom selecta conectarea la rețeaua Net224
.
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
.
Î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
.
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
.
Vom aloca un IP public apăsând pe butonul Allocate Floating IP
. Pentru a aloca un IP public vom folosi rețeaua Net224
.
Observăm că a apărut un IP public în lista meniului Floating IPs
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ă.
Observăm că acum apar două adrese pentru inferfața de rețea a mașinii virtuale.
Ș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.