
MĂ€rkus tĂ”lke kohta.: Service mesh on kindlasti muutunud olulise lahenduseks kaasaegses infrastruktuuris mikroteenuste arhitektuuriga rakenduste jaoks. Kuigi Istio on paljudele DevOps-inseneridele tuttav, on see ĂŒsna uus toode, mis, olles oma pakkumiste osas keeruline, vĂ”ib vajada mĂ€rkimisvÀÀrset aega tutvumiseks. Saksamaa insener Rinor Maloku, kes vastutab suuremate klientide pilvandmetöötluse eest telekommunikatsiooniettevĂ”ttes Orange Networks, on kirjutanud suurepĂ€rase artiklite tsĂŒkli, mis vĂ”imaldab kiiresti ja sĂŒvitsi sĂŒveneda Istiosse. Ta alustab oma juttu sellest, mida Istio ĂŒldse suudab ja kuidas seda saab kiiresti oma silmadega vaadata.
Istio â Avatud koodiga projekt, mille on vĂ€lja töötanud Google'i, IBM-i ja Lyft'i meeskondade koostöös. See lahendab keerukusi, mis ilmnevad mikroteenustel pĂ”hinevates rakendustes, nĂ€iteks:
- Liikluse haldamine: ajaĂŒlesandeid, kordusi, koormuse tasakaalustamist;
- Turvalisus: lÔppkasutaja autentimine ja autoriseerimine;
- JÀlgitavus: jÀlgimine, monitooring, logimine.
KÔiki neid saab lahendada rakenduse tasandil, kuid pÀrast seda lakkavad teie teenused olemast "mikro". KÔik tÀiendavad pingutused nende probleemide lahendamiseks on ettevÔtte jaoks lisakulud, mida oleks saanud kasutada otse Àri vÀÀrtuste nimel. Vaatame nÀidet:
Projektijuht: Kui kaua vÔtab aega tagasiside vÔimaluse lisamine?
Arendaja: Kaks sprindi.PJ: Mis?.. See on ju vaid CRUD!
A: CRUD'i tegemine on lihtne osa ĂŒlesandest, kuid meil on veel vaja autentida ja autoriseerida kasutajaid ja teenuseid. Kuna vĂ”rk ei ole usaldusvÀÀrne, on vaja rakendada kordusfunktsioone, samuti klientides. Samuti on vajalik, et kogu sĂŒsteem ei kukuks kokku, seetĂ”ttu on vajalikud ajaĂŒlesanded ja (rohkem mĂ”lema mainitud mustri kohta vt artikli lĂ”pus - tĂ”lkemĂ€rkus), ja probleemide tuvastamiseks on vajalikud monitooring, jĂ€lgimine, [âŠ]PJ: Oh, lisame siis lihtsalt selle funktsiooni teenusesse Product.
Arvan, et idee on selge: sammude ja pingutuste hulk, mis on vajalik ĂŒhe teenuse lisamiseks, on tohutu. Selles artiklis vaatleme, kuidas Istio kĂ”rvaldab kĂ”ik eespool mainitud keerukused (mis ei kuulu Ă€ri loogikasse) teenustes.

MÀrkus: Artikkel eeldab, et teil on praktilised teadmised Kubernetesest. Vastava juhul soovitan lugeda ja alles seejÀrel jÀtkata selle materjali lugemist.
Istio idee
Kuberneteses ilma Istio-ta teeb ĂŒks teenus otse pĂ€ringud teise teenuse juurde ning tĂ”rke korral peab teenus ise selle kĂ€sitlema: esitama uue katse, pidama silmas ajapiirangut, avama circuit breaker ja nii edasi.

VÔrgu liiklus Kuberneteses
Istio pakub spetsialiseeritud lahendust, mis on tÀielikult teenustest eraldatud ja toimib sekkumise kaudu vÔrgu suhtlusse. Seega teostab see:
- Talitluskatkestustunne: tuginedes vastuse olekukoode, mÔistab see, kas pÀringus toimus tÔrge ja sooritab selle uuesti.
- KanarisĂŒsteemide juurutamine: suunab ainult kindla protsendi pĂ€ringutest uue teenuse versiooni.
- JĂ€lgimine ja metoodika: kui kaua kulus teenusel vastamiseks?
- JÀlitus ja nÀhtavus: lisab igale pÀringule spetsiaalsed pÀised ja jÀlgib neid klastris.
- Turvalisus: ekstraheerib JWT-tokeni, autentib ja volitab kasutajaid.
Need on vaid mĂ”ned vĂ”imalused (tĂ”eliselt ainult mĂ”ned!), et teid huvitada. NĂŒĂŒd sukeldume tehnilistesse detailidesse!
Istio arhitektuur
Istio haarab kogu vĂ”rgu liikluse ja rakendab sellele reeglite kogumi, sisestades igasse podâi nutika proxy sidecar konteinerina. Proxyd, mis aktiveerivad kĂ”ik vĂ”imalused, moodustavad Andmeplaan, ja need saavad dĂŒnaamiliselt seadistuda Kontrollplaan.
Andmeplaan
Podidesse sisestatud proxyd vÔimaldavad Istio-l hÔlpsasti saavutada meie nÔuetele vastavust. NÀiteks kontrollime korduskatsete ja circuit breaker'i funktsioone.

Kuidas on Envoyâs rakendatud korduskatseid ja circuit breakingâut
KokkuvÔtteks:
- Envoy (rÀÀkides proxy-st, mis asub sidecar konteineris, mis levib ka nagu â toimetaja mĂ€rkus) saadetakse pĂ€ring esimese teenuse B eksemplari juurde ja toimub tĂ”rge.
- Envoy Sidecar teeb uue katse (retry). (1)
- TÔrkepÀring naaseb selle esitanud proxy-le.
- Nii avatakse Circuit Breaker ja toimub jÀrgmise teenuse vÀljakutse jÀrgnevate pÀringute jaoks. (2)
See, et tÀhendab, et teil ei pea olema teist Retry teeki, ei pea oma Circuit Breaking ja Service Discovery rakendust programmeerimiskeeles X, Y vÔi Z tegema. KÔik see ja palju muud on saadaval Istios, ilma et oleks vaja muudatusi koodis.
SuurepĂ€rane! NĂŒĂŒd vĂ”ite soovida Istio seiklustele asuda, kuid teil on endiselt kahtlusi ja lahtisi kĂŒsimusi. Kui tegu on universaalse lahendusega igaks juhuks, tekib teil loogiline kahtlus: kĂ”ik sellised lahendused osutuvad tegelikult sobimatuks ĂŒkski olukord.
Ja lĂ”puks kĂŒsitakse: âKas see on seadistatav?â
NĂŒĂŒd olete valmis mereseikluseks â ja tutvume Control Plane'iga.
Kontrollplaan
See koosneb kolmest komponendist: Pilot, Mixer ja Citadel, â kes koos seavad Envoy'id marsruudi haldamiseks, rakendavad poliitikaid ja koguvad telemeetrilisi andmeid. Skeemiliselt nĂ€eb see kĂ”ik vĂ€lja nii:

Control Plane'i ja Data Plane'i vaheline koostöö
Envoy'id (st data plane) on konfigureeritud (Custom Resource Definitions), mis on mÀÀratletud Istios ja selleks otstarbeks loodud. See tĂ€hendab, et need esitatakse Kuberneteses teise ressursina tuttava sĂŒntaksiga. PĂ€rast loomist tuvastatakse see ressurss control plane'i poolt ja rakendatakse Envoy'le.
Teenuste suhe Istiosse
Oleme kirjeldanud Istio suhet teenustega, kuid mitte vastupidi: kuidas teenused Istio suhtuvad?
Ausalt öeldes teavad teenused Istio olemasolust sama palju, kui kalad veest, kui nad kĂŒsivad endilt: âMis asi on vesi?â

Illustreerimine : â Kuidas sulle vesi maitseb? â Mis asi on vesi?
Nii et saate vÔtta töötava klastri ja pÀrast Istio komponentide kasutuselevÔttu jÀtkavad selles asuvad teenused töötamist, ja pÀrast nende komponentide eemaldamist on kÔik jÀlle korras. Loomulikult kaotate nende eemaldamise korral Istio pakutavad vÔimalused.
Piisavalt teooriat â viigem see teadmine praktikasse!
Istio praktikas
Istio nĂ”uab Kubernetes klastri, kus on vĂ€hemalt 4 vCPU ja 8 GB RAM-i. Kiireks klastri ĂŒlesseadmaks ja artiklis toodud juhiste jĂ€rgimiseks soovitan kasutada Google Cloud Platformi, mis pakub uutele kasutajatele .
Klastri loomise ja Kubernetes'i konsooli utiliidi kaudu juurdepÀÀsu seadistamise jÀrel saab Istio installida paketihalduri Helm kaudu.
Helmi installimine
Installige Helm klient oma arvutisse, nagu on kirjeldatud . Seda kasutame Istio installimiseks mustrite genereerimiseks jÀrgmises jaotises.
Istio installimine
Laadige Istio ressursid alla (originaalne autori link versioonile 1.0.5 on muudetud kehtivale, st 1.0.6 â tĂ”lkija mĂ€rkus), ekstraheerige sisu ĂŒhte kataloogi, mida edaspidi nimetame [istio-resources].
Ressursside lihtsaks tuvastamiseks looge K8s klastri nimevÀlja istio-system:
$ kubectl create namespace istio-systemLÔpetage installimine, liikudes katalooge [istio-resources] ja tÀites kÀsu:
$ 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.yamlSee kĂ€sk vĂ€ljastab Istio pĂ”hikomponendid faili istio.yaml. Oleme muutnud standardset ŃĐ°Đ±Đ»ĐŸĐœĐ° enda jaoks, mÀÀrates jĂ€rgmised parameetrid:
-
global.mtls.enabledseatudfalse(st mTLS autentimine on keelatud â tĂ”lkija mĂ€rkus), et lihtsustada meie tutvumist; -
tracing.enabledlĂŒlitab sisse pĂ€ringute jĂ€lgimise Jaegeri abil; -
kiali.enabledpaigaldab Kiali klastrisse teenuste ja liikluse visualiseerimiseks; -
grafana.enabledpaigaldab Grafana kogutud mÔÔdikute visualiseerimiseks.
Kandke genereeritud ressursid kÀsu abil:
$ kubectl apply -f istio.yamlIstio installimine klastrisse on lĂ”petatud! Oodake, kuni kĂ”ik podâid nimevĂ€ljas istio-system on olekus KĂ€imas vĂ”i Completed, tĂ€ites allolevat kĂ€sku:
$ kubectl get pods -n istio-systemNĂŒĂŒd oleme valmis jĂ€tkama jĂ€rgmises jaotises, kus tĂ”stame ja kĂ€ivitame rakenduse.
Sentiment Analysis rakenduse arhitektuur
Kasutaime Sentiment Analysis mikroteenuste rakenduse nÀidet, mida on kasutatud juba mainitud See on piisavalt keeruline, et demonstreerida Istio vÔimalusi praktikas.
Rakendus koosneb neljast mikroteenusest:
- Teenuseid SA-Frontend, mis teenindab rakenduse frontend'i Reactjs'is;
- Teenuseid SA-WebApp, mis teenindab Sentiment Analysis pÀringuid;
- Teenuseid SA-Logic, mis viib lÀbi iseseisva ;
- Teenuseid SA-Feedback, mis saab kasutajatelt tagasisidet analĂŒĂŒsi tĂ€psuse kohta.

Sellel skeemil nĂ€eme lisaks teenustele ka Ingress Controllerit, mis Kuberneteses suunab sissetulevad pĂ€ringud vastavatele teenustele. Istios kasutatakse sarnast kontseptsiooni Ingress Gateway raames, mille ĂŒksikasjad jĂ€rgivad.
Rakenduse kÀivitamine Istio proksi kaudu
Edasi liikudes, artiklis mainitud toimingute jaoks kloonige oma reposiit. . See sisaldab rakendust ja manifestide faile Kubernetes ja Istio jaoks.
Sidecaride sisestamine
Sisestamine vÔib toimuda automaatne vÔi kÀsitsi. Automaatseks sidecar-mahutite lisamiseks tuleb mÀÀrata nimede ruumile silt istio-injection=enabled, mis toimub jÀrgmise kÀsu abil:
$ kubectl label namespace default istio-injection=enabled
namespace/default labeledNĂŒĂŒd igas pod'is, mis kĂ€ivitatakse vaikimisi nimede ruumis (SeejĂ€rel kĂ€ivitame exec kĂ€su ja ootame 5000 sekundit, et jĂ€tkata jĂ€lgimist:) saab oma sidecar-mahuti. Selle kinnitamiseks paigaldame testrakenduse, minnes reposi juurkausta [istio-mastery] ja tĂ€idame jĂ€rgmise kĂ€su:
$ 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 createdTeenuste juurutamisel kontrollime, et pod'id on kahe konteineriga (isegi teenuse ja selle sidecar'iga), tÀites kÀsu kubectl get pods ja veendumiseks, et 'READY' veerus nÀitab vÀÀrtust , mis tÀhistab, et mÔlemad konteinerid on kÀivitatud: 2/2$ 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 12m
Visuaalselt nĂ€eb see vĂ€lja jĂ€rgmiselt:Envoy proksi ĂŒhes pod'is

NĂŒĂŒd, kui rakendus on ĂŒles seatud ja töötab, peame lubama sissetuleva liikluse jĂ”udmist rakendusse.
Ingress Gateway
Parim praktika selle saavutamiseks (lubada liiklus klustrites) on lÀbi
Istios, mis asub klustre piiril ja vÔimaldab sissetulevale liiklusele lubada selliseid Istio funktsioone nagu suunamine, koormuse tasakaalustamine, turvalisus ja jÀlgimine. Parim praktika selle saavutamiseks (lubada liiklus klustrites) on lÀbi Ingress Gateway komponent ja teenus, mis suunab selle vÀljapoole, paigaldati klastrisse Istio installimise kÀigus. VÀlimise teenuse IP-aadressi teada saamiseks tÀitke:
Ingress Gateway komponent ja teenus, mis suunab selle vÀljapoole, paigaldati klastrisse Istio installimise ajal. VÀlist teenuse IP-aadressi leidmiseks tehke jÀrgmist:
$ 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.120Me kasutame seda IP-aadressi rakenduse jaoks edasi (ma viitan sellele kui EXTERNAL-IP), seega salvestame selle mugavuse huvides muutujasse:
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')Kui proovite hetkel sellele IP-le brauseris minna, siis saate teenuse kÀttesaamatusest teatava vea, kuna vaikimisi blokib Istio kogu siseneva liikluse, kuni Gateway on mÀÀratletud.
Gateway ressurs
Gateway on CRD (Custom Resource Definition) Kuberneteses, mis mÀÀratletakse pÀrast Istio paigaldamist klastrisse ja aktiveerib vÔimaluse mÀÀrata pordid, protokoll ja hostid, millele soovime siseneva liikluse lubada.
Meie juhtumil soovime lubada HTTP-liiklust 80. pordil kĂ”igi hostide jaoks. Ălesanne rakendatakse jĂ€rgmise mÀÀratlemise kaudu ():
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"Selline konfiguratsioon ei vaja selgitusi, vÀlja arvatud selektor istio: ingressgateway. Selle selektori kaudu saame mÀÀrata, millisele Ingress Gateway'le rakendada konfiguratsiooni. Meie juhtumil on see Ingress Gateway'i kontroller, mis oli vaikimisi paigaldatud Istiosse.
Konfiguratsioon rakendatakse jÀrgmist kÀsku kutsudes:
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway createdNĂŒĂŒd lubab gateway juurdepÀÀsu 80. pordile, kuid ei tea, kuhu pĂ€ringuid suunata. Selleks on vajalikud Virtuaalsed teenused.
VirtualService ressurs
VirtualService mÀÀrab, kuidas Ingress Gateway suunab lubatud pÀringud klastris.
Meie rakendusele suunatud pÀringud, mis tulevad http-gateway kaudu, peavad minema teenustesse sa-frontend, sa-web-app ja sa-feedback:

Marsruudid, mida tuleb VirtualServices'iga seadistada
Vaadakem pÀringuid, mis peavad olema suunatud SA-Frontendile:
- TĂ€pne vastavus teele
/peab olema suunatud SA-Frontendile index.html-i saamiseks; - Teed, millel on prefiks
/static/*peavad olema suunatud SA-Frontendile staatiliste failide, nagu CSS ja JavaScript, saamiseks; - Teed, mis vastavad regulaaravaldusele
'^.*.(ico|png|jpg)$', peavad olema suunatud SA-Frontendile, kuna need on lehelt kuvatavad pildid.
Rakendamine saavutatakse jÀrgmise konfiguratsiooni kaudu ():
tĂŒĂŒp: VirtualService metaandmed: nimi: sa-external-services spetsifikatsioon: peremehed: - "*" vĂ€ravad: - http-gateway # 1 http: - vastav: - uri: tĂ€pselt: \/ - uri: tĂ€pselt: \/callback - uri: prefiks: \/static - uri: regex: '^.*.(ico|png|jpg) Olulised punktid:MĂ€rkus: Ălaltoodud konfiguratsioon salvestatakse faili
- See VirtualService kÀsitleb pÀringuid, mis saabuvad kaudu http-gateway;
- Uues
sihtkohtmÀÀratakse teenus, kuhu saadetakse pĂ€ringud.sa-virtualservice-external.yaml, mis sisaldab ka seadistusi SA-WebApp ja SA-Feedbacki marsruutimise jaoks, kuid on siinses artiklis lĂŒhendatud selguse huvides. Kasutame VirtualService'i kutset:$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml virtualservice.networking.istio.io/sa-external-services loodudMĂ€rkus: Kui rakendame Istio ressursse, loob Kubernetes API Server sĂŒndmuse, mille saab Istio kontrolli tasand, ja alles pĂ€rast seda rakendatakse uus konfiguratsioon iga poodi Envoy'i vahetusse. Ja Ingress Gateway kontroller esindab jĂ€rgmist Envoy'd, mis on konfigureeritud kontrolli tasandil. KĂ”ik see nĂ€eb vĂ€lja jĂ€rgmine:
Istio-IngressGateway konfiguratsioon pÀringute marsruutimiseksSentiment Analysis rakendus on kÀttesaadav aadressil
http://{EXTERNAL-IP}/. Ărge muretsege, kui saate staatuse Not Found: mĂ”nikord kulub kĂŒlgetĂ”mmete kehtestamiseks ja Envoy'i vahemĂ€lu vĂ€rskendamiseks veidi rohkem aega.Enne edasi liikumist töötage rakendusega natuke, et genereerida liiklust (selle olemasolu on vajalik edasiste tegevuste selguse huvides â toimetaja mĂ€rkus).
Kiali: nÀhtavus
JuurdepÀÀsuks Kiali halduskeskkonnale kÀivitage jÀrgmine kÀsk:
$ kubectl port-forward $(kubectl get pod -n istio-system -l app=kiali -o jsonpath='{.items[0].metadata.name}') -n istio-system 20001⊠ja avage , sisse logides kasutajanimega admin/admin. Siit leiate hulgaliselt kasulikke funktsioone, nĂ€iteks Istio komponentide konfiguratsiooni kontrollimise, teenuste visualiseerimise vĂ”rgu pĂ€ringute katkestatud teabe pĂ”hjal, vastates kĂŒsimustele âKes kellega rÀÀgib?â, âMillise teenuse versiooniga esinevad tĂ”rked?â ja nii edasi. Ăldiselt uurige Kiali vĂ”imalusi, enne kui liigute edasi â metrikate visualiseerimise juurde Grafanas.
Grafana: metrikate visualiseerimine
Istios kogutud meetrikad saadetakse Prometheusele ja visualiseeritakse Grafana abil. JuurdepÀÀsuks Grafana halduskeskkonnale kÀivitage allolev kÀsk, seejÀrel avage :
$ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath={.items[0].metadata.name}) 3000KlĂ”psake menĂŒĂŒd Home vasakul ĂŒleval ja valige Istio Service Dashboard vasakus ĂŒlanurgas, alustades teenusest sa-web-app, et vaadata kogutud meetrikaid:
Siin ootab meid tĂŒhi ja tĂ€iesti igav esitus â juhend kunagi ei aktsepteeri sellist. Loome vĂ€ikese koormuse jĂ€rgmise kĂ€suga:
$ while true; do curl -i http://$EXTERNAL_IP/sentiment -H "Content-type: application/json" -d '{"sentence": "I love yogobella"}'; sleep .8; doneNĂŒĂŒd on meil palju ilusamad graafikud ja lisaks neile - suurepĂ€rased tööriistad Prometheus jĂ€lgimiseks ja Grafana mÔÔdikute visualiseerimiseks, mis aitavad meil mĂ”ista teenuste tulemuslikkust, terviseseisundit, parandusi/degradaatsiooni aja jooksul.
LÔpuks vaatame teenuste pÀringute jÀlgimist.
Jaeger: jÀlgimine
JÀlgimine on vajalik, kuna mida rohkem meil on teenuseid, seda keerulisem on leida vea pÔhjust. Vaadakem lihtsat juhtumit alltoodud pildilt:
TĂŒĂŒpiline nĂ€ide juhuslikust ebaĂ”nnestunud pĂ€ringustPĂ€ring tuleb, kukub kokku - mis on siis pĂ”hjus? Esimene teenus? VĂ”i teine? MĂ”lemas on erandid - vaatame igaĂŒhe logisid. Kui sageli olete end sellise tegevuse pealt tabanud? Meie töö sarnaneb rohkem tarkvaradelefonistide tööle kui arendajate omale...
See on laialdaselt levinud probleem mikroteenustes ja see lahendatakse levitatud sĂŒsteemide jĂ€lgimisega, kus teenused edastavad ĂŒksteisele ainulaadse pealkirja, mida seejĂ€rel suunatakse jĂ€lgimissĂŒsteemi, kus see seostatakse pĂ€ringute andmetega. Siin on illustratsioon:
PÀringu identifitseerimiseks kasutatakse TraceIdIstios kasutatakse Jaeger Traceri, mis rakendab tarnijast sÔltumatut OpenTracing API raamistikku. Juhtimiseks jaotuse kasutajaliidesele pÀÀsemiseks tehke jÀrgmine kÀsk:
$ kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686NĂŒĂŒd minge aadressile ja valige teenus sa-web-app. Kui teenust ei kuvata rippmenĂŒĂŒs - genereerige tegevust lehekĂŒljel ja vĂ€rskendage liidest. PĂ€rast seda klĂ”psake nuppu Find Traces, mis nĂ€itab viimaseid jĂ€lgimisi - valige ĂŒkskĂ”ik milline - nĂ€ha saab detailset teavet kĂ”igi jĂ€lgimiste kohta:
See jÀlgimine nÀitab:
- PĂ€ring tuleb istio-ingressgateway (see on esimene kokkupuude ĂŒhe teenusega ja pĂ€ringu jaoks genereeritakse Trace ID), pĂ€rast mida suunab vĂ€rav pĂ€ringu teenusesse sa-web-app.
- Teenuses sa-web-app haarab pĂ€ringu Envoy sidecar, luuakse "laps" spanis (seetĂ”ttu nĂ€eme seda jĂ€lgimistes) ja suunatakse konteinerisse sa-web-app. ( â loogiline tĂ¶Ă¶ĂŒksus Jaeger'is, millel on nimi, töö alguse aeg ja selle kestus. Span'id vĂ”ivad olla sissetoodud ja jĂ€rjestatud. Suunatud tsĂŒkliline graaf span'idest moodustab trace. â mĂ€rg. tĂ”lk.)
- Siin töödeldakse taotlust meetodi abil sentimentAnalysis. Need jÀljed on juba genereeritud rakenduse poolt, st nende jaoks olid vajalikud muudatused koodis.
- Sellest hetkest algatatakse POST-pÀring sa-logic. Trace ID peab olema edastatud sa-web-app.
- âŠ
MÀrkus: 4. sammul peab rakendus nÀgema Istio genereeritud pÀiseid ja edastama need jÀrgmistele pÀringutele, nagu on nÀidatud alloleval pildil:
(A) Peaeesed edastab Istio; (B) PÀidete eest vastutavad teenusedIstio teeb peamise töö, kuna genereerib pÀidete sissetulevate pÀringute jaoks, loob igas sidecare'is uusi span'e ja edastab need. Kuid ilma teenustes pÀidete kÀsitlemiseta kaob pÀringu jÀlgimise tÀies ulatuses.
Oluline on arvestada (edastada) jÀrgmisi pÀidete:
x-request-id x-b3-traceid x-b3-spanid x-b3-parentspanid x-b3-sampled x-b3-flags x-ot-span-contextSee ei ole keeruline ĂŒlesanne, kuid selle teostamise lihtsustamiseks on juba olemas â nĂ€iteks, rakenduses sa-web-app edastab klient RestTemplate need pĂ€id, kui lisada lihtsalt teegid Jaeger ja OpenTracing .
Pange tÀhele, et rakendus Sentiment Analysis demonstreerib teostusi Flaskis, Springis ja ASP.NET Core'is.
NĂŒĂŒd, kui on selge, mida me saame otse vĂ€lja pakutuna (vĂ”i peaaegu "otse vĂ€lja pakutuna"), vaatame tĂ€helepanelikult kĂŒsimusi, mis puudutavad peenhÀÀlestatud marsruutimist, vĂ”rgu liikluse haldamist, turvalisust jne!
MÀrkus tÔlke kohta.: seda loe jÀrgmise osa materjalidest Istio kohta, autor Rinor Maloku, mille tÔlked jÀrgnevad meie blogis varsti. UPDATE (14. mÀrts): on juba avaldatud.
P.S. tÔlkijalt
Lugege ka meie blogist:
- "Tagasi mikroteenustele koos Istio": , ;
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
marsruut:
- sihtkoht:
host: sa-frontend # 2
port:
number: 80
Olulised punktid:
- See VirtualService kÀsitleb pÀringuid, mis saabuvad kaudu http-gateway;
- Uues
sihtkohtmÀÀratakse teenus, kuhu saadetakse pĂ€ringud.MĂ€rkus: Ălaltoodud konfiguratsioon salvestatakse faili
sa-virtualservice-external.yaml, mis sisaldab ka seadistusi SA-WebApp ja SA-Feedback marsruutimiseks, kuid on artiklis kokkuvĂ”etud lĂŒhiduse huvides.Rakendame VirtualService kutsumisega:
MĂ€rkus: Kui me rakendame Istio ressursse, loob Kubernetes API Server sĂŒndmuse, mille saab Istio Control Plane, ja alles seejĂ€rel rakendatakse uus konfiguratsioon iga podi Envoy-proksiserveritesse. Ja Ingress Gateway kontroller esindab jĂ€rgmist Envoyâd, mis on konfigureeritud Control Plane'is. KĂ”ik see nĂ€eb skeemil vĂ€lja nii:
Istio-IngressGateway konfiguratsioon pÀringute marsruutimiseksSentiment Analysis rakendus on kÀttesaadav aadressil
http://{EXTERNAL-IP}/. Ărge muretsege, kui saate staatuse Not Found: mĂ”nikord kulub kĂŒlgetĂ”mmete kehtestamiseks ja Envoy'i vahemĂ€lu vĂ€rskendamiseks veidi rohkem aega.Enne edasi liikumist töötage rakendusega natuke, et genereerida liiklust (selle olemasolu on vajalik edasiste tegevuste selguse huvides â toimetaja mĂ€rkus).
Kiali: nÀhtavus
JuurdepÀÀsuks Kiali halduskeskkonnale kÀivitage jÀrgmine kÀsk:
⊠ja avage , sisse logides kasutajanimega admin/admin. Siit leiate hulgaliselt kasulikke funktsioone, nĂ€iteks Istio komponentide konfiguratsiooni kontrollimise, teenuste visualiseerimise vĂ”rgu pĂ€ringute katkestatud teabe pĂ”hjal, vastates kĂŒsimustele âKes kellega rÀÀgib?â, âMillise teenuse versiooniga esinevad tĂ”rked?â ja nii edasi. Ăldiselt uurige Kiali vĂ”imalusi, enne kui liigute edasi â metrikate visualiseerimise juurde Grafanas.
Grafana: metrikate visualiseerimine
Istios kogutud meetrikad saadetakse Prometheusele ja visualiseeritakse Grafana abil. JuurdepÀÀsuks Grafana halduskeskkonnale kÀivitage allolev kÀsk, seejÀrel avage :
KlĂ”psake menĂŒĂŒd Home vasakul ĂŒleval ja valige Istio Service Dashboard vasakus ĂŒlanurgas, alustades teenusest sa-web-app, et vaadata kogutud meetrikaid:
Siin ootab meid tĂŒhi ja tĂ€iesti igav esitus â juhend kunagi ei aktsepteeri sellist. Loome vĂ€ikese koormuse jĂ€rgmise kĂ€suga:
NĂŒĂŒd on meil palju ilusamad graafikud ja lisaks neile - suurepĂ€rased tööriistad Prometheus jĂ€lgimiseks ja Grafana mÔÔdikute visualiseerimiseks, mis aitavad meil mĂ”ista teenuste tulemuslikkust, terviseseisundit, parandusi/degradaatsiooni aja jooksul.
LÔpuks vaatame teenuste pÀringute jÀlgimist.
Jaeger: jÀlgimine
JÀlgimine on vajalik, kuna mida rohkem meil on teenuseid, seda keerulisem on leida vea pÔhjust. Vaadakem lihtsat juhtumit alltoodud pildilt:
TĂŒĂŒpiline nĂ€ide juhuslikust ebaĂ”nnestunud pĂ€ringustPĂ€ring tuleb, kukub kokku - mis on siis pĂ”hjus? Esimene teenus? VĂ”i teine? MĂ”lemas on erandid - vaatame igaĂŒhe logisid. Kui sageli olete end sellise tegevuse pealt tabanud? Meie töö sarnaneb rohkem tarkvaradelefonistide tööle kui arendajate omale...
See on laialdaselt levinud probleem mikroteenustes ja see lahendatakse levitatud sĂŒsteemide jĂ€lgimisega, kus teenused edastavad ĂŒksteisele ainulaadse pealkirja, mida seejĂ€rel suunatakse jĂ€lgimissĂŒsteemi, kus see seostatakse pĂ€ringute andmetega. Siin on illustratsioon:
PÀringu identifitseerimiseks kasutatakse TraceIdIstios kasutatakse Jaeger Traceri, mis rakendab tarnijast sÔltumatut OpenTracing API raamistikku. Juhtimiseks jaotuse kasutajaliidesele pÀÀsemiseks tehke jÀrgmine kÀsk:
NĂŒĂŒd minge aadressile ja valige teenus sa-web-app. Kui teenust ei kuvata rippmenĂŒĂŒs - genereerige tegevust lehekĂŒljel ja vĂ€rskendage liidest. PĂ€rast seda klĂ”psake nuppu Find Traces, mis nĂ€itab viimaseid jĂ€lgimisi - valige ĂŒkskĂ”ik milline - nĂ€ha saab detailset teavet kĂ”igi jĂ€lgimiste kohta:
See jÀlgimine nÀitab:
- PĂ€ring tuleb istio-ingressgateway (see on esimene kokkupuude ĂŒhe teenusega ja pĂ€ringu jaoks genereeritakse Trace ID), pĂ€rast mida suunab vĂ€rav pĂ€ringu teenusesse sa-web-app.
- Teenuses sa-web-app pĂ€ringut pĂŒĂŒab kinni Envoy sidecar, luuakse «lapse» span (seetĂ”ttu me nĂ€eme seda jĂ€lgedes) ja suunatakse konteinerisse sa-web-app. ( â loogiline tĂ¶Ă¶ĂŒksus Jaegeris, millel on nimi, operatsiooni alguse aeg ja selle kestus. Span'id vĂ”ivad olla pesakonnaks ja jĂ€rjestatud. Suunatud mitte-tsĂŒkliline graaf span'idest moodustab jĂ€lje. â seisukoht tĂ”lkijale)
- Siin töödeldakse taotlust meetodi abil sentimentAnalysis. Need jÀljed on juba genereeritud rakenduse poolt, st nende jaoks olid vajalikud muudatused koodis.
- Sellest hetkest algatatakse POST-pÀring sa-logic. Trace ID peab olema edastatud sa-web-app.
- âŠ
MÀrkus: 4. sammul peab rakendus nÀgema Istio genereeritud pÀiseid ja edastama need jÀrgmistele pÀringutele, nagu on nÀidatud alloleval pildil:
(A) Peaeesed edastab Istio; (B) PÀidete eest vastutavad teenusedIstio teeb pÔhiosa tööst, kuna see genereerib sissetulevate pÀringute jaoks pÀiseid, loob uusi span'e igas sidecar'is ja edastab need edasi. Siiski, kui teenustes peadega ei töötata, siis pÀringu jÀlgimise tÀispikkus kaob.
Oluline on arvestada (edastada) jÀrgmisi pÀidete:
See ei ole keeruline ĂŒlesanne, kuid selle teostamise lihtsustamiseks on juba olemas â nĂ€iteks, rakenduses sa-web-app edastab klient RestTemplate need pĂ€id, kui lisada lihtsalt teegid Jaeger ja OpenTracing .
Pange tÀhele, et rakendus Sentiment Analysis demonstreerib teostusi Flaskis, Springis ja ASP.NET Core'is.
NĂŒĂŒd, kui on selge, mida me saame otse vĂ€lja pakutuna (vĂ”i peaaegu "otse vĂ€lja pakutuna"), vaatame tĂ€helepanelikult kĂŒsimusi, mis puudutavad peenhÀÀlestatud marsruutimist, vĂ”rgu liikluse haldamist, turvalisust jne!
MÀrkus tÔlke kohta.: seda loe jÀrgmise osa materjalidest Istio kohta, autor Rinor Maloku, mille tÔlked jÀrgnevad meie blogis varsti. UPDATE (14. mÀrts): on juba avaldatud.
P.S. tÔlkijalt
Lugege ka meie blogist:
- "Tagasi mikroteenustele koos Istio": , ;
- «»;
- «»;
- «»;
- «».
Allikas: habr.com







