
Shën. përkth.: Shërbimet mesh kanë filluar të jenë një zgjidhje e njohur në infrastrukturën moderne për aplikacione që ndjekin arkitekturën mikroshërbimore. Ndërsa Istio mund të jetë në mendjen e shumë inxhinierëve DevOps, është një produkt mjaft i ri, i cili, duke qenë kompleks sa i përket mundësive që ofron, mund të kërkojë një kohë të konsiderueshme për t'u njohur. Inxhinieri gjerman Rinor Maloku, i cili është përgjegjës për llogaritjet në re për klientët e mëdhenj në kompaninë e telekomunikacionit Orange Networks, ka shkruar një cikël të shkëlqyer materialesh që lejojnë një zhytje të shpejtë dhe të thellë në Istio. Ai fillon tregimin e tij me atë se çfarë mund të bëjë Istio dhe si mund ta shohim atë shpejt me sy.
Istio â NjĂ« projekt Open Source, i zhvilluar nĂ« bashkĂ«punim me ekipet nga Google, IBM dhe Lyft. Ai zgjidh komplikacionet qĂ« paraqiten nĂ« aplikacionet e bazuara nĂ« mikroshĂ«rbime, tĂ« tilla si:
- Menaxhimi i trafikut: skadencat, përpjekjet e përsëritura, balancimi i ngarkesës;
- Siguria: autentikimi dhe autorizimi i përdoruesit fundor;
- Vëzhgueshmëria: gjurmimi, monitorimi, regjistrimi.
Të gjitha ato mund të zgjidhen në nivelin e aplikacionit, megjithatë pas kësaj shërbimet tuaja do të ndalojnë së qenuri "mikro". Të gjitha përpjekjet shtesë për të zgjidhur këto probleme paraqesin një kosto të tepërt për burimet e kompanisë, të cilat mund të përdoren drejtpërdrejt për vlerat e biznesit. Le të marrim një shembull:
Menaxheri i projekteve: Sa kohë duhet për të shtuar mundësinë e reagimit?
Programuesi: Dy sprintet.MP: ĂfarĂ«?.. Kjo Ă«shtĂ« vetĂ«m CRUD!
P: TĂ« bĂ«sh CRUD Ă«shtĂ« pjesa e thjeshtĂ« e detyrĂ«s, por na nevojitet gjithashtu tĂ« autentikojmĂ« dhe autorizojmĂ« pĂ«rdoruesit dhe shĂ«rbimet. Duke qenĂ« se rrjeta Ă«shtĂ« jo e besueshme, do tĂ« na duhet tĂ« zbatojmĂ« kĂ«rkesa tĂ« pĂ«rsĂ«ritura, si dhe nĂ« klientĂ«t. Gjithashtu, pĂ«r tĂ« siguruar qĂ« sistemi tĂ« mos bjerĂ«, do tĂ« na nevojiten skadencat dhe (mĂ« shumĂ« rreth tĂ« dy shkallĂ«ve tĂ« pĂ«rmendura do tĂ« gjeni mĂ« vonĂ« nĂ« artikull â shĂ«nim i pĂ«rkthyesit), dhe pĂ«r tĂ« zbuluar probleme, do tĂ« nevojitet monitorimi, gjurmimi, [âŠ]MP: Oh, atĂ«herĂ« le ta vendosim kĂ«tĂ« funksionalitet thjesht nĂ« shĂ«rbimin Product.
Mendoj se ideja është e qartë: volumi i hapave dhe përpjekjeve që kërkohet për të shtuar një shërbim është i madh. Në këtë artikel do të shqyrtojmë se si Istio i heq të gjitha këto komplekse (që nuk janë të destinuara për logjikën e biznesit) nga shërbimet.

Shënim: Artikulli supozon se keni njohuri praktike mbi Kubernetes. Në të kundërt, rekomandoj të lexoni dhe vetëm pas kësaj të vazhdoni me leximin e këtij materiali.
Ideja e Istio
Në një botë pa Istio, një shërbim bën kërkesa direkte te shërbimi tjetër dhe në rast dështimi, shërbimi duhet të trajtojë vetë këtë: të përpiqet përsëri, të parashikojë një skadim, të hapë një circuit breaker etj.

Trafiku rrjetor në Kubernetes
Istio ofron një zgjidhje të specializuar, plotësisht të ndarë nga shërbimet dhe funksionon duke ndërhyrë në ndërveprimin rrjetor. Kështu, implementon:
- Qëndrueshmëri: duke u mbështetur në kodin e statusit në përgjigje, ai kupton nëse ndodhi një dështim në kërkesë dhe e përsërit atë.
- Zbatimi kanarin: drejton një përqindje të caktuar të kërkesave në versionin e ri të shërbimit.
- Monitorimi dhe metrikat: sa kohë mori shërbimi për të përgjigjur?
- Trazimi dhe vëzhgueshmëria: shton tituj të veçantë në çdo kërkesë dhe i ndjek ato në klaster.
- Siguria: nxjerr tokenin JWT, autentifikon dhe autorizon përdoruesit.
Këto janë vetëm disa nga mundësitë (në të vërtetë, vetëm disa!), për t'ju intriguar. Tani le të thellohemi në detajet teknike!
Arkitektura e Istio
Istio kap të gjithë trafikun rrjetor dhe i aplicon një grup rregullash, duke futur në çdo pod një proksi inteligjent në formën e një kontejneri sidecar. Proksitë, të cilat aktivizojnë të gjitha mundësitë, formojnë Data Plane, dhe ato mund të konfigurohen dinamikisht me anë të Control Plane.
Data Plane
Proksitë e futur në podë e lejojnë Istio të përputhet lehtësisht me kërkesat tona. Për shembull, le të kontrollojmë funksionet e përpjekjeve të përsëritura dhe të circuit breaker.

