Serija postova na Istio Service Mesh

Započinjemo seriju postova koji demonstriraju neke od mnogih karakteristika Istio Service Mesh u kombinaciji sa Red Hat OpenShift-om i Kubernetesom.

Serija postova 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".
  • Zamislimo osnovnu stvar Istia - pravila rutiranja. Sve ostale Istio funkcije su izgrađene na njima, jer su pravila koja vam omogućavaju da usmjeravate promet na mikroservise koristeći YAML datoteke izvan koda usluge. Uzimamo u obzir i shemu implementacije Canary Deployment. Novogodišnji bonus - 10 interaktivnih Istio lekcija


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

  • Kako Istio implementira Pool Ejection u kombinaciji s Circuit Breaker-om i demonstrira kako vam Istio omogućava uklanjanje neaktivnog ili lošeg učinka iz šeme ravnoteže.
  • Također ćemo pogledati temu prekidača iz prvog posta o tome kako se Istio može koristiti ovdje. Pokazat ćemo kako usmjeriti promet i rukovati mrežnim greškama bez i najmanje promjene u servisnom kodu koristeći YAML konfiguracijske datoteke i terminalske komande.

treći dio:

  • Priča o praćenju i praćenju koja je već ugrađena ili se lako dodaje u Istio. Pokazat ćemo vam kako da koristite alate kao što su Prometheus, Jaeger i Grafana u kombinaciji s OpenShift skaliranjem da bez napora upravljate svojom mikroservisnom arhitekturom.
  • Prelazimo sa praćenja i rukovanja greškama na njihovo namjerno uvođenje u sistem. Drugim riječima, učimo da radimo ubacivanje grešaka bez promjene izvornog koda, što je vrlo važno sa stanovišta testiranja - jer ako promijenite sam kod za ovo, postoji rizik od uvođenja dodatnih grešaka.

Konačno, u završnoj objavi na Istio Service Mesh:

  • Idemo na Tamnu stranu. Preciznije, naučićemo da koristimo šemu Dark Launch, kada se kod postavlja i testira direktno na proizvodnim podacima, ali ni na koji način ne utiče na rad sistema. Ovdje je Istiova sposobnost da podijeli promet dobro došla. A mogućnost da se izvrši testiranje na živim proizvodnim podacima bez uticaja na rad borbenog sistema na bilo koji način je najuvjerljiviji način za provjeru.
  • Nadovezujući se na Dark Launch, pokazat ćemo vam kako koristiti model Canary Deployment da smanjite rizik i olakšate implementaciju novog koda. Sama Canary Deployment nije nova, ali Istio vam omogućava da implementirate ovu šemu sa samo jednostavnim YAML datotekama.
  • U zaključku ćemo pokazati kako koristiti Istio Egress da biste dali pristup uslugama onima koji su izvan vaših klastera kako bi koristili mogućnosti Istio-a pri radu sa Internetom.

Dakle, idemo…

Istio komplet alata za praćenje i upravljanje - sve što vam je potrebno za koordinaciju mikroservisa u servisnoj mreži servisna mreža.

Šta je Istio Service Mesh

Servisna mreža implementira za grupu usluga kao što su praćenje saobraćaja, kontrola pristupa, otkrivanje, sigurnost, tolerancija grešaka i druge korisne stvari. Istio vam omogućava da sve ovo učinite bez i najmanje promjene u kodu samih usluga. Koja je tajna magije? Istio svakom servisu prilaže svoj proxy u obliku bočnog kontejnera (bočna prikolica je prikolica za motocikle), nakon čega sav promet do ove usluge ide preko proxyja koji, vođen navedenim politikama, odlučuje kako, kada i hoće li saobraćaj bi uopšte trebao doći do servisa. Istio vam također daje mogućnost implementacije naprednih DevOps tehnika kao što su kanaričke implementacije, prekidači, ubrizgavanje greške i još mnogo toga.

Kako Istio radi sa kontejnerima i Kubernetesom

Istio servisna mreža je sporedna implementacija svega što vam je potrebno za kreiranje i upravljanje mikrouslugama: praćenje, praćenje, prekidači, rutiranje, balansiranje opterećenja, ubacivanje greške, ponovni pokušaji, vremenska ograničenja, zrcaljenje, kontrola pristupa, ograničavanje brzine i još mnogo toga. I dok danas postoji mnoštvo biblioteka za implementaciju ovih funkcija direktno u kodu, uz Istio možete dobiti potpuno istu stvar bez promjene bilo čega u svom kodu.

Prema modelu sidecar, Istio radi u Linux kontejneru, koji se nalazi u jednom Kubernet-pod sa kontroliranom uslugom i implementira (ubrizgava) i izvlači (izvlači) funkcionalnost i informacije prema datoj konfiguraciji. Naglašavamo da je ovo vaša vlastita konfiguracija i da živi izvan vašeg koda. Stoga kod postaje mnogo jednostavniji i kraći.

Što je još važnije, operativna komponenta mikroservisa nije ni na koji način povezana sa samim kodom, što znači da se njihov rad može bezbedno preneti na IT stručnjake. Zaista, zašto bi programer trebao biti odgovoran za prekidače i ubrizgavanje kvara? Reagovati, da, ali ih obraditi i kreirati? Ako sve ovo uklonite iz koda, programeri se mogu u potpunosti fokusirati na funkcionalnost aplikacije. I sam kod će postati kraći i jednostavniji.

Servisna mreža

Istio, koji implementira funkcije upravljanja mikroservisima izvan njihovog koda - ovo je koncept Service Mesh. Drugim riječima, to je koordinirana grupa od jedne ili više binarnih datoteka koje formiraju mrežu mrežnih funkcija.

Kako Istio radi sa mikroservisima

Ovo je način na koji kontejneri s prikolicom rade zajedno Kubernet и mini-smjena ptičje perspektive: pokrenite Minishift instancu, kreirajte Istio projekat (nazovimo ga "istio-sistem"), instalirajte i pokrenite sve komponente povezane sa Istiom. Zatim, dok kreirate projekte i podove, dodajte informacije o konfiguraciji u svoje implementacije i vaši podovi počnu koristiti Istio. Pojednostavljeni dijagram izgleda ovako:

Serija postova na Istio Service Mesh

Sada možete promijeniti Istio postavke da, na primjer, organizirate ubacivanje grešaka, podršku Canary Deployment ili druge karakteristike Istio-a - i sve to bez dodirivanja koda samih aplikacija. Pretpostavimo da želite da preusmjerite sav web promet od korisnika vašeg najvećeg kupca (Foo Corporation) na novu verziju vaše stranice. Sve što trebate učiniti je kreirati Istio pravilo rutiranja koje traži @foocorporation.com u korisničkom ID-u i prema tome preusmjerava. Za sve ostale korisnike ništa se neće promijeniti. U međuvremenu, tiho ćete testirati novu verziju stranice. I imajte na umu da za to apsolutno nije potrebno uključiti programere.

I koliko morate platiti za to?

Ne sve. Istio je prilično brz, napisan je Go i stvara vrlo male režije. Osim toga, mogući gubitak online produktivnosti kompenzira 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 je besplatan za nabavku i korištenje.

Savladajte sami

Red Hat Developer Experience Team razvio je detaljan praktični rad vodič od Istio (na engleskom). Radi na Linuxu, MacOS-u i Windowsu, a kod dolazi u Java i Node.js ukusima.

10 interaktivnih Istio lekcija

Blok 1 - Za početnike

Uvod u Istio
30 minuta
Upoznajemo se sa Service Mesh, učimo kako da instaliramo Istio u Kubernetes OpenShift klaster.
Započnite

Uvođenje mikroservisa u Istio
30 minuta
Koristimo Istio za implementaciju tri mikroservisa sa Spring Boot-om i Vert.x-om.
Započnite

Blok 2 - srednji nivo

Praćenje i praćenje u Istio
60 minuta
Istražite Istio ugrađene alate za praćenje, prilagođene metrike i OpenTracing putem Prometheusa i Grafane.
Započnite

