Seri postimesh mbi Istio Service Mesh

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

Seri postimesh mbi Istio Service Mesh

Pjesa e parë, sot:

  • Do të shpjegojmë konceptin e konteinerëve sidecar Kubernetes dhe do të formulojmë motivin e kësaj serie postimesh: «nuk keni nevojë të ndryshoni asgjë në kodin tuaj».
  • Do të prezantojmë një element thelbësor të Istio – rregullat e ruterit. Të gjitha mundësitë e tjera të Istio ndërtohen mbi to, pasi rregullat lejojnë që trafiku të drejtohet në mikroshërbime, duke përdorur për këtë qëllim skedarët YAML jashtë kodit të shërbimeve. Po ashtu, do të shqyrtojmë skemën e implementimit të Canary Deployment. Bonus për Vitin e Ri – 10 aktivitete interaktive mbi Istio.


Pjesa e dytë, e cila do të dalë së shpejti, do t'ju tregojë:

  • Si implementon Istio Pool Ejection në kombinim me Circuit Breaker dhe do të demonstrojë se si Istio të heqë mungesën ose keqfunksionimin e pod-it nga skema e balancimit të ngarkesës.
  • Gjithashtu do të shqyrtojmë temën Circuit Breaker nga postimi i parë në lidhje me mënyrën se si mund të angazhojmë Istio. Do të tregojmë se si, pa bërë asnjë ndryshim në kodin e shërbimeve, të rregullojmë trafikun dhe të trajtojmë gabimet e rrjetit me anë të skedarëve të konfigurimit YAML dhe komandave të terminalit.

Pjesa e tretë:

  • Një tregim mbi gjurmimin dhe monitorimin, të cilat janë të integruara ose lehtë mund të shtohen në Istio. Do të tregojmë se si të përdorni mjete si Prometheus, Jaeger dhe Grafana në kombinim me shkallëzimin e OpenShift për të menaxhuar pa mundim arkitekturën mikroshërbimore.
  • Kalohet nga monitorimi dhe trajtimi i gabimeve në atë për të shkaktuar ato në sistem me qëllim. Në terma të tjerë, mësoni të bëni injeksion të gabimeve pa ndryshuar kodin burimor, që është shumë e rëndësishme nga këndvështrimi i testimit — sepse nëse ndryshoni kodin për këtë, ka rrezik të futni gabime të tjera.

Më në fund, në postimin përfundimtar mbi Istio Service Mesh:

  • Do të kalojmë në Anën e Errët. Me fjalë të tjera, do të mësojmë të përdorim skemën Dark Launch, kur kodi implementohet dhe testohet direkt mbi të dhënat e prodhimit, por nuk ndikon në funksionimin e sistemit. Këtu, aftësia e Istio për të ndarë trafikun është shumë e dobishme. Dhe mundësia për të bërë testim mbi të dhënat reale të prodhimit, pa ndikuar në funksionimin e sistemit, është mënyra më bindëse e verifikimit.
  • Duke nga Dark Launch, do të tregojmë se si të përdorim modelin e Canary Deployment për të ulur rreziqet dhe për të lehtësuar integrimin e kodit të ri. Canary Deployment vetë nuk është ndonjë gjë e re, por Istio e lejon këtë skemë vetëm me ndihmën e skedarëve të thjeshtë YAML.
  • Në përfundim, do të tregojmë se si me Istio Egress mund të jepni qasje në shërbime atyre që janë jashtë grupeve tuaja, për të shfrytëzuar mundësitë e Istio kur punoni me internetin.

Pra, le të fillojmë…

Mjetet e monitorimit dhe menaxhimit të Istio – gjithçka e nevojshme për koordinimin e mikroshërbimeve në rrjetin e shërbimeve service mesh.

Çfarë është rrjeti i shërbimeve Istio

