„Opasnost mi je srednje ime“, rekao je Austin Powers, međunarodni misteriozni čovjek. Ali ono što preferiraju super-agenti i obavještajne agencije potpuno je neprikladno za kibernetičku sigurnost, gdje je dosada daleko bolja od opasnosti.

Istio, zajedno s OpenShiftom i Kubernetesom, čini implementaciju mikroservisa uistinu dosadnom i predvidljivom - i to je divna stvar. O tome i mnogo čemu drugom raspravljat ćemo u četvrtoj i posljednjoj objavi u seriji o Istiu.
Kad je dosada prava stvar
U našem slučaju, dosada se javlja tek u završnoj fazi, kada sve što možete učiniti jest sjediti i promatrati proces. Ali da biste to učinili, prvo morate sve postaviti, a tamo vas čeka puno zanimljivih stvari.
Prilikom implementacije nove verzije softvera, vrijedi razmotriti sve opcije za ublažavanje rizika. Paralelno pokretanje je vrlo moćna i provjerena metoda testiranja, a Istio vam omogućuje korištenje "tajne usluge" (skrivene verzije vaše mikroservisa) u tu svrhu bez ometanja produkcijskog sustava. Postoji čak i poseban izraz za to: "Dark Launch", što je pak omogućeno značajkom s jednako špijunskim nazivom "zrcaljenje prometa".
Imajte na umu da se u prvoj rečenici prethodnog odlomka koristi izraz "implementirati" umjesto "objaviti". Trebali biste doista moći implementirati - i, naravno, koristiti - svoju mikroservisnu uslugu koliko god često želite. Ova usluga trebala bi moći primati i obrađivati promet, proizvoditi rezultate te biti u mogućnosti zapisivati i pratiti. Međutim, sama usluga ne mora nužno biti puštena u produkciju. Implementacija i objavljivanje softvera nisu uvijek ista stvar. Možete implementirati kad god želite, ali možete objaviti tek kada ste spremni.
Organiziranje dosade je zanimljivo
Pogledajte sljedeće Istio pravilo usmjeravanja koje usmjerava sve HTTP zahtjeve na mikroservis preporučene v1 (svi primjeri su preuzeti iz ), istovremeno ih zrcali u mikroservis preporuke v2:

Molimo obratite pozornost na etiketu mirror: Gumb na dnu zaslona postavlja zrcaljenje prometa. Da, tako je jednostavno!
Rezultat ovog pravila je da će vaš produkcijski sustav (v1) nastaviti obrađivati dolazne zahtjeve, ali sami zahtjevi će se asinkrono zrcaliti u v2, što znači da će se slati kao potpuni duplikati. Na taj način možete testirati v2 u stvarnim uvjetima - sa stvarnim podacima i prometom - bez ometanja produkcijskog sustava. Je li zbog toga testiranje naporno? Da, apsolutno. Ali zabavno je to raditi.
Dodajmo malo drame
Imajte na umu da v2 kod mora uzeti u obzir situacije u kojima dolazni zahtjevi mogu rezultirati izmjenom podataka. Sami zahtjevi se jednostavno i transparentno zrcale, ali izbor načina rukovanja njima u testnom okruženju ovisi o vama - i tu stvari postaju malo stresne.
Ponovimo važnu točku
Zrcaljenje tamnog pokretanja/zahtjeva može se izvršiti bez dodirivanja ikakvog koda.
Hrana za razmišljanje
Što ako bi lokacija za zrcaljenje zahtjeva poslala neke od njih na v2 umjesto na v1? Na primjer, jedan posto svih zahtjeva ili samo zahtjeve od određene skupine korisnika. A zatim, na temelju performansi v2, postupno migrirati sve zahtjeve na novu verziju. Ili, obrnuto, vratiti sve na v1 ako nešto pođe po zlu s v2. Mislim da se to zove Canary Deployment. , a da je ruskog podrijetla, vjerojatno bi sadržavao referencu na ), a sada ćemo to detaljnije pogledati.
Canary implementacija u Istio: pojednostavljeno puštanje u pogon
Pažljivo i postupno
Model Canary Deploymenta je jednostavan: kada pokrenete novu verziju svog softvera (u našem slučaju, mikroservis), prvo ga date maloj skupini korisnika. Ako sve prođe dobro, polako povećavate ovu grupu dok nova verzija ne počne raditi nepravilno ili - ako se to nikada ne dogodi - na kraju migrirate sve korisnike na nju. Promišljenim i postupnim uvođenjem nove verzije i prebacivanjem korisnika na nju na kontroliran način možete ublažiti rizike i maksimizirati povratne informacije.
Naravno, Istio pojednostavljuje Canary Deployment nudeći nekoliko sjajnih opcija za inteligentno usmjeravanje zahtjeva. I da, sve se to može učiniti bez dodirivanja izvornog koda.
Filtriranje preglednika
Jedan od najjednostavnijih kriterija usmjeravanja je preusmjeravanje specifično za preglednik. Recimo da želite da samo zahtjevi iz Safari preglednika idu na v2. Evo kako to učiniti:

Primijenimo ovo pravilo usmjeravanja, a zatim upotrijebimo naredbu curl Simulirat ćemo stvarne zahtjeve mikroservisu u petlji. Kao što možete vidjeti na snimci zaslona, svi oni idu na v1:

Gdje je promet prema v2? Budući da su svi zahtjevi u našem primjeru dolazili iz naše naredbene linije, jednostavno ga nema. Ali primijetite donje retke na gornjoj snimci zaslona: ovo je odgovor na naš zahtjev iz preglednika Safari, koji je zauzvrat vratio ovo:

Neograničena moć
Već smo pisali o tome koliko su regularni izrazi moćni za usmjeravanje zahtjeva. Pogledajte sljedeći primjer (mislimo da ćete shvatiti što radi):

Do sada vjerojatno imate ideju o tome što regularni izrazi mogu.
Postupajte pametno
Pametno usmjeravanje, uključujući obradu zaglavlja paketa pomoću regularnih izraza, omogućuje vam upravljanje prometom točno onako kako želite. To značajno pojednostavljuje implementaciju novog koda – jednostavno je, ne zahtijeva nikakve promjene samog koda i može se brzo vratiti ako je potrebno.
Zainteresiran?
Jeste li željni eksperimentiranja s Istiom, Kubernetesom i OpenShiftom na vlastitom računalu? Tim pripremio je izvrstan Objavio sam sve povezane datoteke o ovoj temi i učinio ih javno dostupnima. Zato samo naprijed i uživajte u svemu što možete.
Istio izlaz: izlaz kroz suvenirnicu
Korištenje Istia s Red Hat OpenShiftom i Kubernetesom može uvelike olakšati život s mikroservisima. Istio mreža servisa skrivena je unutar Kubernetes podova, a vaš kod se (uglavnom) izvršava izolirano. Performanse, jednostavnost promjena, praćenje i još mnogo toga lako se iskorištavaju korištenjem pomoćnih kontejnera. Ali što ako vaš mikroservis treba komunicirati s drugim servisima koji se nalaze izvan vašeg OpenShift-Kubernetes sustava?
Tu nastupa Istio Egress. Jednostavno rečeno, omogućuje vam pristup resursima (čitaj: "uslugama") koji nisu dio vašeg Kubernetes pod sustava. Bez ikakve dodatne konfiguracije, Istio Egress usmjerava promet samo unutar i između pod klastera na temelju internih IP tablica. Ovo "cocooning" odlično funkcionira sve dok ne trebate pristupati uslugama izvana.
Egress vam omogućuje zaobilaženje gore navedenih IP tablica, bilo na temelju Egress pravila ili na temelju raspona IP adresa.
Recimo da imamo Java program koji šalje GET zahtjev prema httpbin.org/headers.
(httpbin.org je jednostavno prikladan resurs za testiranje odlaznih zahtjeva za uslugama.)
Ako unesete u naredbeni redak curl http://httpbin.org/headers, vidjet ćemo sljedeće:

Ili možete otvoriti istu adresu u svom pregledniku:

Kao što vidimo, servis koji se tamo nalazi jednostavno vraća zaglavlja koja su mu proslijeđena.
Upravljamo supstitucijom uvoza
Sada uzmimo Java kod za ovu uslugu izvan našeg sustava i pokrenimo ga na našem sustavu, gdje je, podsjetnika, instaliran Istio. (To možete učiniti sami prema .) Nakon što izgradimo odgovarajuću sliku i pokrenemo je na OpenShift platformi, pozvat ćemo ovu uslugu naredbom curl egresshttpbin-istioegress.$(minishift ip).nip.io, nakon čega ćemo na ekranu vidjeti ovo:

Ups, što se dogodilo? Samo je radilo. Što znači "Nije pronađeno"? Upravo smo nešto poduzeli. curl.
Proširenje IP tablica na cijeli internet
Istio je kriv (ili zahvalan) za ovo. Uostalom, Istio je jednostavno pomoćni kontejner odgovoran za otkrivanje i usmjeravanje (i hrpu drugih stvari koje smo već obradili). Stoga, IP tablice znaju samo što je unutar vašeg klaster sustava. httpbin.org se nalazi izvan i stoga je nedostupan. Tu nastupa Istio Egress – bez i najmanje promjene vašeg izvornog koda.
Pravilo Egress u nastavku prisiljava Istio da pretraži (ako je potrebno, cijeli internet) potrebnu uslugu, u ovom slučaju httpbin.org. Kao što možete vidjeti iz ove datoteke (egress_httpbin.yml), funkcionalnost je ovdje prilično jednostavna:

Sve što preostaje je primijeniti ovo pravilo:
istioctl create -f egress_httpbin.yml -n istioegress
Pravila izlaza možete pregledati naredbom istioctl get egressrules:

I na kraju, ponovno pokrećemo naredbu sklupčati – i vidimo da sve funkcionira:

Misli otvoreno
Kao što vidite, Istio vam omogućuje interakciju s vanjskim svijetom. Drugim riječima, i dalje možete stvarati OpenShift usluge i upravljati njima putem Kubernetesa, držeći sve u podovima koji se skaliraju prema potrebi. Istovremeno, možete jednostavno pristupiti uslugama izvan vašeg okruženja. I da, još jednom, sve to možete učiniti bez diranja koda.
Ovo je bila posljednja objava u seriji Istio. Ostanite s nama - bit će još puno toga!
Izvor: www.habr.com
