Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Zdravo, moje ime je Kostya Kramlikh, ja sam vodeći programer odjela Virtual Private Cloud u Yandex.Cloud. Ja sam virtuelni umrežavač i kao što možete pretpostaviti, u ovom članku ću govoriti o virtuelnom privatnom oblaku (VPC) uopšte i virtuelnoj mreži posebno. Također ćete saznati zašto mi, programeri usluge, cijenimo povratne informacije naših korisnika. Ali prvo stvari.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Šta je VPC?

Danas postoji niz opcija za implementaciju usluga. Siguran sam da neko još uvijek drži server ispod administratorskog stola, mada se nadam da će takvih priča biti manje.

Sada servisi pokušavaju da odu u javne oblake, i tu se sudaraju sa VPC-ovima. VPC je dio javnog oblaka koji povezuje korisnike, infrastrukturu, platformu i druge kapacitete zajedno, gdje god da se nalaze, u našem oblaku ili izvan njega. Istovremeno, VPC vam omogućava da ove kapacitete ne izlažete nepotrebno Internetu, oni ostaju unutar vaše izolovane mreže.

Kako virtuelna mreža izgleda izvana?

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Pod VPC-om prvenstveno mislimo na preklapajuću mrežu i mrežne usluge, kao što su VPNaaS, NATaas, LBaas, itd. I sve to radi na vrhu mrežne infrastrukture otporne na greške, koja je već bila odličan članak ovdje, na Habreu.

Pogledajmo pobliže virtuelnu mrežu i njen uređaj.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Razmotrite dvije zone dostupnosti. Pružamo virtuelnu mrežu - ono što smo nazvali VPC. Zapravo, on definira prostor jedinstvenosti vaših "sivih" adresa. Unutar svake virtuelne mreže imate potpunu kontrolu nad prostorom adresa koje možete dodijeliti računskim resursima.

Mreža je globalna. Istovremeno se projektuje na svaku od zona dostupnosti u obliku entiteta koji se zove podmreža. Za svaku podmrežu dodjeljujete CIDR veličine 16 ili manje. U svakoj zoni dostupnosti može biti više od jednog takvog entiteta, a između njih uvijek postoji transparentno rutiranje. To znači da svi vaši resursi unutar istog VPC-a mogu "razgovarati" jedni s drugima, čak i ako se nalaze u različitim zonama dostupnosti. „Komunicirajte“ bez pristupa internetu, preko naših internih kanala, „misleći“ da su unutar iste privatne mreže.

Gornji dijagram prikazuje tipičnu situaciju: dva VPC-a koji se ukrštaju negdje u adresama. Oboje može biti tvoje. Na primjer, jedan za razvoj, drugi za testiranje. Jednostavno mogu postojati različiti korisnici - u ovom slučaju to nije važno. I jedna virtuelna mašina je priključena na svaki VPC.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Hajde da pogoršamo šemu. Možete napraviti tako da jedna virtuelna mašina bude zaglavljena u nekoliko podmreža odjednom. I to ne samo tako, već u različitim virtuelnim mrežama.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

U isto vrijeme, ako trebate izložiti strojeve Internetu, to se može učiniti putem API-ja ili korisničkog sučelja. Da biste to uradili, potrebno je da konfigurišete NAT prevod vaše „sive“, interne adrese, u „belu“ - javnu. Ne možete odabrati "bijelu" adresu, ona se dodjeljuje nasumično iz našeg skupa adresa. Čim prestanete koristiti eksternu IP adresu, ona se vraća u bazen. Plaćate samo vrijeme korištenja "bijele" adrese.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Također je moguće dati mašini pristup Internetu koristeći NAT instancu. Možete usmjeriti promet do instance kroz statičku tablicu usmjeravanja. Takav slučaj smo obezbijedili, jer je korisnicima ponekad potreban, a znamo za to. Prema tome, naš katalog slika sadrži posebno konfiguriranu NAT sliku.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Ali čak i kada postoji spremna NAT slika, podešavanje može biti teško. Shvatili smo da za neke korisnike ovo nije najpogodnija opcija, pa smo na kraju omogućili NAT za željenu podmrežu jednim klikom. Ova funkcija je još uvijek u zatvorenom pristupu za pregled, gdje se testira uz pomoć članova zajednice.

Kako je virtuelna mreža uređena iznutra

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Kako korisnik komunicira sa virtuelnom mrežom? Web gleda prema van sa svojim API-jem. Korisnik dolazi do API-ja i radi sa ciljnim stanjem. Preko API-ja korisnik vidi kako sve treba da bude uređeno i konfigurisano, dok vidi status, koliko se stvarno stanje razlikuje od željenog. Ovo je slika korisnika. Šta se dešava unutra?

