Serija objava na Istio Service Mesh

Započinjemo seriju postova koji prikazuju neke od mnogih mogućnosti Istio Service Mesha u kombinaciji s Red Hat OpenShift i Kubernetes.

Serija objava na Istio Service Mesh

Prvi dio, danas:

  • Objasnimo koncept Kubernetes bočnih kontejnera i formulirajmo lajtmotiv ove serije postova: "ne morate ništa mijenjati u svom kodu".
  • Predstavimo temeljnu stvar Istioa - pravila usmjeravanja. Sve druge Istio značajke izgrađene su na njima, budući da su pravila ta koja vam omogućuju usmjeravanje prometa na mikroservise, koristeći YAML datoteke izvan koda usluge. Također razmatramo shemu postavljanja Canary Deploymenta. Novogodišnji bonus – 10 interaktivnih lekcija na Istio


Drugi dio, koji uskoro dolazi, reći će vam:

  • Kako Istio implementira Pool Ejection u kombinaciji s Circuit Breaker i pokazat će vam kako Istio omogućuje uklanjanje mrtve ili neučinkovite mahune iz kruga za balansiranje.
  • Također ćemo pogledati temu Circuit Breaker iz prvog posta da vidimo kako se Istio može koristiti ovdje. Pokazat ćemo vam kako usmjeravati promet i rješavati mrežne pogreške pomoću YAML konfiguracijskih datoteka i terminalskih naredbi bez ikakvih promjena u servisnom kodu.

treći dio:

  • Priča o praćenju i praćenju, koji su već ugrađeni ili se jednostavno dodaju u Istio. Pokazat ćemo vam kako koristiti alate kao što su Prometheus, Jaeger i Grafana u kombinaciji s OpenShift skaliranjem za jednostavno upravljanje mikroservisnim arhitekturama.
  • Prelazimo s praćenja i rukovanja pogreškama na njihovo namjerno uvođenje u sustav. Drugim riječima, učimo kako izvršiti umetanje grešaka bez mijenjanja izvornog koda, što je vrlo važno sa stajališta testiranja - jer ako promijenite sam kod za to, postoji rizik od uvođenja dodatnih grešaka.

Na kraju, u posljednjem postu na Istio Service Mesh:

  • Idemo na Mračnu stranu. Točnije, naučit ćemo koristiti shemu Dark Launch, kada se kod implementira i testira izravno na proizvodnim podacima, ali ni na koji način ne utječe na rad sustava. Ovdje je korisna Istiova sposobnost da podijeli promet. A mogućnost testiranja na proizvodnim podacima uživo bez utjecaja na rad borbenog sustava najuvjerljivija je metoda provjere.
  • Nadovezujući se na Dark Launch, pokazat ćemo vam kako koristiti model Canary Deployment da smanjite rizik i olakšate uvođenje novog koda u proizvodnju. Sam Canary Deployment je daleko od novosti, ali Istio vam omogućuje implementaciju ove sheme sa samo jednostavnim YAML datotekama.
  • Na kraju, pokazat ćemo vam kako koristiti Istio Egress da omogućite pristup uslugama onima koji su izvan vaših klastera kako biste mogli koristiti mogućnosti Istio-a pri radu s Internetom.

Dakle, idemo...

Istio alati za praćenje i upravljanje - sve što vam je potrebno za orkestriranje mikroservisa u uslužnoj mreži servisna mreža.

Što je Istio Service Mesh

Servisna mreža implementira funkcije kao što su praćenje prometa, kontrola pristupa, otkrivanje, sigurnost, tolerancija grešaka i druge korisne stvari za grupu usluga. Istio vam sve to omogućuje bez i najmanje izmjene koda samih usluga. U čemu je tajna magije? Istio svakom servisu pridaje svoj proxy u obliku kontejnera s prikolicom (sidecar je prikolica za motocikle), nakon čega sav promet prema ovom servisu ide kroz proxy koji, vođen određenim politikama, odlučuje kako, kada i hoće li taj promet uopće treba doći do servisa. Istio također omogućuje implementaciju naprednih DevOps tehnika kao što su Canary implementacije, prekidači strujnog kruga, umetanje grešaka i mnoge druge.

Kako Istio radi s kontejnerima i Kubernetesom

Istio servisna mreža sporedna je implementacija svega što je potrebno za stvaranje i upravljanje mikroservisima: praćenje, praćenje, prekidači strujnog kruga, usmjeravanje, balansiranje opterećenja, ubacivanje grešaka, ponovni pokušaji, istek vremena, zrcaljenje, kontrola pristupa, ograničavanje brzine i još mnogo toga. I premda danas postoji gomila biblioteka za implementaciju ovih funkcija izravno u kod, s Istiom možete dobiti sve iste stvari bez promjene bilo čega u svom kodu.

Prema sidecar modelu, Istio radi u Linux spremniku, koji se nalazi u jednom Kubernetes-pod s kontroliranom uslugom i ubacuje i izvlači funkcionalnost i informacije prema zadanoj konfiguraciji. Naglašavamo da je ovo vaša vlastita konfiguracija i da se nalazi izvan vašeg koda. Stoga kod postaje puno jednostavniji i kraći.

Ono što je također važno jest da se operativna komponenta mikroservisa ispostavlja da nije ni na koji način povezana sa samim kodom, što znači da se njihov rad može sigurno prenijeti na IT stručnjake. Doista, zašto bi programer trebao biti odgovoran za prekidače i ubacivanje kvara? Reagirati, da, ali ih obraditi i stvoriti? Ako sve to uklonite iz koda, programeri će se moći u potpunosti usredotočiti na funkcionalnost aplikacije. A sam kod postat će kraći i jednostavniji.

Servisna mreža

Istio, koji implementira funkcije za upravljanje mikroservisima izvan njihovog koda, koncept je Service Mesh-a. Drugim riječima, to je koordinirana skupina jedne ili više binarnih datoteka koje tvore mrežu mrežnih funkcija.

Kako Istio radi s mikroservisima

Ovako izgleda rad bočnih kontejnera u spoju s Kubernetes и Mini smjena pogled iz ptičje perspektive: pokrenite instancu Minishifta, izradite projekt za Istio (nazovimo ga “istio-sustav”), instalirajte i pokrenite sve komponente povezane s Istio. Zatim, dok stvarate projekte i podove, dodajete podatke o konfiguraciji svojim implementacijama, a vaši podovi počinju koristiti Istio. Pojednostavljeni dijagram izgleda ovako:

Serija objava na Istio Service Mesh

Sada možete promijeniti Istio postavke kako biste, na primjer, organizirali ubacivanje grešaka, podršku Canary raspoređivanje ili druge Istio značajke - i sve to bez diranja koda samih aplikacija. Recimo da želite preusmjeriti sav web promet s korisnika vašeg najvećeg klijenta (Foo Corporation) na novu verziju stranice. Da biste to učinili, jednostavno izradite Istio pravilo usmjeravanja koje će tražiti @foocorporation.com u korisničkom ID-u i preusmjeravati u skladu s tim. Za sve ostale korisnike ništa se neće promijeniti. U međuvremenu ćete mirno testirati novu verziju stranice. I imajte na umu da za ovo uopće ne morate uključiti programere.

I hoćete li to morati skupo platiti?

Nikako. Istio je prilično brz i napisan je Go i stvara vrlo malo režijskih troškova. Osim toga, mogući gubitak mrežne produktivnosti nadoknađuje se povećanjem produktivnosti programera. Barem u teoriji: ne zaboravite da je vrijeme programera dragocjeno. Što se tiče troškova softvera, Istio je softver otvorenog koda, tako da ga možete dobiti i koristiti besplatno.

Svladajte sami

Red Hat Developer Experience Team razvio je detaljan praktični rad rukovodstvo by Istio (na engleskom). Radi na Linuxu, MacOS-u i Windowsima, a kod je dostupan u Javi i Node.js.

10 interaktivnih lekcija na Istio

Blok 1 - Za početnike

Uvod u Istio
30 minuta
Upoznajmo se s Service Meshom, naučimo kako instalirati Istio u OpenShift Kubernetes klaster.
Postaviti

Implementacija mikroservisa u Istio
30 minuta
Koristimo Istio za implementaciju tri mikroservisa sa Spring Boot i Vert.x.
Postaviti

Blok 2 – srednja razina

Praćenje i praćenje u Istio
60 minuta
Istražit ćemo Istiove ugrađene alate za praćenje, prilagođene metrike i OpenTracing putem Prometheusa i Grafane.
Postaviti

Jednostavno usmjeravanje u Istio
60 minuta
Naučite kako upravljati usmjeravanjem u Istiu pomoću jednostavnih pravila.
Postaviti

Napredna pravila usmjeravanja
60 minuta
Pogledajmo Istio pametno usmjeravanje, kontrolu pristupa, balansiranje opterećenja i ograničavanje brzine.
Postaviti

Blok 3 – napredni korisnik

Uvođenje greške u Istio
60 minuta
Proučavamo scenarije rješavanja kvarova u distribuiranim aplikacijama, stvarajući HTTP pogreške i mrežna kašnjenja, te učimo koristiti inženjering kaosa za vraćanje okruženja.
Postaviti

Prekidač u Istio
30 minuta
Instaliramo Siege za stranice za testiranje otpornosti na stres i učimo kako osigurati otpornost na pozadinske greške pomoću ponavljanja, prekidača strujnog kruga i izbacivanja iz skupa.
Postaviti

Egres i Istio
10 minuta
Koristimo izlazne rute za stvaranje pravila za interakciju internih usluga s vanjskim API-jima i uslugama.
Postaviti

Istio i Kiali
15 minuta
Naučite koristiti Kiali da biste dobili pregled mrežne mreže usluga i istražite protoke zahtjeva i podataka.
Postaviti

Uzajamni TLS u Istiu
15 minuta
Izrađujemo Istio Gateway i VirtualService, zatim detaljno proučavamo međusobni TLS (mTLS) i njegove postavke.
Postaviti

Blok 3.1 - Duboko uranjanje: Istio Service Mesh za mikroservise

Serija objava na Istio Service Mesh
O čemu je knjiga:

  • Što je servisna mreža?
  • Istio sustav i njegova uloga u mikroservisnoj arhitekturi.
  • Korištenje Istia za rješavanje sljedećih problema:
    • Tolerancija kvarova;
    • Usmjeravanje;
    • Testiranje kaosa;
    • sigurnost;
    • Prikupljanje telemetrije pomoću tragova, metrike i Grafana.

Za preuzimanje knjige

Serija članaka o uslužnim mrežama i Istio

Pokušajte sami

Ova serija postova nije namijenjena pružanju dubokog poniranja u svijet Istio. Samo vas želimo upoznati s konceptom i možda vas inspirirati da i sami isprobate Istio. To je potpuno besplatno, a Red Hat pruža sve alate koji su vam potrebni za početak rada s OpenShiftom, Kubernetesom, Linux kontejnerima i Istiom, uključujući: Red Hat Developer OpenShift kontejnerska platforma, naš vodič za Istio i druge resurse na našem mikrostranica na servisnoj mreži. Ne odgađajte, počnite danas!

Istio pravila usmjeravanja: usmjeravanje zahtjeva za uslugom kamo trebaju ići

otvorena smjena и Kubernetes izvrstan posao adresiranja mikrousluge preusmjeren na potrebne mahune. To je jedan od razloga postojanja Kubernetesa – usmjeravanje i balansiranje opterećenja. Ali što ako trebate suptilnije i sofisticiranije usmjeravanje? Na primjer, za istovremeno korištenje dvije verzije mikroservisa. Kako Istio Route Rules mogu pomoći ovdje?

Pravila rute su pravila koja zapravo određuju izbor rute. Bez obzira na razinu složenosti sustava, opći princip rada ovih pravila ostaje jednostavan: zahtjevi se usmjeravaju na temelju određenih parametara i vrijednosti HTTP zaglavlja.
Pogledajmo primjere:

Zadano za Kubernetes: trivijalno "50/50"

U našem primjeru ćemo pokazati kako istovremeno koristiti dvije verzije mikroservisa u OpenShiftu, nazovimo ih v1 i v2. Svaka verzija radi u vlastitom Kubernetes modulu, a prema zadanim postavkama pokreće ravnomjerno uravnoteženo kružno usmjeravanje. Svaki pod prima svoj udio zahtjeva na temelju broja svojih instanci mikroservisa, drugim riječima, replika. Istio vam omogućuje da ručno promijenite ovu ravnotežu.