Rrjeti i shërbimeve implementon për një grup shërbimesh funksione si monitorimi i trafikut, kontrolli i aksesit, zbulimi, siguria, qëndrueshmëria dhe shumë gjëra të tjera të dobishme. Istio e lejon të bëni të gjitha këto pa bërë asnjë ndryshim në kodin e vetë shërbimeve. Cila është sekreti i magjisë? Istio i lidh çdo shërbim me proksi e tij në formën e një konteineri sidecar (sidecar – është një pajisje që lidhet me një motor), dhe të gjithë trafiku për këtë shërbim kalon përmes proksit, i cili, duke u udhëhequr nga politikat e vendosura, vendos se si, kur dhe nëse ky trafik duhet të arrijë në shërbim. Istio gjithashtu ofron mundësinë për të implementuar teknikë të avancuara DevOps, si canary deployments, circuit breakers, injectimin e defekteve dhe shumë të tjera.

Si funksionon Istio me kontejnerët dhe Kubernetes

Rrjeti i shërbimeve Istio është një implementim sidecar i gjithçkaje që nevojitet për krijimin dhe menaxhimin e mikroshërbimeve: monitorimi, ndjekja, circuit breakers, ruterimi, balancimi i ngarkesës, injectimi i defekteve, përsëritjet, kohët e pritjes, pasqyra, kontrolli i aksesit, kufizimi i shpejtësisë dhe shumë të tjera. Edhe pse sot ka shumë biblioteka për të implementuar këto funksione direkt në kod, me Istio mund të merrni të njëjtat gjëra, pa ndryshuar asgjë në kodin tuaj.

Sipas modelit sidecar, Istio ekzekutohet në një kontejner Linux, i cili ndodhet në të njëjtin Kubernetes-pod me shërbimin e kontrolluar dhe injekton (inject) dhe nxjerr (extract) funksionalitetin dhe informacionin sipas konfigurimit të caktuar. Theksojmë se kjo është konfigurimi juaj dhe ajo jeton jashtë kodit tuaj. Prandaj, kodi bëhet shumë më i thjeshtë dhe më i shkurtër.

Çfarë është e rëndësishme, komponenti operacional i mikroshërbimeve është krejtësisht i palidhur me kodin e vet, që do të thotë që mund t'i kaloni qetësisht eksploatimin e tij specialistëve të IT. Në të vërtetë, pse duhet të përgjigjet zhvilluesi për circuit breaker dhe fault injection? Reagimin – po, por përpunimin dhe krijimin e tyre? Nëse e hiqni gjithçka këtë nga kodet, programuesit do të jenë në gjendje të përqendrohen plotësisht në funksionalitetin aplikativ. Po ashtu, kodi do të bëhet më i shkurtër dhe më i thjeshtë.

Mreža shërbimesh

Istio, i cili realizon funksionet e menaxhimit të mikroshërbimeve jashtë kodit të tyre – është koncepti i mrežës së shërbimeve Service Mesh. Nëse do ta shprehim ndryshe, është një grup i koordinuar i një ose më shumë binarëve, të cilët formojnë një rrjet funksionesh në rrjet.

Si funksionon Istio me mikroshërbimet

Këtu është si duken konteinerët sidecar në lidhje me Kubernetes dhe Minishift nga një këndvështrim më të lartë: aktivizoni një instancë të Minishift, krijoni një projekt për Istio (ta quajmë «istio-system»), instaloni dhe aktivizoni të gjitha komponentet e lidhura me Istio. Pastaj, me kalimin e krijimit të projekteve dhe pod, shtoni informacionin konfiguruese në deployment-t tuaj dhe pod-t tuaj fillojnë të përdorin Istio. Në mënyrë të thjeshtë, diagrami duket kështu:

Seri postimesh mbi Istio Service Mesh

