Ne fillojmë një seri postimesh në të cilat do të demonstrojmë disa nga shumë mundësitë e rrjetit shërbimeve Istio Service Mesh në kombinim me Red Hat OpenShift dhe Kubernetes.

Pjesa e parë, sot:
- Do të shpjegojmë konceptin e kontinerëve sidecar në Kubernetes dhe do të formulojmë motivin e kësaj série postimesh: «nuk keni nevojë të bëni asgjë në kodin tuaj».
- Do të prezantojmë gjënë themelore të Istio – rregullat e drejtimit. Ato shërbejnë si baza për të gjitha mundësitë e tjera të Istio, pasi rregullat lejojnë dërgimin e trafikut te mikroshërbimet, duke përdorur dosje YAML që janë jashtë kodit të shërbimeve. Po ashtu, do të shqyrtojmë skemën e implementimit Canary Deployment. Bonus i Vitit të Ri – 10 sesione interaktive mbi Istio.
Pjesa e dytë, e cila do të publikohen së shpejti, do t'ju tregojë:
- Si Istio implementon Pool Ejection në kombinim me Circuit Breaker dhe do të demonstrojë se si Istio mund të eliminojë nga skema e balancimit një pod që nuk funksionon ose funksionon keq.
- Po ashtu, ne do të shqyrtojmë temën Circuit Breaker nga postimi i parë për të parë se si mund të angazhojmë Istio këtu. Do të tregojmë se si pa asnjë ndryshim në kodin e shërbimeve, të drejtojmë trafikun dhe të trajtojmë gabimet rrjetore me ndihmën e dosjeve konfigurimi YAML dhe komandave të terminalit.
Pjesa e tretë:
- Një tregim mbi gjurmimin dhe monitorimin, të cilat janë tashmë të integruara ose lehtësisht të shtohen në Istio. Do të tregojmë se si të përdorim mjete si Prometheus, Jaeger dhe Grafana në kombinim me shkallëzimin OpenShift, për të menaxhuar pa përpjekje arkitekturën e mikroshërbimeve.
- Kalohet nga monitorimi dhe trajtimi i gabimeve në atë që i sjellim qëllimisht në sistem. Në terma të tjerë, po mësojmë të bëjmë fault injection pa ndryshuar kodin origjinal, që është shumë e rëndësishme për testimin – sepse nëse e ndryshojmë kodin për këtë, ekziston rreziku të sjellim gabime të tjera.
Në fund, në postimin përfundimtar mbi Istio Service Mesh:
- Do të kalojmë në Anën e Errët. Me saktësi, do të mësojmë të përdorim skemën Dark Launch, kur kodi implementohet dhe testohet drejtpërdrejt në të dhënat e prodhimit, por pa ndikuar në funksionimin e sistemit. Këtu, ndihmon shumë aftësia e Istio për të ndarë trafikun. Mundësia për të realizuar teste me të dhënat e jetuara të prodhimit, pa ndikuar në funksionimin e sistemit në punë, është mënyra më e besueshme për verifikim.
- Duke nisur nga Dark Launch, do të tregojmë se si të përdorim modelin Canary Deployment për të reduktuar rreziqet dhe për të thjeshtuar implementimin e kodit të ri. Vetë Canary Deployment nuk është asgjë e re, por Istio e bën të mundur këtë skemë thjesht me ndihmën e dosjeve YAML.
- Në përfundim, do të tregojmë se si me ndihmën e Istio Egress të japim qasje në shërbime atyre që janë jashtë klastreve tuaja, për të angazhuar mundësitë e Istio në punën me internetin.
Pra, le të fillojmë…
Veglat e monitorimit dhe menaxhimit të Istio – gjithçka e nevojshme për koordinimin e mikroshërbimeve në rrjetin e shërbimeve. .
Çfarë është rrjeti i shërbimeve Istio
Rrjeti i shërbimeve realizon për një grup shërbimesh funksione si monitorimi i trafikut, kontrolli i qasjes, zbulimi, siguria, qëndrueshmëria dhe gjëra të tjera të dobishme. Istio lejon ta bëjë këtë pa bërë asnjë ndryshim në kodin e shërbimeve vetë. Çfarë është sekreti i magjisë? Istio i ngjit çdo shërbimi një proxy në formën e një konteneri sidecar (sidecar – karroceri motorr), pas së cilës tërë trafiku për këtë shërbim kalon përmes proxy-t, i cili, duke u drejtuar nga politikash e caktuara, vendos se si, kur dhe nëse ky trafik duhet të arrijë te shërbimi. Istio gjithashtu ofron mundësinë për të realizuar teknika të avancuara DevOps si canary deployments, circuit breakers, fault injection dhe shumë të tjera.
Si punon Istio me kontenierët dhe Kubernetes
Rrjeti i shërbimeve Istio është një implementim sidecar i të gjitha atyre që nevojiten për të ndërtuar dhe menaxhuar mikroshërbime: monitorimi, gjurmimi, circuit breakers, drejtimi, balancimi i ngarkesës, fault injection, përsëritjet, kohëzgjatjet, pasqyrim, kontrolli i qasjes, kufizimi i shkallës dhe shumë të tjera. Edhe pse sot ka shumë biblioteka për të realizuar këto funksione drejtpërdrejt në kod, me Istio mund të merrni gjithçka të njëjtë, pa bërë asnjë ndryshim në kodin tuaj.
Sipas modelit sidecar, Istio ekzekutohet në një kontenier Linux që ndodhet në të njëjtin -pod me shërbimin e kontrolluar dhe implementon (inject) dhe nxjerr (extract) funksionalitetin dhe informacionin sipas konfigurimit të dhënë. Theksojmë, kjo është konfigurimi juaj dhe ajo jeton jashtë kodit tuaj. Prandaj, kodi bëhet shumë më i thjeshtë dhe më i shkurtër.
Gjithashtu, komponenti operacional i mikroshërbimeve nuk është i lidhur me vetë kodin, dhe kështu përdorimi i tyre mund t'i kalojë me qetësi specialistëve IT. Në të vërtetë, përse duhet të përgjigjet zhvilluesi për circuit breaker dhe fault injection? Të reagosh – po, por t’i menaxhosh dhe t’i krijosh? Nëse hiqen të gjitha këto nga kodi, programuesit do të mund të përqendrohen plotësisht në funksionalitetin e aplikacionit. Po ashtu, vetë kodi do të bëhet më i shkurtër dhe më i thjeshtë.
Rrjeti i shërbimeve
Istio, që implementon funksione menaxhimi të mikroshërbimeve jashtë kodit të tyre – është koncepti i rrjetit të shërbimeve Service Mesh. Në fjalë të tjera, kjo është një grup i koordinuar i një ose më shumë binarëve që përbëjnë një rrjet funksionesh rrjetesh.
Si funksionon Istio me mikroshërbimet
Ja si duket bashkëpunimi i konteinerëve sidecar me dhe zgjedhje më të larta: nisni një instancë të Minishift, krijoni një projekt për Istio (le të quhet «istio-system»), instaloni dhe lançoni të gjitha komponentët e lidhur me Istio. Pastaj, ndërsa krijoni projekte dhe pod, shtoni të dhëna konfiguruese në deployment tuaj, dhe pod tuaj fillojnë të përdorin Istio. Diagrami i thjeshtë duket kështu:

Tani mund të ndryshoni konfigurimet e Istio, për shembull, për të organizuar fault injection, mbështetje apo mundësi të tjera Istio – dhe të gjitha këto pa prekur kodin e aplikacioneve vetë. Supozoni se dëshironi të drejtoni gjithë trafikun në internet nga përdoruesit e klientit tuaj më të madh (Foo Corporation) në versionin e ri të faqes. Për këtë, mjafton të krijoni një rregull rruge Istio që do të kërkojë @foocorporation.com në identifikuesin e përdoruesit dhe të kryejë rregullimin përkatës. Për të gjithë përdoruesit e tjerë, asgjë nuk do të ndryshojë. Ndërkohë, do të jeni në gjendje të testoni me qetësi versionin e ri të faqes. Dhe vini re, për këtë nuk është e nevojshme të përfshini zhvilluesit.
A do të kushtojë shumë?
Përkundrazi. Istio funksionon mjaft shpejt, është shkruar në dhe krijon një overhead shumë të vogël. Për më tepër, humbja eventuale në performancën online kompenzohet nga rritja e produktivitetit të zhvilluesve. Të paktën, në teori: mos harroni se koha e zhvilluesve është e kushtueshme. Sa i përket shpenzimeve për softuer, Istio është një softuer me kod të hapur, prandaj mund ta merrni dhe ta përdorni falas.
Mësojeni vetë
Ekipi i Eksperiencës së Zhvilluesve Red Hat ka zhvilluar një praktikë të thelluar për Istio (në anglisht). Funksionon në Linux, MacOS dhe Windows, dhe kodi është i disponueshëm në variantet Java dhe Node.js.
10 mësime interaktive mbi Istio
Blloku 1 — Për fillestarët
Prezantimi në Istio
30 minuta
Njoftohuni me Service Mesh, mësoni si të instaloni Istio në klasterin Kubernetes OpenShift.
Zhvillimi i mikroshërbimeve në Istio
30 minuta
Përdorim Istio për të zhvilluar tre mikroshërbime me Spring Boot dhe Vert.x.
Blloku 2 – nivel mesatar
Monitorimi dhe gjurmimi në Istio
60 minuta
Mësoni mjetet e integruara të monitorimit të Istio, metrikat e konfiguruara dhe gjithashtu OpenTracing përmes Prometheus dhe Grafana.
Rruge e thjeshtë në Istio
60 minuta
Mësojmë të menaxhojmë rruget në Istio me rregulla të thjeshta.
Rregulla të avancuara të rrugeve
60 minuta
Njoftohuni me rruget e zgjuara në Istio, menaxhimin e qasjes, balancimin e ngarkesës dhe kufizimin e shpejtësisë.
Blloku 3 – përdorues i avancuar
Fault Injection në Istio
60 minuta
Mësoni skenarët e menaxhimit të dështimeve në aplikacione të shpërndara, duke krijuar gabime HTTP dhe vonesa rrjetesh, mësojmë të përdorim inxhinierinë e kaosit për rikuperimin e mjedisit.
Circuit Breaker në Istio
30 minuta
Instaloni Siege për testimin e stresit të faqeve dhe mësojmë si të sigurojmë qëndrueshmërinë e backend-it me ringjallje, circuit breaker dhe pool ejection.
Egress dhe Istio
10 minuta
Përdorni rrugët Egress për të krijuar rregulla për ndërveprimin e shërbimeve në brendësi me API dhe shërbimet e jashtme.
Istio dhe Kiali
15 minuta
Mësojmë të përdorim Kiali për të marrë një panoramë të përgjithshme të rrjetit të shërbimeve dhe për të studiuar flukset e kërkesave dhe të dhënave.
Mutual TLS në Istio
15 minuta
Krijoni Istio Gateway dhe VirtualService, pastaj studiojmë me detaje mutual TLS (mTLS) dhe konfigurimet e tij.
Blloku 3.1 — Thellim: Istio Service Mesh për mikroshërbime

Çfarë trajton libri:
- Çfarë është rrjeti i shërbimeve service mesh.
- Sistemi Istio dhe roli i tij në arkitekturën e mikroshërbimeve.
- Përdorimi i Istio për zgjidhjen e problemeve të mëposhtme:
- Qëndrueshmëri;
- Rruge;
- Testimi i kaosit;
- Siguria;
- Mblidhen telemetri me mjete gjurmimi, metrikash dhe Grafana.
Seria e artikujve mbi rrjetet e shërbimeve dhe Istio
Provojeni vetë
Ky kjo seri postimesh nuk ka për qëllim të ofrojë një hapje të thellë në botën e Istio. Ne thjesht duam t'ju japim një njohuri mbi konceptin dhe ndoshta t'ju frymëzojmë ta provoni Istio vetë. Kjo mund të bëhet krejtësisht falas, dhe Red Hat ofron të gjitha mjetet e nevojshme për të filluar të mësoni OpenShift, Kubernetes, konteinerët Linux dhe Istio, dmth: , dhe burime të tjera në . Mos e lejoni të presë, filloni sot!
Rregullat e rrugeve Istio: drejtojmë kërkesat e shërbimeve aty ku duhet
dhe janë të shkëlqyera për të siguruar që kërkesat për të маршруtohen në pod-at e duhur. Kjo është një nga qëllimet e ekzistencës së Kubernetes - маршруtimi dhe balancimi i ngarkesës. Dhe çfarë ndodh nëse ju nevojitet një маршруtim më i hollë dhe më i sofistikuar? Për shembull, për të përdorur dy versione të një mikroshërbimi në të njëjtën kohë. Si do të ndihmojnë rregullat e маршруtimit të Istio Route Rules këtu?
Rregullat e маршруtimit janë rregulla, të cilat, në thelb, përcaktojnë zgjedhjen e маршруtimit. Pavarësisht nga niveli i komplikuar i sistemit, parimi themelor i funksionimit të këtyre rregullave mbetet i thjeshtë: kërkesat маршруtohen mbi bazën e parametrave të caktuar dhe vlerave të titujve HTTP.
Le të shohim disa shembuj:
Kubernetes në parazgjedhje: triviale "50 me 50"
Në shembullin tonë, ne do të tregojmë si të përdorim në OpenShift dy versione të mikroshërbimit, t'i quajmë ato v1 dhe v2. Çdo version ekzekutohet në pod-in e vet Kubernetes, dhe në parazgjedhje këtu funksionon balancimi i ngarkesës në cikël të barabartë (evenly balanced round robin routing). Çdo pod merr pjesën e vet të kërkesave sipas numrit të kopjave të mikroshërbimit të tij, në fjalë, replika. Istio lejon që të ndryshoni këtë ekuilibër manually.
Le të themi se kemi nxitur në OpenShift dy versione të shërbimit tonë të rekomandimeve, recommendation-v1 dhe recommendation-v2.
Në fig. 1 tregohet se, kur çdo shërbim përfaqësohet në një kopje, kërkesat alternohen në mënyrë të barabartë mes tyre: 1-2-1-2-… Kështu punon маршруtimi i Kubernetes në parazgjedhje:

Shpërndarja e peshuar midis versioneve
Në fig. 2 tregohet se çfarë do të ndodhë nëse rritet numri i kopjave të shërbimit v2 nga një në dy (kjo bëhet me komandën oc scale —replicas=2 deployment/recommendation-v2). Siç shohim, kërkesat midis v1 dhe v2 tani ndahen në raportin "një me tre": 1-2-2-1-2-2-…:

Injorimi i versionit me Istio
Istio lejon lehtësisht të ndryshoni shpërndarjen e kërkesave ashtu siç e dëshironi. Për shembull, të dërgoni gjithë trafikun vetëm në recommendation-v1 me ndihmën e skedarit YAML të Istio:

Këtu duhet të keni parasysh se: pod-at zgjidhen sipas etiketimeve. Në shembullin tonë përdoret etiketa v1. Parametri "weight: 100" do të thotë se 100% e trafikut do të маршруtohet në të gjitha pod-at e shërbimit, të cilët kanë etiketën v1.
Shpërndarja e drejtpërdrejtë midis versioneve (Canary Deployment)
Më pas, duke përdorur parametrin weight, mund të dirigjosh trafikun në të dy pod-at, duke injoruar numrin e kopjave të mikroshërbimeve, të cilat janë duke ftuar në secilin nga ato. Për shembull, këtu ne e drejtojmë rregullisht 90% e trafikut në v1 dhe 10% në v2:

Rrugëzim i veçantë për përdoruesit mobilë
Në përfundim, do të tregojmë si të drejtojmë me forcë trafikun e përdoruesve mobilë në shërbimin v2, dhe të gjithë të tjerët në v1. Për këtë, ne analizojmë vlerën e user-agent në titullin e kërkesës përmes shprehjeve të rregullta:

Tani është radha juaj
Shembulli me shprehjet e rregullta për analizimin e titujve duhet t'ju motivojë për të kërkuar opsione të tjera për të aplikuar rregullat e маршруtimit të Istio. Aq më tepër që mundësitë janë shumë të zgjeruara, sepse vlerat e titujve mund të formohen në kodin burimor të aplikacioneve.
Dhe kujtoni, që Ops, jo Dev
Çdo gjë që ne treguam në shembujt e mësipërm bëhet pa ndonjë ndryshim të vogël në kodin burimor, përveç rasteve kur duhet të formojmë tituj të veçantë të kërkesave. Istio do të jetë i dobishëm si për zhvilluesit, të cilët, për shembull, do të mund ta aplikojnë atë në fazën e testimit, ashtu edhe për specialistët e operacioneve të sistemeve IT, të cilët do të ndihmojnë shumë në prodhim.
Prandaj, le të përsërisim lehtësinë e kësaj serie postimesh: ju nuk keni nevojë të ndryshoni asgjë në kodin tuaj. Nuk është e nevojshme të krijoni imazhe të reja ose të filloni kontejnerë të rinj. Të gjitha këto realizohen jashtë kodit.
Aktivizoni imagjinatën tuaj
Mjafton të imagjinoni se çfarë mundësish hap analiza e titujve përmes shprehjeve të rregullta. A dëshironi të drejtoni klientin tuaj më të madh në një version të veçantë të ? Легко! Нужна отдельная версия для браузера Chrome? Не проблема! Вы можете маршрутизировать трафик практически по любой его характеристике.
Provojeni vetë
Leximi mbi Istio, Kubernetes dhe OpenShift është një gjë, por pse të mos e provoni gjithçka me duar? Ekipi përgatiti një udhëzues të detajuar (në anglisht) që do t'ju ndihmojë të zotëroni këto teknologji sa më shpejt. Udhëzuesi gjithashtu është 100% open source, kështu që është në akses të hapur. Skedari punon në macOS, Linux dhe Windows, dhe kodi burimor është në versione për Java dhe node.js (shumë shpejt do të kenë versione në gjuhë të tjera). Thjesht hapni në shfletuesin tuaj depozitën përkatëse git .
Në postimin e ardhshëm: zgjidhim problemet me stil
Sot keni parë se çfarë janë në gjendje rregullat e rrugës Istio. Tani imagjinoni të njëjtën gjë, por në lidhje me përpunimin e gabimeve. Pikërisht për këtë do të flasim në postimin e ardhshëm.
Burimi: habr.com