Si implementohen retries dhe circuit breaking në Envoy
Për të përmbledhur:
- Envoy (po flasim pĂ«r proksin qĂ« ndodhet nĂ« kontejnerin sidecar, i cili shpĂ«rndahet gjithashtu si â shĂ«n. pĂ«rkth.) dĂ«rgon kĂ«rkesĂ«n nĂ« instancĂ«n e parĂ« tĂ« shĂ«rbimit B dhe ndodh njĂ« dĂ«shtim.
- Envoy Sidecar bën një përpjekje të përsëritur (retry). (1)
- Kërkesa me dështim kthehet në proksin që e ka kërkuar.
- Kjo është mënyra si hapet Circuit Breaker dhe ndodh thirrja e shërbimit tjetër për kërkesat në vazhdim. (2)
Kjo do të thotë se nuk do t'ju duhet të përdorni një bibliotekë tjetër Retry, nuk do t'ju duhet të bëni implementimin tuaj të Circuit Breaking dhe Service Discovery në gjuhën e programimit X, Y ose Z. Të gjitha këto dhe shumë të tjera janë në dispozicion nga kutia në Istio dhe nuk kërkojnë asnjë ndryshim në kod.
Shkëlqyer! Tani mund të dëshironi të shkoni në një aventurë me Istio, por ende ka disa dyshime, pyetje të hapura. Nëse kjo është një zgjidhje universale për çdo rast, atëherë lind një dyshim i arsyeshëm: A janë të tilla zgjidhje në të vërtetë të përshtatshme për ndonjë rast të caktuar?
Dhe tani, më në fund do të pyesni: «A është e konfigurueshme?»
Tani jeni gati pĂ«r njĂ« udhĂ«tim detar â dhe le tĂ« njohim Control Plane.
Control Plane
Ai pĂ«rbĂ«het nga tre komponentĂ«: Pilot, Mixer dhe Citadel, â tĂ« cilat sĂ« bashku konfigurojnĂ« Envoy't pĂ«r rregullimin e trafikut, aplikojnĂ« politikat dhe mbledhin tĂ« dhĂ«nat telemetrike. NĂ« mĂ«nyrĂ« schematike, e gjithĂ« kjo duket kĂ«shtu:

Ndërveprimi i Control Plane me Data Plane
Envoy't (dmth. data plane) janë konfiguruar me help of (Definicione të Burimit të Personalizuar), të përcaktuara nga Istio dhe të dizajnuara posaçërisht për këtë qëllim. Për ju, kjo do të thotë se ato paraqiten si një burim tjetër në Kubernetes me sintaksë të njohur. Pas krijimit, ky burim do të merret nga control plane dhe do të aplikohet në Envoy't.
Marrëdhënia e shërbimeve me Istio
Kemi përshkruar marrëdhënien e Istio me shërbimet, por jo anën tjetër: si i shohin shërbimet Istio-n?
Sinqerisht, shĂ«rbimet e dinĂ« pĂ«r ekzistencĂ«n e Istio-s ashtu si peshqit e dinĂ« pĂ«r ujin, kur pyesin veten: «ĂfarĂ« Ă«shtĂ« nĂ« tĂ« vĂ«rtetĂ« uji?».