Jednostavno rutiranje u Istio
60 minuta
Naučite kako kontrolirati usmjeravanje u Istio-u koristeći jednostavna pravila.
Započnite

Napredna pravila rutiranja
60 minuta
Upoznajemo se sa pametnim rutiranjem u Istio-u, kontrolom pristupa, balansiranjem opterećenja i ograničenjem brzine.
Započnite

Blok 3 - Napredni korisnik

Injekcija greške u Istio
60 minuta
Proučavamo scenarije rukovanja kvarovima u distribuiranim aplikacijama, kreiramo HTTP greške i mrežna kašnjenja i učimo kako primijeniti haos inženjering za obnavljanje okruženja.
Započnite

Prekidač u Istio
30 minuta
Instaliramo Siege za mjesta testiranja otpornosti na stres i učimo kako osigurati otpornost na greške u pozadini korištenjem ponovnih pokušaja, prekidača i izbacivanja bazena.
Započnite

Egress i Istio
10 minuta
Koristimo izlazne rute za kreiranje pravila za interakciju internih usluga sa eksternim API-jima i uslugama.
Započnite

Istio i Kiali
15 minuta
Naučite kako koristiti Kiali da dobijete širu sliku mreže usluga i proučite tok zahtjeva i podataka.
Započnite

Uzajamni TLS u Istio
15 minuta
Kreiramo Istio Gateway i VirtualService, zatim detaljno proučavamo uzajamni TLS (mTLS) i njegove postavke.
Započnite

Okvir 3.1 - Duboko zaron: Istio servisna mreža za mikroservise

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

  • Šta je servisna mreža.
  • Istio sistem i njegova uloga u mikroservisnoj arhitekturi.
  • Koristite Istio za sljedeće zadatke:
    • Tolerancije grešaka;
    • Routing;
    • Testiranje haosa;
    • Bezbednost;
    • Prikupljanje telemetrije pomoću praćenja, metrike i Grafane.

Za preuzimanje knjige

Serija članaka o servisnim mrežama i Istio

Pokušajte sami

Ova serija postova nije namijenjena da pruži duboko zaron u svijet Istia. Samo želimo da vas upoznamo sa samim konceptom i možda vas inspirišemo da sami isprobate Istio. Potpuno je besplatan, a Red Hat pruža sve alate koji su vam potrebni da započnete s OpenShift, Kubernetes, Linux kontejnerima i Istiom, uključujući: Red Hat Developer OpenShift Container Platform, naš vodič kroz Istio i drugi resursi na našoj servisna mreža mikro sajt. Ne odgađajte, počnite već danas!

Istio pravila rutiranja: Usmjeravanje zahtjeva za uslugu na pravo mjesto

openshift и Kubernet odlično se nose sa njima mikrousluge usmjerava do potrebnih mahuna. Ovo je jedna od svrha postojanja Kubernetesa - rutiranje i balansiranje opterećenja. Ali šta ako vam treba suptilnije i sofisticiranije usmjeravanje? Na primjer, za korištenje dvije verzije mikroservisa u isto vrijeme. Kako Istio pravila rute mogu pomoći ovdje?

Pravila rutiranja su pravila koja, u stvari, određuju izbor rute. Bez obzira na složenost sistema, opšti princip iza ovih pravila ostaje jednostavan: zahtevi se rutiraju na osnovu određenih parametara i vrednosti HTTP zaglavlja.
Pogledajmo primjere:

Kubernetes Default: Trivijalan "50/50"

U našem primjeru ćemo pokazati kako istovremeno koristiti dvije verzije mikroservisa u OpenShift-u, nazovimo ih v1 i v2. Svaka verzija radi u sopstvenom Kubernetes pod-u, a ravnomerno uravnoteženo kružno rutiranje radi ovde podrazumevano. Svaki pod prima svoj dio zahtjeva prema broju svojih mikroservisnih instanci, drugim riječima, replika. Istio vam omogućava da ručno promijenite ovaj balans.

Recimo da smo postavili dvije verzije našeg servisa preporuka, preporuka-v1 i preporuka-v2, na OpenShift.
Na sl. Slika 1 pokazuje da kada je svaka usluga predstavljena u jednoj instanci, zahtjevi se ravnomjerno isprepliću između njih: 1-2-1-2-… Ovako radi Kubernetes rutiranje prema zadanim postavkama:

Serija postova na Istio Service Mesh

Ponderisana distribucija između verzija

Na sl. Slika 2 pokazuje šta se dešava ako povećate broj replika v2 servisa sa jedne na dve (ovo se radi pomoću komande oc scale --replicas=2 deployment/recommendation-v2). Kao što možete vidjeti, zahtjevi između v1 i v2 sada su podijeljeni u odnosu jedan prema tri: 1-2-2-1-2-2-…:

Serija postova na Istio Service Mesh

Zanemarite verziju sa Istiom

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

Serija postova na Istio Service Mesh

Ovdje morate obratiti pažnju na ovo: mahune se biraju prema oznakama. U našem primjeru koristi se oznaka v1. Parametar "težina: 100" znači da će 100% prometa biti usmjereno na sve podove usluge koji imaju oznaku v1.

Distribucija direktiva između verzija (Canary Deployment)

Nadalje, koristeći parametar težine, možete usmjeriti promet na oba pod-a, zanemarujući broj mikroservisnih instanci koje se pokreću u svakoj od njih. Na primjer, ovdje direktno usmjeravamo 90% prometa na v1 i 10% na v2:

Serija postova na Istio Service Mesh

Odvojeno rutiranje mobilnih korisnika

U zaključku ćemo pokazati kako natjerati da se promet mobilnih korisnika usmjeri na v2 servis, a svih ostalih korisnika na v1. Da bismo to učinili, koristimo regularne izraze da analiziramo vrijednost korisničkog agenta u zaglavlju zahtjeva:

Serija postova na Istio Service Mesh

Sada je tvoj red

Primjer regularnog izraza za raščlanjivanje zaglavlja trebao bi vas motivirati da istražite vlastite načine primjene Istio pravila rutiranja. Štoviše, mogućnosti su ovdje vrlo opsežne, budući da se vrijednosti zaglavlja mogu formirati u izvornom kodu aplikacija.

I zapamtite da Ops, ne Dev

Sve što smo prikazali u gornjim primjerima radi se bez i najmanje promjene u izvornom kodu, osim u slučajevima kada je potrebno formirati posebna zaglavlja zahtjeva. Istio će biti koristan kako za programere, koji će ga, na primjer, moći koristiti u fazi testiranja, tako i za operatere IT sistema kojima će uvelike pomoći u proizvodnji.

Pa da ponovimo temu ove serije postova: ne morate ništa mijenjati u svom kodu. Nema potrebe za pravljenjem novih slika ili pokretanjem novih kontejnera. Sve je to implementirano van koda.

uključite svoju maštu

Zamislite samo izglede za raščlanjivanje naslova s ​​regularnim izrazima. Želite preusmjeriti svog najvećeg kupca na posebnu verziju vašeg mikrousluge? Lako! Trebate posebnu verziju za Chrome pretraživač? Nema problema! Možete usmjeriti saobraćaj prema gotovo svim njegovim karakteristikama.

Pokušajte sami

Čitanje o Istio-u, Kubernetesu i OpenShift-u je jedna stvar, ali zašto ne dotaknete sve sami? Tim Red Hat Developer Program pripremio detaljan vodič (na engleskom) koji će vam pomoći da savladate ove tehnologije što je brže moguće. Vodič je također 100% otvorenog koda, tako da je u javnom vlasništvu. Datoteka radi na macOS, Linux i Windows, a izvorni kod je dostupan u verzijama Java i node.js (uskoro više jezika). Samo otvorite odgovarajuće git spremište u vašem pretraživaču Red Hat Developer Demo.

U sljedećem postu: lijepo rješavanje problema

Danas ste vidjeli šta Istio pravila rutiranja mogu učiniti. Sada zamislite sve isto, ali samo u odnosu na rukovanje greškama. Upravo o tome ćemo govoriti u sljedećem postu.

izvor: www.habr.com

Dodajte komentar