Zapisujemo željeno stanje u Yandex bazu podataka i idemo na konfiguraciju različitih dijelova našeg VPC-a. Mreža preklapanja u Yandex.Cloud bazirana je na odabranim komponentama OpenContrail-a, koji je nedavno nazvan Tungsten Fabric. Mrežne usluge implementirane su na jednoj CloudGate platformi. U CloudGate-u smo takođe koristili brojne komponente otvorenog koda: GoBGP - za pristup informacijama o kontroli, kao i VPP - za implementaciju softverskog rutera koji radi na vrhu DPDK-a za putanju podataka.

Tungsten Fabric komunicira sa CloudGate-om preko GoBGP-a. Govori šta se dešava u mreži preklapanja. CloudGate, zauzvrat, povezuje preklapajuće mreže jednu s drugom i sa internetom.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Sada da vidimo kako virtuelna mreža rješava probleme skaliranja i dostupnosti. Hajde da razmotrimo jednostavan slučaj. Postoji jedna zona dostupnosti i u njoj su kreirana dva VPC-a. Postavili smo jednu Tungsten Fabric instancu i ona povlači nekoliko desetina hiljada mreža. Mreže komuniciraju sa CloudGate-om. CloudGate, kao što smo već rekli, osigurava njihovu međusobnu povezanost i internet.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Recimo da je dodana druga zona dostupnosti. Trebalo bi propasti potpuno nezavisno od prvog. Stoga, u drugoj zoni dostupnosti, moramo instalirati zasebnu instancu Tungsten Fabric. Ovo će biti poseban sistem koji se bavi preklapanjem i malo zna o prvom sistemu. A vidljivost da je naša virtuelna mreža globalna, u stvari, stvara naš VPC API. Ovo je njegov zadatak.

VPC1 se mapira u zonu dostupnosti B ako postoje resursi u zoni dostupnosti B koji su gurnuti u VPC1. Ako nema resursa iz VPC2 u zoni dostupnosti B, nećemo materijalizirati VPC2 u ovoj zoni. Zauzvrat, pošto resursi iz VPC3 postoje samo u zoni B, VPC3 ne postoji u zoni A. Sve je jednostavno i logično.

Idemo malo dublje i vidimo kako funkcionira određeni host u Y.Cloud-u. Ono što želim napomenuti je da su svi domaćini raspoređeni na isti način. Napravili smo tako da samo neophodni minimum usluga radi na hardveru, a svi ostali rade na virtuelnim mašinama. Gradimo usluge višeg reda zasnovane na osnovnim infrastrukturnim uslugama, a koristimo i Cloud za rješavanje nekih inženjerskih problema, na primjer, u okviru kontinuirane integracije.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Ako pogledamo određeni host, možemo vidjeti da na host OS-u rade tri komponente:

  • Compute - dio odgovoran za distribuciju računarskih resursa na hostu.
  • VRouter je dio Tungsten Fabric koji organizira preklapanje, odnosno tunelira pakete kroz podlogu.
  • VDiskovi su komadi virtualizacije skladišta.

Pored toga, u virtuelnim mašinama se pokreću usluge: Cloud infrastrukturne usluge, platformske usluge i kapaciteti korisnika. Korisnički kapaciteti i usluge platforme uvijek idu na preklapanje preko VRoutera.

Infrastrukturne usluge se mogu držati u sloju, ali u osnovi žele da rade u podlozi. Uglavljuju se u podlogu uz pomoć SR-IOV. U stvari, izrezujemo karticu u virtuelne mrežne kartice (virtualne funkcije) i guramo ih u infrastrukturne virtuelne mašine kako ne bismo izgubili performanse. Na primjer, isti CloudGate je pokrenut kao jedna od ovih infrastrukturnih virtuelnih mašina.

Sada kada smo opisali globalne zadatke virtuelne mreže i strukturu osnovnih komponenti oblaka, hajde da vidimo kako tačno različiti delovi virtuelne mreže međusobno komuniciraju.

U našem sistemu razlikujemo tri sloja:

  • Config Plane - postavlja ciljno stanje sistema. Ovo je ono što korisnik konfiguriše preko API-ja.
  • Kontrolna ravan - pruža korisnički definisanu semantiku, odnosno dovodi stanje ravni podataka na ono što je korisnik opisao u ravni konfiguracije.
  • Data Plane - direktno obrađuje pakete korisnika.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Kao što sam rekao gore, sve počinje činjenicom da korisnički ili interni servis platforme dolazi do API-ja i opisuje određeno ciljno stanje.

Ovo stanje se odmah upisuje u Yandex bazu podataka, vraća ID asinhrone operacije preko API-ja i pokreće našu internu mašineriju da vrati stanje koje je korisnik želio. Zadaci konfiguracije idu na SDN kontroler i govore Tungsten Fabric šta da radi u preklapanju. Na primjer, oni rezerviraju portove, virtualne mreže i slično.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Konfiguraciona ravan u Tungsten Fabric šalje traženo stanje kontrolnoj ravni. Preko njega, Config Plane komunicira sa domaćinima, govoreći šta će se tačno okretati na njima uskoro.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Sada da vidimo kako sistem izgleda na hostovima. Virtuelna mašina ima mrežni adapter priključen na VRuter. VRouter je osnovni modul Tungsten Fabric koji gleda pakete. Ako već postoji tok za neki paket, modul ga obrađuje. Ako nema protoka, modul radi takozvani punting, odnosno šalje paket u usermod proces. Proces analizira paket i ili sam odgovara na njega, poput DHCP-a i DNS-a, ili govori VRouteru šta da radi s njim. Nakon toga, VRuter može obraditi paket.

Nadalje, promet između virtuelnih mašina unutar iste virtuelne mreže ide transparentno, ne usmjerava se na CloudGate. Hostovi na kojima su raspoređene virtuelne mašine komuniciraju direktno jedni s drugima. Oni tuneliraju saobraćaj i prosleđuju ga jedan za drugog kroz podlogu.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

Kontrolne ravni međusobno komuniciraju između zona dostupnosti preko BGP-a, kao sa drugim ruterom. Oni govore koje mašine se nalaze gde su tako da VM u jednoj zoni mogu da komuniciraju direktno sa drugim VM-ovima.

Kako Yandex.Cloud radi sa virtuelnim privatnim oblakom i kako nam naši korisnici pomažu da implementiramo korisne funkcije

A Control Plane komunicira sa CloudGate-om. Slično, izvještava gdje i koje virtuelne mašine se podižu, koje adrese imaju. Ovo vam omogućava da eksterni saobraćaj i saobraćaj od balansera usmerite na njih.

Saobraćaj koji napušta VPC dolazi do CloudGate-a, na stazu podataka, gdje se VPP sa našim dodacima brzo žvače. Zatim se saobraćaj pokreće ili na druge VPC-ove ili van, na granične rutere koji su konfigurisani preko kontrolne ravni samog CloudGate-a.

Planovi za blisku budućnost

Ako sve gore rečeno sumiramo u nekoliko rečenica, možemo reći da VPC u Yandex.Cloud rješava dva važna zadatka:

  • Pruža izolaciju između različitih klijenata.
  • Kombinira resurse, infrastrukturu, usluge platforme, druge oblake i lokalno u jednu mrežu.

A da biste dobro riješili ove probleme, morate osigurati skalabilnost i toleranciju grešaka na nivou interne arhitekture, što VPC i čini.

Postepeno VPC dobija funkcije, implementiramo nove funkcije, pokušavamo nešto poboljšati u smislu udobnosti korisnika. Neke ideje se iznose i dolaze na listu prioriteta zahvaljujući članovima naše zajednice.

Trenutno imamo sljedeću listu planova za blisku budućnost:

  • VPN kao usluga
  • Privatne DNS instance su slike za brzo postavljanje virtuelnih mašina sa unapred konfigurisanim DNS serverom.
  • DNS kao usluga.
  • Interni balanser opterećenja.
  • Dodavanje "bijele" IP adrese bez ponovnog kreiranja virtuelne mašine.

Balanser i mogućnost promene IP adrese za već kreiranu virtuelnu mašinu našli su se na ovoj listi na zahtev korisnika. Iskreno govoreći, bez eksplicitne povratne informacije, ove funkcije bismo preuzeli malo kasnije. I tako već radimo na problemu adresa.

U početku se "bijela" IP adresa mogla dodati samo prilikom kreiranja mašine. Ako je korisnik zaboravio to učiniti, virtuelna mašina je morala biti ponovo kreirana. Isto i, ako je potrebno, uklonite vanjski IP. Uskoro će biti moguće uključiti i isključiti javni IP bez ponovnog kreiranja mašine.

Slobodno izrazite svoje ideje i prijedlozi podrške drugim korisnicima. Pomažete nam da poboljšamo Cloud i brže dobijemo važne i korisne funkcije!

izvor: www.habr.com

Dodajte komentar