Tani është e mundur të ndryshoni cilësimet e Istio, për shembull, për të organizuar fault injection, mbështetje Shpërndarja Canary ose mundësi të tjera të Istio – dhe të gjitha këto pa e prekur kodin e aplikacioneve vetë. Supozoni se dëshiron të ridrejtojmë të gjithë trafikun në internet nga përdoruesit e klientit tuaj më të madh (Foo Corporation) në versionin e ri të faqes. Mjafton të krijoni një rregull rrugëzimi në Istio që do të kërkojë @foocorporation.com në identifikuesin e përdoruesit dhe të bëjë ridrejtimin përkatës. Për të gjithë përdoruesit e tjerë asgjë nuk do të ndryshojë. Ndërkohë, ju do të jeni në gjendje të testoni qetësisht versionin e ri të faqes. Dhe vini re, për këtë nuk është e nevojshme të angazhoni zhvilluesit.

Dhe, a do të jetë e shtrenjtë për këtë?

Aspak. Istio punon mjaft shpejt, ai është shkruar në Go dhe krijon një overhead shumë të vogël. Për më tepër, humbja e mundshme në performancën online kompensohet nga rritja e produktivitetit të zhvilluesve. Të paktën, në teori: mos harroni se koha e zhvilluesve është e shtrenjtë. Sa i përket kostove të softuerit, Istio është një softuer me kod të hapur, prandaj mund ta merrni dhe ta përdorni falas.

Merrni kontrollin vetë

Ekipa e Red Hat Developer Experience Team krijoi një praktikë të thelluar manual për Istio (në anglisht). Funksionon në Linux, MacOS dhe Windows, dhe kodi është i disponueshëm në versione për Java dhe Node.js.

10 seanca interaktive mbi Istio

Blloku 1 - Për fillestarët

Hyrja në Istio
30 minuta
Njoftohemi me Service Mesh, mësojmë të instalojmë Istio në clusterin Kubernetes në OpenShift.
Filloni

Zhvillimi i mikroshërbimeve në Istio
30 minuta
Përdorim Istio për të zhvilluar tre mikroshërbime me Spring Boot dhe Vert.x.
Filloni

Blloku 2 - nivel i mesëm

Monitorimi dhe gjurmimi në Istio
60 minuta
Eksplorojmë mjetet e integruara të monitorimit të Istio, metrikat e konfiguroshme dhe gjithashtu OpenTracing përmes Prometheus dhe Grafana.
Filloni

Routimi i thjeshtë në Istio
60 minuta
Mësojmë të menaxhojmë routimin në Istio me rregulla të thjeshta.
Filloni

Rregullat e avancuara të routimit
60 minuta
Njoftohemi me routimin inteligjent në Istio, menaxhimin e aksesit, balancimin e ngarkesës dhe kufizimin e shpejtësisë.
Filloni

Blloku 3 - Përdorues i avancuar

Injekcioni i gabimeve në Istio
60 minuta
Studjojmë skenarët e trajtimit të dështimeve në aplikacionet e shpërndara, krijojmë gabime HTTP dhe vonesa rrjeti, mësojmë të aplikojmë inxhinierinë e kaosit për të rikuperuar mjedisin.
Filloni

Circuit Breaker në Istio
30 minuta
Instalojmë Siege për testimin e stresit të faqeve dhe mësojmë si të sigurojmë qëndrueshmërinë e backend me përsëritje, circuit breaker dhe pool ejection.
Filloni

Egress dhe Istio
10 minuta
Përdorim rrugët Egress për të krijuar rregulla për bashkëveprimet e shërbimeve të brendshme me API-të dhe shërbimet e jashtme.
Filloni

Istio dhe Kiali
15 minuta
Mësojmë të përdorim Kiali për të marrë një pasqyrë të përgjithshme të rrjetit të shërbimeve dhe për të studiuar rrjedhat e kërkesave dhe të dhënave.
Filloni

Mutual TLS në Istio
15 minuta
Krijojmë Istio Gateway dhe VirtualService, më pas studiojmë hollësisht mutual TLS (mTLS) dhe konfigurimet e tij.
Filloni