Ilustrimi : â Si tĂ« duket uji? â ĂfarĂ« Ă«shtĂ« nĂ« tĂ« vĂ«rtetĂ« uji?
Kështu që, mund të merrni një klasër funksional dhe pas vendosjes së komponentëve të Istio, shërbimet që ndodhen në të do të vazhdojnë të punojnë, dhe pasi të hiqen këto komponentë, gjithçka do të jetë përsëri në rregull. E kuptueshme, në këtë rast do të humbni mundësitë që ofron Istio.
Mjaft me teorinĂ« â le ta çojmĂ« kĂ«tĂ« dituri nĂ« praktikĂ«!
Istio në praktikë
Istio kërkon një klasër Kubernetes, në të cilin si minimale duhet të jenë të disponueshme 4 vCPU dhe 8 GB RAM. Për të ngritur shpejt një klasër dhe për të ndjekur udhëzimet nga artikulli, rekomandoj të përdorni Google Cloud Platform, e cila ofron përdoruesve të rinj .
Pas krijimit të klasterit dhe konfigurimit të qasjes në Kubernetes përmes utilitarit të konsolës, mund të instaloni Istio përmes menaxherit të paketave Helm.
Instalimi i Helm
Instaloni klientin Helm në kompjuterin tuaj, siç e përshkruajnë në . Ne do ta përdorim për të gjeneruar template për instalimin e Istio në seksionin e ardhshëm.
Instalimi i Istio
Shkarkoni burimet e Istio nga (linku origjinal i autorit pĂ«r versionin 1.0.5 Ă«shtĂ« ndryshuar pĂ«r nĂ« versionin aktual, dmth 1.0.6 â shĂ«n. pĂ«rk.)., nxirrni pĂ«rmbajtjen nĂ« njĂ« direktor tĂ« vetĂ«m, tĂ« cilin do ta quaj [istio-resources].
Për të identifikuar lehtësisht burimet e Istio, krijoni një hapësirë emri në klasterin K8s istio-system:
$ kubectl create namespace istio-systemPërfundoni instalimin duke shkuar në katalogun [istio-resources] dhe duke ekzekutuar komandën:
$ helm template install/kubernetes/helm/istio
--set global.mtls.enabled=false
--set tracing.enabled=true
--set kiali.enabled=true
--set grafana.enabled=true
--namespace istio-system > istio.yamlKjo komandë do të prodhojë komponentët kyç të Istio në skedarin istio.yaml. Ne e kemi modifikuar template-n standard sipas nevojave tona, duke caktuar parametrat si më poshtë:
-
global.mtls.enabledcaktuar nĂ«false(dmth, autentikimi mTLS Ă«shtĂ« çaktivizuar â shĂ«n. pĂ«rk.), pĂ«r tĂ« thjeshtuar procesin tonĂ« tĂ« njohjes; -
tracing.enabledaktivizon gjurmimin e kërkesave përmes Jaeger; -
kiali.enabledinstalon Kiali në klaster për vizualizimin e shërbimeve dhe trafikëve; -
grafana.enabledinstalon Grafana për vizualizimin e metrikave të mbledhura.
Do ta aplikojmë burimin e gjeneruar me komandën:
$ kubectl apply -f istio.yamlInstalimi i Istio në klaster ka përfunduar! Prisni derisa të gjitha pod-et në hapësirën e emrit istio-system të jenë në gjendje Running ose Përfunduar, duke ekzekutuar komandën më poshtë:
$ kubectl get pods -n istio-systemTani jemi të gatshëm të vazhdojmë në seksionin e ardhshëm, ku do të ngremë dhe ekzekutojmë aplikacionin.
Arkitektura e Aplikacionit të Analizës së Sentimentit
Do tĂ« pĂ«rdorim shembullin e aplikacionit mikro-shĂ«rbimeve tĂ« AnalizĂ«s sĂ« Sentimentit, qĂ« Ă«shtĂ« pĂ«rdorur nĂ« artikullin e pĂ«rmendur mĂ« parĂ« . ĂshtĂ« mjaft komplekse pĂ«r tĂ« demonstruar mundĂ«sitĂ« e Istio nĂ« praktikĂ«.
Aplikacioni përbëhet nga katër mikro-shërbime:
- Shërbimi SA-Frontend, i cili shërben frontend-in e aplikacionit në Reactjs;
- Shërbimi SA-WebApp, i cili trajton kërkesat për Analizën e Sentimentit;
- Shërbimi SA-Logic, i cili ekzekuton vetë ;
- Shërbimi SA-Feedback, i cili merr reagime nga përdoruesit mbi saktësinë e analizës së kryer.

Në këtë diagramë, përveç shërbimeve, ne gjithashtu shohim Ingress Controller, i cili në Kubernetes rregullon kërkesat e ardhshme në shërbimet përkatëse. Në Istio përdoret një koncept i ngjashëm në kuadër të Ingress Gateway, detajet e të cilit do të vijojnë.
Nisja e aplikacionit me proxy nga Istio
Për operacionet e mëtejshme të përmendura në artikull, klononi depozitat e duhura për vete . Në të gjenden aplikacioni dhe manifestet për Kubernetes dhe Istio.
Vendosja e sidecarâĂ«ve
Vendosja mund të bëhet automatikisht ose duke e bërë këtë manualisht. Për vendosjen automatike të kontejnerëve sidecar, do të nevojitet të caktoni një etiketë në hapësirën e emrave istio-injection=enabled, e cila bëhet me komandën e mëposhtme:
$ kubectl label namespace default istio-injection=enabled
namespace/default labeledTani çdo pod që do të zhvillohet në hapësirën e emrave për default (default) do të marrë kontejnerin e tij sidecar. Për t'u siguruar për këtë, le të vendosim një aplikacion testues duke kaluar në katalogun rrënjor të depozitës [istio-mastery] dhe duke ekzekutuar komandën e mëposhtme:
$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app createdPasi zhvillohen shĂ«rbimet, le tĂ« kontrollojmĂ« qĂ« podâĂ«t tĂ« kenĂ« dy kontejnerĂ« (me shĂ«rbimin vetĂ« dhe sidecarâin e tij), duke ekzekutuar komandĂ«n kubectl get pods dhe duke u siguruar qĂ« nĂ« kolonĂ«n READY Ă«shtĂ« e shĂ«nuar vlera 2/2, simbolizojnĂ« qĂ« tĂ« dy kontejnerĂ«t janĂ« tĂ« ngarkuar:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sa-feedback-55f5dc4d9c-c9wfv 2/2 Running 0 12m
sa-frontend-558f8986-hhkj9 2/2 Running 0 12m
sa-logic-568498cb4d-2sjwj 2/2 Running 0 12m
sa-logic-568498cb4d-p4f8c 2/2 Running 0 12m
sa-web-app-599cf47c7c-s7cvd 2/2 Running 0 12mVizualisht, kjo paraqitet kështu:

Proxy Envoy nĂ« njĂ« nga podâĂ«t
Tani, kur aplikacioni është ngritur dhe funksionon, ne do të duhet të lejojmë që trafik i ardhshëm të vijë në aplikacion.
Ingress Gateway
Praktika më e mirë për të arritur këtë (të lejojmë trafik në klaster) është përmes Ingress Gateway në Istio, i cili ndodhet në "kufirin" e klasterit dhe lejon që të aktivizohen për trafikun e ardhshëm funksionalitete të tilla të Istio si rregullimi, balancimi i ngarkesës, siguria dhe mbikëqyrja.
Komponenti Ingress Gateway dhe shërbimi që e kalon atë jashtë janë instaluar në klaster gjatë instalimit të Istio. Për të mësuar adresën IP të jashtme të shërbimit, ekzekutoni:
$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME TYPE CLUSTER-IP EXTERNAL-IP
istio-ingressgateway LoadBalancer 10.0.132.127 13.93.30.120Ne do të vazhdojmë të aksesojmë aplikacionin përmes këtij IP dhe më pas (do ta quaj atë si EXTERNAL-IP), kështu që për lehtësi, do ta regjistrojmë vlerën në një variabël:
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')Nëse provoni tani të hyni në këtë IP përmes shfletuesit, do të merrni një gabim të Shërbimit të Pashfrytëzuar, sepse nga default, Istio bllokon të gjithë trafikun e hyrjes, derisa të definohet Gateway.
Burimi Gateway
Gateway është një CRD (Përcaktimi i Burimeve të Personalizuara) në Kubernetes, i caktuar pas instalimit të Istio në klustër dhe aktivizon mundësinë për të specifikuar portet, protokollin dhe hostet për të cilat dëshirojmë të lejojmë trafikun e hyrjes.
Në rastin tonë, dëshirojmë të lejojmë trafikun HTTP në portin 80 për të gjitha hostet. Detyra realizohet me këtë definicion ():
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"Kjo konfigurim nuk ka nevojë për shpjegim përveç selektorit istio: ingressgateway. Me këtë selektor ne mund të tregojmë se në cilin Ingress Gateway të aplikojmë konfigurimin. Në rastin tonë, ai është kontrolluesi i Ingress Gateway që është instaluar si default në Istio.
Konfigurimi aplikohet duke thirrur komandën në vijim:
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway createdTani gateway lejon akses në portin 80, por nuk ka njohuri se ku të rregullojë kërkesat. Për këtë do të nevojiten Shërbime Virtuale.
Burimi VirtualService
VirtualService i tregon Ingress Gateway se si të rregullojë kërkesat që janë të lejuara brenda klustrit.
Kërkesat për aplikacionin tonë, që vijnë përmes http-gateway, duhet të dërgohen në shërbimet sa-frontend, sa-web-app dhe sa-feedback:

Rrugët që duhet të konfigurohen me VirtualServices
Le të shqyrtojmë kërkesat që duhet të dërgohen në SA-Frontend:
- Përputhje e saktë në rrugë
/duhet të dërgohet në SA-Frontend për të marrë index.html; - Rrugët me prefiks
/static/*duhet të dërgohen në SA-Frontend për të marrë skedarët statikë që përdoren në front-end, si CSS dhe JavaScript; - Rrugët që bien nën shprehjen e rregullt
'^.*.(ico|png|jpg)$', duhet të dërgohen në SA-Frontend, sepse këto janë imazhe që shfaqen në faqe.
Implementimi arrihet me këtë konfigurim ():
lloji: VirtualService metadata: emri: sa-external-services spec: pritës: - "*" porta: - http-gateway # 1 http: - ndeshje: - uri: saktë: \/ - uri: saktë: \/callback - uri: prefiks: \/static - uri: regex: '^.*.(ico|png|jpg) Pikat e rëndësishme:Shënim: Konfigurimi më sipër ruhet në skedarin
- Ky VirtualService i referohet kërkesave që arrijnë përmes http-gateway;
- NĂ«
destinationdefinohet shërbimi ku dërgohen kërkesat.sa-virtualservice-external.yaml, i cili gjithashtu përmban cilësime për rrugëzimin në SA-WebApp dhe SA-Feedback, por është shkurtuar këtu në artikull për shkak të shkurtësisë. Aplikohet VirtualService me thirrjen:$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml virtualservice.networking.istio.io/sa-external-services u krijuaShënim: Kur aplikojmë burimet Istio, Kubernetes API Server krijon një ngjarje, e cila merret nga Istio Control Plane, dhe vetëm pas kësaj konfigurimi i ri aplikohet në serverët proxy Envoy të çdo pod'i. Dhe kontrolluesi i Ingress Gateway paraqitet si një Envoy tjetër, i konfiguruar në Control Plane. Të gjitha këto duken kështu në diagram:
Konfigurimi i Istio-IngressGateway për rrugëzimin e kërkesaveAplikacioni Analiza e Sentimentit është bërë i disponueshëm në
http://{EXTERNAL-IP}/. Mos u shqetĂ«soni nĂ«se merrni statusin Not Found: ndonjĂ«herĂ« ka nevojĂ« pĂ«r pak mĂ« shumĂ« kohĂ« qĂ« konfigurimi tĂ« hyjĂ« nĂ« fuqi dhe cache-t e Envoy tĂ« pĂ«rditĂ«sohen.Para se tĂ« vazhdoni, punoni pak me aplikacionin pĂ«r tĂ« gjeneruar trafik (prania e tij Ă«shtĂ« e nevojshme pĂ«r ilustrimin nĂ« veprimet e ardhshme â shĂ«n. pĂ«rk.).
Kiali: vërejtshmëria
Për të hyrë në ndërfaqen administrative të Kiali, ekzekutoni komandën e mëposhtme:
$ kubectl port-forward $(kubectl get pod -n istio-system -l app=kiali -o jsonpath='{.items[0].metadata.name}') -n istio-system 20001⊠dhe hapni , duke u identifikuar si admin/admin. KĂ«tu do tĂ« gjeni shumĂ« mundĂ«si tĂ« dobishme, pĂ«r shembull, pĂ«r tĂ« verifikuar konfigurimin e komponentĂ«ve tĂ« Istio, pĂ«r tĂ« vizualizuar shĂ«rbimet sipas informacionit tĂ« mbledhur gjatĂ« kapjes sĂ« kĂ«rkesave rrjetĂ«t, pĂ«r tĂ« marrĂ« pĂ«rgjigje nĂ« pyetje si âKush i qaset kujt?â, âNĂ« cilĂ«n version tĂ« shĂ«rbimit ndodhin dĂ«shtime?â etj. NĂ« pĂ«rgjithĂ«si, shqyrtoni mundĂ«sitĂ« e Kiali para se tĂ« kaloni pĂ«rpara â nĂ« vizualizimin e metrikave me Grafana.
Grafana: vizualizimi i metrikave
Metrikat e mbledhura në Istio hyjnë në Prometheus dhe vizualizohen me Grafana. Për të hyrë në ndërfaqen administrative të Grafana, ekzekutoni komandën më poshtë, pastaj hapni :
$ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath={.items[0].metadata.name}) 3000Duke klikuar në menunë Home në majtas lartë dhe duke zgjedhur Istio Service Dashboard në këndin e majtë të sipërm, filloni me shërbimin sa-web-app, për të parë metrikat e mbledhura:
KĂ«tu na pret njĂ« paraqitje e zbrazĂ«t dhe krejt e mĂ«rzitshme â udhĂ«zimi kurrĂ« nuk do ta miratonte kĂ«tĂ«. Le tĂ« krijojmĂ« njĂ« ngarkesĂ« tĂ« vogĂ«l me komandĂ«n e mĂ«poshtme:
$ while true; do curl -i http://$EXTERNAL_IP/sentiment -H "Content-type: application/json" -d '{"sentence": "I love yogobella"}'; sleep .8; doneTani tani tani tani tani tani tani tani tani kahout tĂ« bukur, dhe mbi to â mjete tĂ« shkĂ«lqyera tĂ« Prometheus pĂ«r monitorimin dhe Grafana pĂ«r vizualizimin e metrikave, qĂ« do tĂ« na lejojnĂ« tĂ« dimĂ« pĂ«r performancĂ«n, shĂ«ndetin, pĂ«rmirĂ«simet/degradimin nĂ« punĂ«n e shĂ«rbimeve me kalimin e kohĂ«s.
Së fundmi, le të shohim gjurmimin e kërkesave në shërbime.
Jaeger: gjurmimi
Gjurma na nevojitet, sepse sa më shumë shërbime të kemi, aq më e vështirë bëhet të kuptojmë shkakun e dështimit. Të shohim një rast të thjeshtë nga figura më poshtë:
NjĂ« shembull tipik i njĂ« kĂ«rkese tĂ« dĂ«shtuar rastĂ«sishtKĂ«rkesa vjen, dĂ«shton â çfarĂ« Ă«shtĂ« shkaku? ShĂ«rbimi i parĂ«? Apo i dyti? Ka pĂ«rjashtime nĂ« tĂ« dy - le tĂ« shohim logjet e çdo njĂ«rit. Sa shpesh keni kapur veten me njĂ« veprim tĂ« tillĂ«? Puna jonĂ« Ă«shtĂ« mĂ« shumĂ« si ajo e detektivĂ«ve tĂ« softuerit, sesa ajo e zhvilluesve...
Këto janë probleme tepër të zakonshme në mikrosherbime dhe zgjidhen me sistemet e gjurmimit të shpërndara, ku shërbimet kalojnë një titull unik midis njëra-tjetrës, pas së cilës kjo informacion drejtohet në sistemin e gjurmimit, ku ato lidhen me të dhënat e kërkesës. Ja një ilustrim:
Për identifikimin e kërkesës përdoret TraceIdNë Istio përdoret Jaeger Tracer, i cili realizon një kornizë të pavarur nga prodhuesi OpenTracing API. Qasja në ndërfaqen e përdoruesit të Jaeger mund të bëhet me komandën e mëposhtme:
$ kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686Tani shkoni nĂ« dhe zgjidhni shĂ«rbimin sa-web-app. NĂ«se shĂ«rbimi nuk shfaqet nĂ« menu-nĂ« e rĂ«nĂ« â tregoni/gjeneroni aktivitet nĂ« faqe dhe rifreskoni ndĂ«rfaqen. Pas kĂ«saj klikoni nĂ« butonin Find Traces, i cili do tĂ« tregojĂ« gjurmĂ«t mĂ« tĂ« fundit â zgjidhni cilĂ«ndo â do tĂ« shfaqet informacioni i detajuar pĂ«r tĂ« gjitha gjurmĂ«t:
Kjo gjurmë tregon:
- Kërkesa vjen në istio-ingressgateway (ky është ndërveprimi i parë me një nga shërbimet, dhe për kërkesën gjenerohet ID i Gjurmës), pas së cilës gateway-d drejton kërkesën në shërbimin sa-web-app.
- NĂ« shĂ«rbim sa-web-app kĂ«rkesa kapet nga Envoy sidecar, krijohet njĂ« 'fĂ«mijĂ«' nĂ« span (prandaj e shohim atĂ« nĂ« gjurmĂ«) dhe drejtohet nĂ« kontejner sa-web-app. ( â njĂ« njĂ«sisĂ« logjike e punĂ«s nĂ« Jaeger, e cila ka emrin, kohĂ«n e fillimit tĂ« operacionit dhe zgjatjen e tij. Span'Ă«t mund tĂ« jenĂ« tĂ« ngjitur dhe tĂ« renditur. NjĂ« graf i orientuar aciklik nga span'Ă«t krijon trace. â shĂ«n. pĂ«rk.)
- Këtu, kërkesa përpunohen me metodën sentimentAnalysis. Këto trace janë tashmë të gjeneruara nga aplikacioni, pra, për to ishin të nevojshme ndryshime në kod.
- Në këtë moment, aktivizohet një kërkesë POST në sa-logic. ID e Trace duhet të kalojë nga sa-web-app.
- âŠ
Shënim: Në hapin 4, aplikacioni duhet të shohë titujt e gjeneruar nga Istio dhe t'i kalojë ata në kërkesat e mëpasshme, siç është treguar në imazhin më poshtë:
(A) Kalimi i titujve përgjigjet Istio; (B) Për titujt përgjigjen shërbimetIstio bën punën kryesore, pasi gjeneron tituj për kërkesat hyrëse, krijon span'e të reja në çdo sidecar dhe i kalon ato. Megjithatë, pa punuar me titujt brenda shërbimeve, rruga e plotë e gjurmimit të kërkesës do të humbasë.
Duhet të merren parasysh (kaluar) titujt e mëposhtëm:
x-request-id x-b3-traceid x-b3-spanid x-b3-parentspanid x-b3-sampled x-b3-flags x-ot-span-contextKjo Ă«shtĂ« njĂ« detyrĂ« e thjeshtĂ«, megjithatĂ« pĂ«r tĂ« thjeshtuar realizimin e saj tashmĂ« ekzistojnĂ« â pĂ«r shembull, nĂ« shĂ«rbimin sa-web-app, klienti RestTemplate kalon kĂ«ta tituj, nĂ«se thjesht shton bibliotekat Jaeger dhe OpenTracing nĂ« .
Vini re se aplikacioni Sentiment Analysis tregon implementime në Flask, Spring dhe ASP.NET Core.
Tani, kur është bërë e qartë se çfarë marim nga kutia (ose pothuajse "nga kutia"), le të shqyrtojmë çështjet e routing të hollësishëm, menaxhimin e trafikut të rrjetit, sigurinë etj.!
Shën. përkth.: për këtë lexoni në pjesën tjetër të materialeve mbi Istio nga Rinor Maloku, përkthimet e të cilave do të pasojnë në blogun tonë së shpejti. UPDATE (14 mars): tashmë është publikuar.
P.S. nga përkthyesi
Lexoni gjithashtu në blogun tonë:
- "Kthehu në mikroshërbime me Istio": , ;
- «»;
- «»;
- «»;
- «».
Burimi: habr.com
rruga:
- destinacioni:
host: sa-frontend # 2
porti:
numri: 80
ĂĂ«shtjet kryesore:
- Ky VirtualService i referohet kërkesave që arrijnë përmes http-gateway;
- NĂ«
destinationdefinohet shërbimi ku dërgohen kërkesat.Shënim: Konfigurimi më sipër ruhet në skedarin
sa-virtualservice-external.yaml, i cili gjithashtu përmban konfigurime për routing në SA-WebApp dhe SA-Feedback, por është shkurtuar këtu në artikel për shkak të koncizitetit.Aplikojmë VirtualService me thirrjen:
Shënim: Kur ne përdorim burimet e Istio, Serveri API i Kubernetes krijon një ngjarje, e cila merret nga Istio Control Plane, dhe pas kësaj, konfigurimi i ri aplikohet në proxy-serverët Envoy të çdo pod-i. Dhe kontrolluesi Ingress Gateway paraqitet si një Envoy tjetër, i konfiguruar në Control Plane. E gjithë kjo duket ashtu në diagram:
Konfigurimi i Istio-IngressGateway për rrugëzimin e kërkesaveAplikacioni Analiza e Sentimentit është bërë i disponueshëm në
http://{EXTERNAL-IP}/. Mos u shqetĂ«soni nĂ«se merrni statusin Not Found: ndonjĂ«herĂ« ka nevojĂ« pĂ«r pak mĂ« shumĂ« kohĂ« qĂ« konfigurimi tĂ« hyjĂ« nĂ« fuqi dhe cache-t e Envoy tĂ« pĂ«rditĂ«sohen.Para se tĂ« vazhdoni, punoni pak me aplikacionin pĂ«r tĂ« gjeneruar trafik (prania e tij Ă«shtĂ« e nevojshme pĂ«r ilustrimin nĂ« veprimet e ardhshme â shĂ«n. pĂ«rk.).
Kiali: vërejtshmëria
Për të hyrë në ndërfaqen administrative të Kiali, ekzekutoni komandën e mëposhtme:
⊠dhe hapni , duke u identifikuar si admin/admin. KĂ«tu do tĂ« gjeni shumĂ« mundĂ«si tĂ« dobishme, pĂ«r shembull, pĂ«r tĂ« verifikuar konfigurimin e komponentĂ«ve tĂ« Istio, pĂ«r tĂ« vizualizuar shĂ«rbimet sipas informacionit tĂ« mbledhur gjatĂ« kapjes sĂ« kĂ«rkesave rrjetĂ«t, pĂ«r tĂ« marrĂ« pĂ«rgjigje nĂ« pyetje si âKush i qaset kujt?â, âNĂ« cilĂ«n version tĂ« shĂ«rbimit ndodhin dĂ«shtime?â etj. NĂ« pĂ«rgjithĂ«si, shqyrtoni mundĂ«sitĂ« e Kiali para se tĂ« kaloni pĂ«rpara â nĂ« vizualizimin e metrikave me Grafana.
Grafana: vizualizimi i metrikave
Metrikat e mbledhura në Istio hyjnë në Prometheus dhe vizualizohen me Grafana. Për të hyrë në ndërfaqen administrative të Grafana, ekzekutoni komandën më poshtë, pastaj hapni :
Duke klikuar në menunë Home në majtas lartë dhe duke zgjedhur Istio Service Dashboard në këndin e majtë të sipërm, filloni me shërbimin sa-web-app, për të parë metrikat e mbledhura:
KĂ«tu na pret njĂ« paraqitje e zbrazĂ«t dhe krejt e mĂ«rzitshme â udhĂ«zimi kurrĂ« nuk do ta miratonte kĂ«tĂ«. Le tĂ« krijojmĂ« njĂ« ngarkesĂ« tĂ« vogĂ«l me komandĂ«n e mĂ«poshtme:
Tani tani tani tani tani tani tani tani tani kahout tĂ« bukur, dhe mbi to â mjete tĂ« shkĂ«lqyera tĂ« Prometheus pĂ«r monitorimin dhe Grafana pĂ«r vizualizimin e metrikave, qĂ« do tĂ« na lejojnĂ« tĂ« dimĂ« pĂ«r performancĂ«n, shĂ«ndetin, pĂ«rmirĂ«simet/degradimin nĂ« punĂ«n e shĂ«rbimeve me kalimin e kohĂ«s.
Së fundmi, le të shohim gjurmimin e kërkesave në shërbime.
Jaeger: gjurmimi
Gjurma na nevojitet, sepse sa më shumë shërbime të kemi, aq më e vështirë bëhet të kuptojmë shkakun e dështimit. Të shohim një rast të thjeshtë nga figura më poshtë:
NjĂ« shembull tipik i njĂ« kĂ«rkese tĂ« dĂ«shtuar rastĂ«sishtKĂ«rkesa vjen, dĂ«shton â çfarĂ« Ă«shtĂ« shkaku? ShĂ«rbimi i parĂ«? Apo i dyti? Ka pĂ«rjashtime nĂ« tĂ« dy - le tĂ« shohim logjet e çdo njĂ«rit. Sa shpesh keni kapur veten me njĂ« veprim tĂ« tillĂ«? Puna jonĂ« Ă«shtĂ« mĂ« shumĂ« si ajo e detektivĂ«ve tĂ« softuerit, sesa ajo e zhvilluesve...
Këto janë probleme tepër të zakonshme në mikrosherbime dhe zgjidhen me sistemet e gjurmimit të shpërndara, ku shërbimet kalojnë një titull unik midis njëra-tjetrës, pas së cilës kjo informacion drejtohet në sistemin e gjurmimit, ku ato lidhen me të dhënat e kërkesës. Ja një ilustrim:
Për identifikimin e kërkesës përdoret TraceIdNë Istio përdoret Jaeger Tracer, i cili realizon një kornizë të pavarur nga prodhuesi OpenTracing API. Qasja në ndërfaqen e përdoruesit të Jaeger mund të bëhet me komandën e mëposhtme:
Tani shkoni nĂ« dhe zgjidhni shĂ«rbimin sa-web-app. NĂ«se shĂ«rbimi nuk shfaqet nĂ« menu-nĂ« e rĂ«nĂ« â tregoni/gjeneroni aktivitet nĂ« faqe dhe rifreskoni ndĂ«rfaqen. Pas kĂ«saj klikoni nĂ« butonin Find Traces, i cili do tĂ« tregojĂ« gjurmĂ«t mĂ« tĂ« fundit â zgjidhni cilĂ«ndo â do tĂ« shfaqet informacioni i detajuar pĂ«r tĂ« gjitha gjurmĂ«t:
Kjo gjurmë tregon:
- Kërkesa vjen në istio-ingressgateway (ky është ndërveprimi i parë me një nga shërbimet, dhe për kërkesën gjenerohet ID i Gjurmës), pas së cilës gateway-d drejton kërkesën në shërbimin sa-web-app.
- Në shërbim sa-web-app kërkesa kapet nga Envoy sidecar, krijohet një "fëmijë" në span (prandaj e shohim atë në trace) dhe ridrejtohet në kontejner sa-web-app. ( --- njësi logjike punimi në Jaeger, e cila ka emrin, kohën e fillimit të operacionit dhe kohëzgjatjen e tij. Span të mund të jenë të ngjyrosura dhe të renditura. Një grafik i orientuar aciklik nga span formon trace. --- shën. përk.
- Këtu, kërkesa përpunohen me metodën sentimentAnalysis. Këto trace janë tashmë të gjeneruara nga aplikacioni, pra, për to ishin të nevojshme ndryshime në kod.
- Në këtë moment, aktivizohet një kërkesë POST në sa-logic. ID e Trace duhet të kalojë nga sa-web-app.
- âŠ
Shënim: Në hapin 4, aplikacioni duhet të shohë titujt e gjeneruar nga Istio dhe t'i kalojë ata në kërkesat e mëpasshme, siç është treguar në imazhin më poshtë:
(A) Kalimi i titujve përgjigjet Istio; (B) Për titujt përgjigjen shërbimetIstio bën punën kryesore, pasi gjeneron tituj për kërkesat hyrëse, krijon span të reja në çdo sidecar dhe i kalon ato. Megjithatë, pa punën me titujt brenda shërbimeve, rruga e plotë e ndjekjes së kërkesës do të humbet.
Duhet të merren parasysh (kaluar) titujt e mëposhtëm:
Kjo Ă«shtĂ« njĂ« detyrĂ« e thjeshtĂ«, megjithatĂ« pĂ«r tĂ« thjeshtuar realizimin e saj tashmĂ« ekzistojnĂ« â pĂ«r shembull, nĂ« shĂ«rbimin sa-web-app, klienti RestTemplate kalon kĂ«ta tituj, nĂ«se thjesht shton bibliotekat Jaeger dhe OpenTracing nĂ« .
Vini re se aplikacioni Sentiment Analysis tregon implementime në Flask, Spring dhe ASP.NET Core.
Tani, kur është bërë e qartë se çfarë marim nga kutia (ose pothuajse "nga kutia"), le të shqyrtojmë çështjet e routing të hollësishëm, menaxhimin e trafikut të rrjetit, sigurinë etj.!
Shën. përkth.: për këtë lexoni në pjesën tjetër të materialeve mbi Istio nga Rinor Maloku, përkthimet e të cilave do të pasojnë në blogun tonë së shpejti. UPDATE (14 mars): tashmë është publikuar.
P.S. nga përkthyesi
Lexoni gjithashtu në blogun tonë:
- "Kthehu në mikroshërbime me Istio": , ;
- «»;
- «»;
- «»;
- «».
Burimi: habr.com