Recimo da smo implementirali dvije verzije naše usluge preporuke na OpenShiftu, preporuka-v1 i preporuka-v2.
Na sl. Slika 1 pokazuje da kada je svaka usluga predstavljena u jednoj instanci, zahtjevi se ravnomjerno izmjenjuju između njih: 1-2-1-2-... Ovako Kubernetes usmjeravanje funkcionira prema zadanim postavkama:

Serija objava na Istio Service Mesh

Ponderirana distribucija između verzija

Na sl. Slika 2 prikazuje što se događa ako povećate broj replika usluge v2 s jedne na dvije (to se radi pomoću naredbe oc scale —replicas=2 deployment/recommendation-v2). Kao što vidite, zahtjevi između v1 i v2 sada su podijeljeni u omjeru jedan prema tri: 1-2-2-1-2-2-…:

Serija objava na Istio Service Mesh

Ignorirajte verziju koja koristi Istio

Istio olakšava promjenu distribucije zahtjeva na način koji nam je potreban. Na primjer, pošaljite sav promet samo na preporuka-v1 pomoću sljedeće Istio yaml datoteke:

Serija objava na Istio Service Mesh

Ovdje morate obratiti pozornost na ovo: mahune se biraju prema naljepnicama. Naš primjer koristi oznaku v1. Parametar "težina: 100" znači da će 100% prometa biti usmjereno na sve segmente usluga koje imaju oznaku v1.

Distribucija direktiva između verzija (Canary implementacija)

Zatim, koristeći parametar težine, možete usmjeriti promet na oba bloka, zanemarujući broj instanci mikroservisa koji se izvode u svakom od njih. Na primjer, ovdje usmjeravamo 90% prometa na v1 i 10% na v2:

Serija objava na Istio Service Mesh

Odvojeno usmjeravanje za mobilne korisnike

U zaključku ćemo pokazati kako natjerati promet mobilnih korisnika da bude preusmjeren na uslugu v2, a svi ostali na v1. Da bismo to učinili, koristimo regularne izraze za analizu vrijednosti korisničkog agenta u zaglavlju zahtjeva:

Serija objava na Istio Service Mesh

Sad je tvoj red

Primjer s regularnim izrazima za raščlanjivanje zaglavlja trebao bi vas motivirati da pronađete vlastitu upotrebu Istio pravila usmjeravanja. Štoviše, mogućnosti su ovdje prilično opsežne, jer se vrijednosti zaglavlja mogu formirati u izvornom kodu aplikacije.

I zapamtite da Ops, a ne Dev

Sve što smo pokazali u gornjim primjerima radi se bez ikakvih promjena u izvornom kodu, dobro, osim onih slučajeva kada je potrebno generirati posebna zaglavlja zahtjeva. Istio će biti koristan kako programerima, koji će ga, primjerice, moći koristiti u fazi testiranja, tako i stručnjacima za rad IT sustava, kojima će uvelike pomoći u proizvodnji.

Dakle, ponovimo lajtmotiv ove serije postova: ne morate ništa mijenjati u svom kodu. Nema potrebe za izgradnjom novih slika ili pokretanjem novih spremnika. Sve je to implementirano izvan koda.

Koristi svoju maštu

Zamislite samo mogućnosti analize zaglavlja pomoću regularnih izraza. Želite preusmjeriti svog najvećeg kupca na posebnu verziju vašeg mikrousluge? Lako! Trebate zasebnu verziju za preglednik Chrome? Nema problema! Promet možete usmjeriti prema gotovo svim karakteristikama.

Pokušajte sami

Jedno je čitati o Istiou, Kubernetesu i OpenShiftu, ali zašto ne dodirnuti sve sami? Tim Red Hat Developer Program pripremio je detaljan vodič (na engleskom) koji će vam pomoći da što brže svladate ove tehnologije. Priručnik je također 100% otvorenog izvora, tako da je objavljen u javnoj domeni. Datoteka radi na macOS, Linux i Windows, a izvorni kod je dostupan u verzijama Java i node.js (verzije na drugim jezicima stižu uskoro). Samo otvorite odgovarajuće git spremište u svom pregledniku Red Hat Developer Demo.

U sljedećem postu: lijepo rješavamo probleme

Danas ste vidjeli što Istio pravila usmjeravanja mogu učiniti. Sada zamislite istu stvar, ali samo u odnosu na obradu grešaka. Upravo o tome ćemo govoriti u sljedećem postu.

Izvor: www.habr.com

Dodajte komentar