Blloku 3.1 - Shkëputje e thellë: Istio Service Mesh për mikroshërbime

Seri postimesh mbi Istio Service Mesh
Për çfarë është libri:

  • Çfarë është rrjeti i shërbimeve service mesh.
  • Sistemi Istio dhe roli i tij në arkitekturën mikroshërbimore.
  • Përdorimi i Istio për të zgjidhur problemet e mëposhtme:
    • Qëndrueshmërinë;
    • Routimi;
    • Testimi i kaosit;
    • Siguria;
    • Mblidhja e telemetrisë përmes ndjekjes, metrikeve dhe Grafana.

Shkarko librin

Seria e artikujve mbi rrjetet e shërbimeve dhe Istio

Provoje vetë

Kjo seri postimesh nuk ka për qëllim të ofrojë një zhytje të thellë në botën e Istio. Thjesht do të doja t'ju njoh me konceptin dhe ndoshta t'ju inkurajoj të provoni Istio vetë. Kjo mund të bëhet plotësisht falas, dhe Red Hat ofron të gjitha mjetet e nevojshme për të filluar mësimin mbi OpenShift, Kubernetes, konteinerët Linux dhe Istio, domethënë: Red Hat Developer OpenShift Container Platform, udhëzuesi ynë për Istio dhe burime të tjera në mikro-sitit tonë për Service Mesh. Mos hezitoni, filloni sot!

Rregullat e routingut në Istio: drejtojmë kërkesat e shërbimit aty ku duhet

OpenShift dhe Kubernetes përballen shkëlqyeshëm me faktin që kërkesat për mikrosherbimet kanë rrugëzuar në pod-at e duhur. Kjo është një nga qëllimet e ekzistencës së Kubernetes – rrugëzimi dhe balancimi i ngarkesës. Po sikur të kishit nevojë për një rrugëzim më të hollësishëm dhe të sofistikuar? Për shembull, duke përdorur dy versione të mikrosherbimit në të njëjtën kohë. Si do ta ndihmojnë këtu rregullat e routingut Istio Route Rules?

Rregullat e routingut janë rregulla që caktuan, në thelb, zgjedhjen e rrugës. Pavarësisht nga niveli i kompleksitetit të sistemit, parimi i përgjithshëm i funksionimit të këtyre rregullave mbetet i thjeshtë: kërkesat rrugëzohen në bazë të 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 dy versione të mikrosherbimit në OpenShift, që i quajmë v1 dhe v2. Çdo version ekzekutohet në pod-in e tij Kubernetes, dhe për parazgjedhje këtu funksionon një routing i balancuar më rrethore (evenly balanced round robin routing). Secili pod merr pjesën e tij të kërkesave në përputhje me numrin e instancave të mikrosherbimit, në fjalë, replika. Istio gjithashtu lejon të ndryshoni këtë balancë manualisht.

Supozoni se ne kemi shpërndarë në OpenShift dy versionet e shërbimit tonë të rekomandimeve, recommendation-v1 dhe recommendation-v2.
Në fig. 1, duket se, kur çdo shërbim përfaqësohet në një ekzemplar, kërkesat ndahen në mënyrë të barabartë midis tyre: 1-2-1-2-… Kështu funksionon rrugëzimi Kubernetes me parametra të paracaktuar:

Seri postimesh mbi Istio Service Mesh

Përhapja e peshuar midis versioneve

Në fig. 2 tregohet se çfarë do të ndodhë nëse rritet numri i replikave 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ë në tre': 1-2-2-1-2-2-…:

Seri postimesh mbi Istio Service Mesh

Injoroni versionin me Istio

Istio lejon të ndryshoni lehtësisht shpërndarjen e kërkesave në mënyrën që ne dëshirojmë. Për shembull, dërgoni tërë trafikun vetëm në recommendation-v1 me dokumentin e mëposhtëm yaml të Istio:

Seri postimesh mbi Istio Service Mesh

Këtu duhet të vërehet ky detaj: pod'ët zgjidhen sipas etiketave. Në shembullin tonë përdoret etiketë v1. Parametri 'weight: 100' do të thotë se 100% e trafikut do të rrjedhë në të gjithë pod'ët e shërbimit që kanë etiketën v1.

Përhapje e drejtuar midis versioneve (Canary Deployment)

Më tej, duke përdorur parametrin weight, mund të drejtojmë trafikun ndaj të dy pod'ëve, pa e marrë parasysh numrin e ekzemplarëve të mikroshërbimeve të lancuara në secilin prej tyre. Për shembull, këtu ne e drejtojmë në mënyrë të drejtuar 90% të trafikut në v1 dhe 10% në v2:

Seri postimesh mbi Istio Service Mesh

Rrugëzimi i veçantë për përdoruesit mobilë

Në përfundim, do të tregojmë se si të detyrojmë rrugëzimin e trafikut të përdoruesve mobilë në shërbimin v2, ndërsa të tjerët në v1. Për këtë, analizojmë vlerën e user-agent në kabllon e kërkesës duke përdorur shprehje të rregullta:

Seri postimesh mbi Istio Service Mesh

Tani është radha juaj

Shembulli me shprehjet e rregullta për analizimin e kabllove duhet të ju motivojë për të kërkuar mënyra të tjera për të aplikuar rregullat e rrugëzimit Istio. Veçanërisht duke qenë se mundësitë këtu janë shumë të gjera, sepse vlerat e kabllove mund të formohen në kodin burimor të aplikacioneve.

Dhe mos harroni, Ops, jo Dev

Të gjitha ato që kemi treguar në shembujt e mësipërm bëhen pa asnjë ndryshim në kodin burimor, përveç rasteve kur duhet të formojmë kabllot e veçanta të kërkesave. Istio do të jetë i dobishëm për zhvilluesit, që për shembull, mund ta përdorin atë gjatë fazës së testimit, si dhe për specialistët e funksionimit të sistemeve IT, të cilët do t'i ndihmojë shumë në prodhim.

Pra, le të përsërisim motivin kryesor të kësaj serie postesh: ju nuk keni nevojë të ndryshoni asgjë në kodin tuaj. Nuk e nevojitet të krijoni imazhe të reja ose të aktivizoni kontejnerë të rinj. E gjithë kjo realizohet jashtë kodit.

Aktivizoni imagjinatën

Mendoni për perspektivat që ofron analiza e titujve me ndihmën e shprehjeve të zakonshme. Doni të redirigjoni klientin tuaj më të madh në një version të veçantë? mikroshërbimeve? Легко! Нужна отдельная версия для браузера Chrome? Не проблема! Вы можете маршрутизировать трафик практически по любой его характеристике.

Provoje vetë

Të lexosh për Istio, Kubernetes dhe OpenShift – është një gjë, por pse të mos e provosh gjithçka me duar? Ekipi Programi i Zhvilluesve të Red Hat ka përgatitur një udhëzues të detajuar (në anglisht), që do t'ju ndihmojë të zotëroni këto teknologji sa më shpejt. Udhëzuesi është gjithashtu 100% open source, prandaj është në dispozicion publik. Skedari funksionon në macOS, Linux dhe Windows, ndërsa kodi burimor është në variante Java dhe node.js (shpejt do të jenë versione edhe në gjuhë të tjera). Thjesht hapni në shfletuesin tuaj depozitën përkatëse git Demo e Zhvilluesve të Red Hat.

Në postimin e ardhshëm: trajtojmë problemet me stil

Sot keni parë se çfarë mund të bëjnë rregullat e ruterimit Istio. Tani imagjinoni të gjithë këtë, por në lidhje me trajtimin e gabimeve. Këtë do të diskutojmë në postimin e ardhshëm.

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster