Dark Launch u Istio: tajne usluge

«Opasnost – moje drugo ime», govorio je Austin Powers, čovjek-zagonetka međunarodnog formata. No, ono što je cijenjeno kod superagenta i tajnih službi, nije primjereno za IT sektore, gdje je dosada mnogo bolja od opasnosti.

Dark Launch u Istio: tajne usluge

Istio zajedno s OpenShift i Kubernetes čini implementaciju mikroservisa zaista dosadnom i predvidljivom – i to je sjajno. O tome i još mnogo čemu razgovarat ćemo u četvrtom i posljednjem postu iz serije o Istio.

Kada je dosada – to je u redu

U našem slučaju dosada nastaje samo u završnoj fazi, kada ostaje samo sjediti i promatrati proces. No, za to je potrebno prethodno sve pravilno postaviti, a ovdje vas čeka mnogo zanimljivog.

Prilikom implementacije nove verzije vašeg softvera trebate razmotriti sve mogućnosti minimiziranja rizika. Rad u paralelnom režimu je vrlo moćna i provjerena metoda testiranja, a Istio omogućava korištenje „tajne službe“ (skrivene od očiju javnosti verzije vašeg mikroservisa) bez ometanja rada produkcijskog sustava. Za to postoji čak i poseban termin – „Tajna implementacija“ (Dark Launch), koja se aktivira funkcijom s još tajanstvenijim imenom „mirror traffic“.

Obratite pozornost da se u prvom rečenici prethodnog paragrafa koristi termin „implementacija“ (deploy), a ne „izdavanje“ (release). Zaista biste trebali moći implementirati – i, naravno, koristiti – svoj mikroservis koliko god želite. Ova usluga trebala bi biti sposobna primati i obrađivati promet, pružati rezultate, a također pisati u logove i biti praćena. No, sama usluga nije nužno odobrena za produkciju. Implementacija i izdavanje softvera nisu uvijek isto. Implementaciju možete izvršiti kad god želite, dok je izdavanje moguće samo kada ste konačno spremni.

Organizacija dosade – to je zanimljivo

Pogledajte sljedeće pravilo usmjeravanja Istio, koje usmjerava sve HTTP zahtjeve na mikroservis recommendation v1 (svi primjeri su preuzeti iz Istio Tutorial GitHub repozitorija), istovremeno ih zrcaleći na mikroservis recommendation v2:

Dark Launch u Istio: tajne usluge
Obratite pažnju na oznaku mirror: na dnu ekrana – to je ono što postavlja zrcaljenje prometa. Da, tako jednostavno!

Rezultat ovog pravila će biti taj da će vaš produkcijski sustav (v1) i dalje obrađivati dolazne zahtjeve, ali će se zahtjevi asinhrono preslikavati na v2, što znači da će tamo odlaziti njihovi potpuni duplikati. Tako ćete moći testirati rad v2 u stvarnim uvjetima – na pravim podacima i prometu – bez ikakvog ometanja rada produkcijskog sustava. Čini li to organizaciju testiranja dosadnom? Da, svakako. Ali se to radi na zanimljiv način.

Dodajmo drame

Obratite pažnju da u kodu v2 trebate predvidjeti situacije kada dolazni zahtjevi mogu dovesti do promjene podataka. Samo se zahtjevi lako i neprimjetno preslikavaju, ali izbor načina obrade u testnoj verziji ostaje na vama – a to je već pomalo uzbudljivo.

Ponovimo važnu točku

Tajni launch s preslikavanjem prometa (Dark Launch/Request Mirroring) može se izvesti bez ikakvog dodirivanja koda.

Hrana za razmišljanje

A što ako dio zahtjeva koji preslikavate ne šaljete na v1, nego na v2? Na primjer, jedan postotak svih zahtjeva ili samo zahtjeve određene skupine korisnika. A zatim, gledajući kako v2 radi, postupno prebacujete sve zahtjeve na novu verziju. Ili obrnuto, vraćate sve na v1 ako nešto s v2 ne ide kako treba. Čini se da se to zove Canary Deployment ("kanarinsko implementiranje" – termin potječe iz rudarstva, i da je imao rusko podrijetlo, vjerojatno bi sadržavao aluziju na mačke), i za sada ćemo to razmotriti detaljnije.

Canary Deployment u Istio: pojednostavljujemo uvođenje u rad

Pažljivo i postupno

Suština modela Canary Deployment je iznimno jednostavna: kada pokrećete novu verziju svog softvera (u našem slučaju – mikroservisa), prvo omogućavate pristup maloj skupini korisnika. Ako sve ide dobro, polako povećavate tu skupinu sve dok nova verzija ne počne praviti probleme, ili – ako se to ne dogodi – na kraju prebacite sve korisnike na nju. Razrađujući i postupno uvodeći novu verziju, te kontrolirajući prijelaz korisnika, možete smanjiti rizike i maksimizirati povratne informacije.

Naravno, Istio olakšava Canary Deployment nudeći nekoliko dobrih opcija za inteligentno usmjeravanje zahtjeva. I da, sve se to može učiniti bez dodirivanja vašeg izvornih kod.

Filtriramo preglednik

Jedan od najjednostavnijih kriterija usmjeravanja je preusmjeravanje ovisno o pregledniku. Pretpostavimo da želite da na v2 idu samo zahtjevi iz preglednika Safari. Ovako to možete učiniti:

Dark Launch u Istio: tajne usluge
Primijenimo ovo pravilo usmjeravanja, a zatim ćemo tim curl u petlji simulirati stvarne zahtjeve prema mikroservisu. Kao što možete vidjeti na snimci zaslona, svi oni odlaze na v1:

Dark Launch u Istio: tajne usluge
A gdje je promet na v2? Budući da su u našem primjeru svi zahtjevi dolazili samo iz naše komandne linije, jednostavno ga nema. No obratite pažnju na donje retke na snimci iznad: to je odgovor na naš zahtjev iz preglednika Safari, koji je zauzvrat dao ovo:

Dark Launch u Istio: tajne usluge

Neograničena moć

Već smo pisali da regularni izrazi pružaju vrlo moćne mogućnosti za usmjeravanje zahtjeva. Pogledajte sljedeći primjer (mislimo da ćete i sami shvatiti što radi):

Dark Launch u Istio: tajne usluge
Sada vjerojatno već imate predstavu o tome što su sposobni regularni izrazi.

Djelujte pametno

Pametno usmjeravanje, osobito obrada zaglavlja paketa koristeći regularne izraze, omogućava vam da upravljate prometom onako kako želite. I to znatno pojednostavljuje uvođenje novog koda – jednostavno je, ne zahtijeva promjenu samog koda, i po potrebi se sve može brzo vratiti kako je bilo.

Zainteresirani?

Jeste li se uželili eksperimentirati s Istio, Kubernetesom i OpenShiftom na svom računalu? Tim Red Hat Developer Team pripremio je odličan vodič o ovoj temi i objavio sve prateće datoteke za javno korištenje. Pa, naprijed, i ne uskraćujte si ništa.
 

Istio Egress: izlaz kroz suvenirnicu

Primjenom Istio-a zajedno s Red Hat OpenShiftom i Kubernetesom, možete značajno olakšati svoj život s mikroservisima. Servisna mreža Istio je skrivena unutar Kubernetesovih podova, a vaš kod se izvodi (većinom) izolirano. Performanse, jednostavnost promjena, praćenje i ostalo – sve to se lako koristi zahvaljujući primjeni sidecar kontejnera. No, što učiniti ako vaš mikroservis mora komunicirati s drugim servisima koji su izvan vašeg OpenShift-Kubernetes sustava?

Ovdje nastupa Istio Egress. Ukratko, on jednostavno omogućuje pristup resursima (čitaj: 'uslugama') koji nisu unutar vaših Kubernetes podova. Ako ne izvršite dodatne postavke, u Istio Egress okruženju promet se usmjerava samo unutar klastera podova i između takvih klastera na temelju unutarnjih IP tablica. Ovakvo zatvaranje funkcionira savršeno sve dok vam nije potreban pristup vanjskim uslugama.

Egress omogućuje zaobilaženje gore navedenih IP tablica, ili na temelju Egress pravila, ili za raspon IP adresa.

Pretpostavimo da imamo Java program koji izvodi GET zahtjev na httpbin.org/headers.

(httpbin.org je jednostavno zgodan resurs za testiranje odlaznih zahtjeva usluga.)

Ako upišemo u komandnu liniju curl http://httpbin.org/headers, vidjet ćemo sljedeće:

Dark Launch u Istio: tajne usluge
Ili možemo otvoriti istu adresu u pregledniku:

Dark Launch u Istio: tajne usluge
Kao što vidimo, usluga koja se nalazi tamo jednostavno vraća proslijeđene joj zaglavlja.

Import zamjenjujemo na jednostavan način

Sada uzmimo Java kod ove vanjske usluge u odnosu na naš sustav i pokrenimo ga kod nas, gdje, podsjećamo, imamo Istio. (Možete to učiniti sami, pozivajući se na naš vodič za Istio.) Nakon što izgradimo odgovarajući image i pokrenemo ga na OpenShift platformi, pozvat ćemo ovu uslugu naredbom curl egresshttpbin-istioegress.$(minishift ip).nip.io, nakon čega ćemo na ekranu vidjeti ovo:

Dark Launch u Istio: tajne usluge
Što se dogodilo? Sve je radilo doslovno prije trenutka. Što znači Not Found? Pa, sada smo upravo napravili za njega curl.

Proširujemo IP tablice na cijeli internet

Kriviti (ili zahvaliti) za to treba Istio. Jer Istio su jednostavno sidecar kontejneri, koji se brinu za otkrivanje i usmjeravanje (i još mnogo drugih stvari o kojima smo ranije pričali). Iz tog razloga IP tablice znaju samo o onome što se nalazi unutar vaših klastera. A httpbin.org je smješten vani i stoga nije dostupan. I tu nastupa Istio Egress – bez ikakvih promjena u vašem izvornoj kodu.

U nastavku se nalazi Egress pravilo koje tjera Istio da traži (ako je potrebno, i u cijelom svijetu internetu) potrebnu uslugu, u ovom slučaju, httpbin.org. Kao što se može vidjeti iz ovog dokumenta (egress_httpbin.yml), funkcionalnost ovdje je prilično jednostavna:

Dark Launch u Istio: tajne usluge
Sada je potrebno samo primijeniti ovo pravilo:

istioctl create -f egress_httpbin.yml -n istioegress

Pravila Egress se mogu pregledati naredbom istioctl get egressrules:

Dark Launch u Istio: tajne usluge
I konačno, opet pokrećemo naredbu curl – i vidimo da sve radi:

Dark Launch u Istio: tajne usluge

Razmišljamo otvoreno

Kao što vidite, Istio omogućava organizaciju interakcije i s vanjskim svijetom. Drugim riječima, još uvijek možete stvarati usluge OpenShift i upravljati njima putem Kubernetesa, držeći sve u podovima koji se skaliraju gore-dolje po potrebi. I pritom se možete slobodno obraćati vanjskim uslugama u odnosu na vaše okruženje. I da, još jednom ponavljamo, sve to možete raditi, a da pritom ne dodirujete svoj kod.

Ovo je bio posljednji post iz serije o Istio. Ostanite s nama – pred nama je mnogo zanimljivog!

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster