
MĂ€rk. tĂ”lge.: TeenusvĂ”rgud on kindlasti muutumas vajalikuks lahenduseks tĂ€napĂ€evases infrastruktuuris, millel on mikroteenuste arhitektuuriga rakendused. Kuigi Istio vĂ”ib paljudele DevOps-inseneridele tuttav olla, on see ĂŒsna uus toode, mis oma pakutavate funktsioonide osas vĂ”ib nĂ”uda mĂ€rkimisvÀÀrset aega tutvumiseks. Saksa insener Rinor Maloku, kes vastutab suurklientide pilvandmetöötluse eest telekommunikatsiooniettevĂ”ttes Orange Networks, on kirjutanud suurepĂ€rase artiklite seeria, mis vĂ”imaldab piisavalt kiiresti ja sĂŒgavalt Istiosse sĂŒveneda. Ta alustab oma juttu sellest, mida Istio ĂŒldse oskab ja kuidas seda saab kiiresti oma silmaga nĂ€ha.
Istio â Open Source projekt, mille on vĂ€lja töötanud Google'i, IBM-i ja Lyfti meeskondade koostöös. See lahendab mikroteenustel pĂ”hinevates rakendustes esinevaid keerukusi, nĂ€iteks:
- Liiklustugevdus: ajakavad, uuesti proovimise mehhanismid, koormuse tasakaalustamine;
- Ohutus: lÔppkasutaja autentimine ja autoriseerimine;
- JÀlgimine: jÀlgimine, monitooring, logimine.
Needless to say, all these issues can be resolved at the application level, but doing so will turn your services into something more than 'micro'. All extra efforts to address these problems represent wasted resources that could otherwise be directly used for business value. Letâs consider an example:
Project Manager: How long does it take to add feedback functionality?
Developer: Two sprints.PM: What?.. Itâs just CRUD!
Dev: Implementing CRUD is the easy part of the task, but we also need to authenticate and authorize users and services. Given the unreliability of the network, we will need to implement retries as well as in the clients. Furthermore, to ensure that the entire system doesn't crash, we will require timeouts and (for more on both mentioned patterns, see further in the article â editor's note), and to detect issues, we will need monitoring, tracing, [âŠ]PM: Oh, then letâs just add this feature to the Product service.
MĂ”te on selge: ĂŒhe teenuse lisamiseks vajalik töö maht ja pingutused on tohutud. Selles artiklis vaatleme, kuidas Istio kĂ”rvaldab kĂ”ik eelpool mainitud keerukused (mis ei ole suunatud Ă€riloogikale) teenustest.

MÀrkus: Artikkel eeldab, et teil on praktilised teadmised Kubernetesest. Vastupidisel juhul soovitan lugeda ja alles seejÀrel jÀtkata selle materjali lugemist.
Istio mÔte
Ilma Istio-ta teeb ĂŒks teenus otsepĂ€ringuid teisele, ja vea korral peab teenus ise selle kĂ€sitlema: korraldama uue katse, ette nĂ€gema ajapiiri, avama circuit breaker jne.

VÔrguliiklus Kuberneteses
Istio pakub aga spetsialiseeritud lahendust, mis on tÀielikult teenustest eraldatud ja toimib sekkumise kaudu vÔrgusuhtluses. Ja seega rakendab see:
- Katastroofitaluvus: tuginedes vastuse staatusele, mÔistab see, kas pÀringus tekkis tÔrge, ja kordab seda.
- Kanari vÀljalasked.: suunab vaid kindla protsendi pÀringutest uuele teenuse versioonile.
- JÀlgimine ja mÔÔdikud: kui kaua vÔttis teenusel vastamine aega?
- JÀlgimine ja nÀhtavus: lisab spetsiifilisi pÀiseid iga pÀringu juurde ja jÀlgib neid klastris.
- Ohutus: ekstraktib JWT-mÀrgis, autentib ja volitab kasutajaid.
Need on vaid mĂ”ned vĂ”imalused (tĂ”eliselt vaid mĂ”ned!), et teid intrigeerida. NĂŒĂŒd sukeldume tehnilistesse detailidesse!
Istio arhitektuur
Istio pĂŒĂŒab kogu vĂ”rguliiklust ja rakendab sellele reeglite kogumi, sisestades igasse pod'i nutika proksi sidecar-konteinerina. Proksid, mis aktiveerivad kĂ”ik funktsioonid, moodustavad Andmeplaneet, ja need saavad dĂŒnaamiliselt seadistuda Kontrolli kĂŒngas.
Andmeplaneet
Pod'i sisestatud proksid vÔimaldavad Istio'l hÔlpsasti saavutada vajalikku vastavust. NÀiteks vaatame kordamise ja ringluse katkestamise funktsioone.

Kuidas on retries ja circuit breaking rakendatud Envoy's
KokkuvÔttes:
- Envoy (rÀÀkides proksist, mis asub sidecar-konteineris, mis levib ja nagu â kt. tĂ”lge) saadab pĂ€ringu esimesele teenuse B eksemplarile ja ilmneb rike.
- Envoy Sidecar pĂŒĂŒab uuesti (retry). (1)
- Viga saanud pÀring tagastatakse selle kutsunud proksile.
- Nii avatakse Circuit Breaker ja kutsutakse ĂŒles jĂ€rgmine teenus edasiste pĂ€ringute jaoks. (2)
See tÀhendab, et teil ei pea olema vaja kasutada uut Retry teeki, ei pea looma oma rakendust Circuit Breaking ja Service Discovery programmeerimiskeeles X, Y vÔi Z. KÔik see ja palju muud on Istios juba kasutamiseks valmis ning ei vaja mingeid muudatusi koodis.
SuurepĂ€rane! NĂŒĂŒd vĂ”ite soovida seigelda Istio'ga, kuid teil on ikka veel mĂ”ned kahtlused ja avatud kĂŒsimused. Kui see on universaalne lahendus igaks juhuks, tekib teil pĂ”hjendatud kahtlus: kĂ”ik sellised lahendused osutuvad tegelikult sobimatuks ĂŒkskĂ”ik millise olukorra jaoks.
Ja lĂ”puks kĂŒsite: âKas see on kohandatav?â
NĂŒĂŒd olete valmis merereisiks â ja tutvume Control Plane'iga.
Kontrolli kĂŒngas
See koosneb kolmest komponendist: Pilot, Mixer ja Citadel, â mis koos tĂ”endavad Envoy'ide seadistamist liikluse suunamiseks, rakendavad poliitikaid ja koguvad telemeetriandmeid. Skeemiliselt nĂ€eb see vĂ€lja nii:

Control Plane'i ja Data Plane'i interaktsioon
Envoy'id (st data plane) on konfigureeritud (Custom Resource Definitions), mis on mÀÀratletud Istio poolt ja spetsiaalselt selleks eesmĂ€rgiks. See tĂ€hendab, et need esindavad Kuberneteses tuttava sĂŒntaksiga ressurssi. PĂ€rast loomist need ressursid valitakse kontrollplaneedi poolt ja rakendatakse Envoy'dele.
Teenuste seosed Istio'ga
Oleme kirjeldanud Istio suhet teenustega, kuid mitte vastupidi: kuidas teenused Istio'le vaatavad?
Tegelikult teavad teenused Istio olemasolust sama hĂ€sti, kui kalad teavad vett, kui nad kĂŒsivad endalt: 'Mis see vesi ĂŒldse on?'.

Illustratsioon : â Kuidas sulle vesi maitseb? â Mis see vesi ĂŒldse on?
Seega saate vÔtta töötava klastriga ja pÀrast Istio komponentide juurutamist jÀtkavad teenused seal oma tööd ning pÀrast nende komponentide eemaldamist on kÔik jÀlle korras. Loomulikult kaotate sellega aga Istio pakutavad vÔimalused.
Piisavalt teooriat â viidame selle teadmise praktikas ellu!
Istio praktikas
Istio vajab Kubernetes klastri, milles on vÀhemalt saadaval 4 vCPU ja 8 GB RAM. Klastri kiireks seadistamiseks ja artiklis toodud juhiste jÀrgimiseks soovitan kasutada Google Cloud Platform'i, mis pakub uutele kasutajatele .
PÀrast klastri loomist ja juurdepÀÀsu seadistamist Kubernetes'ile kÀsurea tööriista kaudu saate installida Istio pakihalduri Helm abil.
Helmi installimine
Installige Helm klient oma arvutisse, nagu on kirjeldatud . Seda kasutame Istio installimise mallide genereerimiseks jÀrgmiseks osaks.
Istio paigaldamine
Laadige Istio ressursid alla (originaali autori link versioonile 1.0.5 on muudetud kehtivaks, s.t. 1.0.6 â toim. tĂ”lk.), ekstraktige sisu ĂŒhte kausta, mida nimetame edaspidi [istio-resources].
Lihtsaks Istio ressursside tuvastamiseks looge K8s klastri nimespatsioon istio-system:
$ kubectl create namespace istio-systemLÔpetage installimine, liikumine katalooge [istio-resources] ja kÀsu tÀitmine:
$ 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 genereerib Istio vÔtmekomponendid faili istio.yaml. Oleme kohandanud vaikimisi templati enda tarbeks, mÀÀrates jÀrgmised parameetrid:
-
global.mtls.enabledseatud vÀÀrtuseksfalse(st mTLS autentimine on keelatud â vt selgitust.), et lihtsustada meie tutvumise protsessi; -
tracing.enabledlubab pÀringute jÀlgimise Jaegeri abil; -
kiali.enabledpaigaldab Kiali klastrisse teenuste ja liikluse visualiseerimiseks; -
grafana.enabledpaigaldab Grafana kogutud metrikate visualiseerimiseks.
Kohandatud ressursid kehtib meeskonna poolt:
$ kubectl apply -f istio.yamlIstio paigaldamine klastrisse on lÔpetatud! Oodake, kuni kÔik pod'id nimede ruumis istio-system on seisundis Running vÔi TÀidetud, kÀivitades alloleva kÀsu:
$ kubectl get pods -n istio-systemNĂŒĂŒd oleme valmis liikuma jĂ€rgmisse sektsiooni, kus tĂ”stame ja kĂ€ivitame rakenduse.
Sentiment Analysis rakenduse arhitektuur
Kasutame Sentiment Analysis mikroteenuste rakenduse nÀidet, mis on juba mainitud See on piisavalt keeruline, et nÀidata Istio vÔimekust praktikas.
Rakendus koosneb neljast mikroteenusest:
- Teenuse SA-Frontend, mis teenindab rakenduse frontendi Reactjs'i peal;
- Teenuse SA-WebApp, mis teenindab Sentiment Analysis pÀringuid;
- Teenuse SA-Logic, mis viib lÀbi ;
- Teenuse SA-Feedback, mis kogutakse kasutajatelt tagasisidet analĂŒĂŒsi tĂ€psuse kohta.

Selles skeemis nÀeme peale teenuste ka Ingress Controller'it, mis Kubernetes'is suunab sissetulevad pÀringud vastavatele teenustele. Istios kasutatakse sarnast kontsepti Ingress Gateway raames, mille kohta jÀrgneb tÀiendav teave.
Rakenduse kÀivitamine Istio proksi kaudu
Edasi liikuda, nagu artiklis mainitud, kloonige repository enda jaoks . See sisaldab rakendust ja mĂĄnifeste Kubernetes'i ja Istio jaoks.
Sidecar'ide sisestamine
Sisestamine vÔib toimuda automaatselt vÔi kÀsi. Automaatseks sidecar-konteinerite sisestamiseks tuleb nimede ruumile seada silt istio-injection=enabled, mis toimub jÀrgmise kÀsu abil:
$ kubectl label namespace default istio-injection=enabled
namespace/default labeledNĂŒĂŒd saab iga pod, mis tĂ”stetakse ĂŒles vaikimisi nimede ruumis (default) oma sidecar-konteineri. Selle kinnitamiseks, deploy'ime testrakenduse, liikudes repository juurkausta [istio-mastery] ja kĂ€ivitades 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 kÀivitamisel kontrollime, et pod'ides oleks kaks konteinerit (teenus ja selle sidecar), kasutades kÀsku kubectl get pods ja veendudes, et veeru READY all on vÀÀrtus 2/2, mis nÀitab, et mÔlemad konteinerid on kÀivitunud:
$ 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 12mVisuaalselt tundub see jÀrgmiselt:

Envoy proks ĂŒksikutes pod'ides
Kuna rakendus on nĂŒĂŒd kĂ€ivitatud ja töötab, peame lubama sissetuleval liiklusel rakendusse jĂ”uda.
Ingress Gateway
Parim praktika selle saavutamiseks (lubada liiklus klastrisse) â kasutades Ingress Gateway Istios, mis asub klastripiiril ja vĂ”imaldab sissetulevale liiklusele vĂ”imaldada selliseid Istio funktsioone nagu marsruutimine, koormuse tasakaalustamine, turvalisus ja jĂ€lgimine.
Ingress Gateway komponent ja teenus, mis edastab selle vÀljas poole, paigaldati klastrisse Istio installatsiooni kÀigus. Et leida teenuse vÀlist IP-aadressi, tÀitke:
$ 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 pöördume rakenduse poole selle IP-aadressi kaudu ja hiljem (ma viitan sellele kui EXTERNAL-IP), seega mugavuse huvides salvestame vÀÀrtuse muutujasse:
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')Kui proovite selle IP-aadressi kaudu brauserisse siseneda, saate vea Service Unavailable, kuna vaikimisi Istio blokeerib kogu siseneva liikluse, kuni ei ole mÀÀratud Gateway.
Gateway ressurss
Gateway on CRD (Custom Resource Definition) Kuberneteses, mis mÀÀratakse pÀrast Istio installimist klastrisse ja aktiveerib vÔimaluse mÀÀrata sadamad, protokoll ja hostid, mille jaoks soovime lubada sisenevat liiklust.
Meie puhul soovime lubada HTTP-liiklust 80. sadamasse kĂ”igi hostide jaoks. Ălesanne viiakse ellu jĂ€rgmise mÀÀratlemisega ():
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"See konfiguratsioon ei vaja selgitusi, vÀlja arvatud selektori kohta. istio: ingressgateway. Selle selektori abil saame juhendada, millisele Ingress Gateway'le konfiguratsioon rakendatakse. Meie juhul on see Istios vaikimisi installitud Ingress Gateway'i kontroller.
Konfiguratsioon rakendatakse jÀrgmise kÀsu abil:
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway createdNĂŒĂŒd lubab vĂ€rav juurdepÀÀsu pordile 80, kuid ei tea, kuhu suunata pĂ€ringud. Selleks on vaja Virtual Services.
VirtualService ressurss
VirtualService juhendab Ingress Gateway'd, kuidas suunata pÀringuid, mis on lubatud klastris.
Meie rakendusele suunatud pÀringud, mis tulevad http-gateway kaudu, peavad minema teenustele sa-frontend, sa-web-app ja sa-feedback:

Marsruudid, mida tuleb seadistada VirtualServices
Vaatame pÀringuid, mis peaksid minema SA-Frontend'ile:
- TÀpne sobivus tee jÀrgi
/peab saatma SA-Frontend'ile, et saada index.html; - Tee eelneva prefiksiga
/static/*peavad minema SA-Frontend'i staatiliste failide saamiseks, mida kasutatakse esikĂŒljel, nagu CSS ja JavaScript; - Teed, mis vastavad regulaaravaldistele
'^.*\.(ico|png|jpg)$', peavad minema SA-Frontend'i, kuna need on lehelt kuvatavad pildid.
Rakendamine saavutatakse jÀrgmise konfiguratsiooniga ():
tĂŒĂŒp: VirtualService meta: nimi: sa-external-services spec: hostid: - "*" vĂ€ravad: - http-gateway # 1 http: - vasta: - uri: tĂ€pselt: / - uri: tĂ€pselt: /callback - uri: eelline: /static - uri: regex: '^.*.(ico|png|jpg) Olulised punktid:MĂ€rkus: Ălaltoodud konfiguratsioon on salvestatud faili
- See VirtualService kehtib pÀringutele, mis tulevad http-gateway;
- V
destinationmÀÀratleb teenuse, kuhu pĂ€ringud saadetakse.sa-virtualservice-external.yaml, mis sisaldab ka seadistusi SA-WebApp ja SA-Feedback suunamiseks, kuid on siin artiklis lĂŒhendatud kokkuvĂ”tte huvides. Rakendame VirtualService'i kĂ€su:$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml virtualservice.networking.istio.io/sa-external-services loodudMĂ€rkus: Kui rakendame Istio ressursid, loob Kubernetes API Server sĂŒndmuse, mille saab Istio Control Plane, ja alles seejĂ€rel rakendatakse uus konfiguratsioon iga podi Envoy vahetusse. Ja Ingress Gateway kontroller esindab veel ĂŒhte Envoy'd, mis on konfigureeritud Control Plane'is. Kogu see skeem nĂ€eb vĂ€lja selline:
Istio-IngressGateway konfiguratsioon pÀringute suunamiseksSentiment Analysis rakendus on saadaval aadressil
http://{EXTERNAL-IP}/. Ărge muretsege, kui saate staatuse Not Found: kasutamiseks vĂ”ib olla vajalik veidi rohkem aega, et seadistuse jĂ”ustumine toimuks ja Envoy vahemĂ€lu uuendataks.Enne jĂ€tkamist töötage rakendusega, et genereerida liiklust (see on vajalik jĂ€rgmiste toimingute selguse tagamiseks â toimetuse mĂ€rkus).
Kiali: jÀlgimine
Kiali administratiivliidesele jÔudmiseks tÀitke 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 , logige sisse admin/admin. Siit leiate palju kasulikke vĂ”imalusi, nĂ€iteks Istio komponentide seadistuse kontrollimiseks, teenuste visualiseerimiseks kogutud teabe alusel, vastamiseks kĂŒsimustele "Kes kellega suhtleb?", "Millise teenuse versiooniga tekivad probleemid?" jne. Uurige Kiali vĂ”imalusi enne edasiviimist â suunduge metrikate visualiseerimise juurde Grafana.
Grafana: metrikate visualiseerimine
Istios kogutud metrikad jÔuavad Prometheusesse ja visualiseeritakse Grafanas. JuurdepÀÀsemiseks Grafana administratiivliidesele tÀitke 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}) 3000Kliki vasakult ĂŒlanurgast menĂŒĂŒd Avaleht ja vali Istio teenuse armatuurlaud vasakus ĂŒlanurgas, alusta teenusest sa-web-app, et vaadata kogutud mÔÔdikuid:
Siin ootab meid tĂŒhi ja tĂ€iesti igav esitlus â juhend kunagi midagi sellist ei kiidaks. Loome nĂŒĂŒd kerge 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 ning lisaks neile on meil fantastilised Prometheuse tööriistad jĂ€lgimiseks ja Grafana mÔÔdiku visualiseerimiseks, mis aitavad meil jĂ€lgida teenuste toimivust, terviseseisundit, parandusi/degradatsiooni ajas.
LÔpuks vaatame teenuste pÀringute jÀlgimist.
Jaegerâ: jĂ€lgimine
JÀlgimine on vajalik, sest mida rohkem meil on teenuseid, seda keerulisem on pÔhjuse leidmine. Vaatame lihtsat juhtumit allolevast pildist:
TĂŒĂŒpiline nĂ€ide juhuslikust ebaĂ”nnestunud pĂ€ringustPĂ€ring tuleb, kukub â mis on pĂ”hjus? Esimene teenus? VĂ”i teine? MĂ”ningad erandid on mĂ”lemas â vaatame igaĂŒhe logisid. Kui tihti olete end sellise tegevuse juures tabanud? Meie töö sarnaneb rohkem tarkvara detektiivide omaga kui arendajategaâŠ
See on laialdaselt levinud probleem mikroteenustes ning lahendatakse jagatud sĂŒsteemide jĂ€lgimisega, kus teenused edastavad ĂŒksteisele unikaalse pĂ€ise, mille jĂ€rel see teave suunatakse jĂ€lgimisse sĂŒsteemi, kus see seostatakse pĂ€ringu andmetega. Siin on illustreeriv joonis:
PÀringu identifitseerimiseks kasutatakse TraceIdIstios kasutatakse Jaeger Tracerit, mis rakendab tootjast sÔltumatut raamistikku OpenTracing API. Juhtige kasutajaliidese juurde jÀrgnevate kÀsureade abil:
$ 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 teenus ei ole avanevas menĂŒĂŒs nĂ€ha â pange lehelt tegevust vĂ”i genereerige tegevus ja vĂ€rskendage liidest. PĂ€rast seda vajutage nuppu Find Traces, mis nĂ€itab uusimaid jĂ€lgi â valige ĂŒkskĂ”ik milline â kuvatakse kĂ”igi jĂ€lgede ĂŒksikasjalik teave:
See jÀlgib:
- PĂ€ring jĂ”uab istio-ingressgateway (see on esimene suhtlemine ĂŒhe teenusega ja pĂ€ringu jaoks genereeritakse jĂ€lgimise ID), pĂ€rast mida suunab vĂ€rav pĂ€ringu teenusesse sa-web-app.
- Teenuses sa-web-app haarab pĂ€ringu Envoy sidecar, luuakse span-is «laps» (seetĂ”ttu nĂ€eme seda jĂ€lgimises) ja suunatakse konteinernisse sa-web-app. ( â loogiline tööhĂ”ive Jaegeris, mis sisaldab nime, operatsiooni algusaja ja kestuse. Span'id vĂ”ivad olla sisemised ja jĂ€rjestatud. Suunatud aktsĂŒkliline graaf span'idest moodustab jĂ€lgimise. â tĂ”lkija mĂ€rkus)
- Siin töödeldakse pÀringut meetodi abil sentimentAnalysis. Need jÀljed on juba genereeritud rakenduse poolt, st nende jaoks olid vajalikud muudatused koodis.
- Sellest hetkest alates algatatakse POST-pÀring sa-logic. JÀlgimise ID peab olema edastatud sa-web-app.
- âŠ
MÀrkus: 4. sammul peab rakendus nÀgema Istio genereeritud pÀiseid ja edastama need edasistes pÀringutes, nagu on nÀidatud alloleval pildil:
(A) PÀiste edastamise eest vastutab Istio; (B) PÀiste eest vastutavad teenusedIstio tÀidab pÔhifunktsiooni, genereerides sisenevate pÀringute pÀiseid, luues igas sidecar-is uusi spanne ja suunates neid edasi. Kuid ilma pÀidikutega töötamiseta teenustes, kaob pÀringu jÀlgimise tÀiuslik tee.
On oluline arvesse vÔtta (edasi suunata) jÀrgmisi pÀiseid:
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 rakendamise lihtsustamiseks on juba olemas â nĂ€iteks teenuses sa-web-app edastab klient RestTemplate need pĂ€idikud, kui lihtsalt lisada teegid Jaeger ja OpenTracing .
Pange tÀhele, et rakendus Sentiment Analysis demonstreerib teostusi Flaski, Springi ja ASP.NET Core'i peal.
NĂŒĂŒd, kui on selge, mida me âkarbistâ (vĂ”i peaaegu âkarbistâ) saame, vaatame lĂ€hemalt tĂ€psustatavat marsruutimist, vĂ”rgu liikluse haldamist, turvalisust jne!
MÀrk. tÔlge.: selle kohta loe jÀrgmises osas Istio materjalidest, mille on koostanud Rinor Maloku, mille tÔlked jÀrgnevad meie blogis varsti. KUUDA (14. mÀrts): oletame avaldatud.
P.S. tÔlkija mÀrkused
Lugege ka meie blogist:
- âTagasi mikroteenuste juurde koos Istioâgaâ: , ;
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
marsruut:
- sihtkoht:
host: sa-frontend # 2
port:
number: 80
Olulised punktid:
- See VirtualService kehtib pÀringutele, mis tulevad http-gateway;
- V
destinationmÀÀratleb teenuse, kuhu pĂ€ringud saadetakse.MĂ€rkus: Ălaltoodud konfiguratsioon on salvestatud faili
sa-virtualservice-external.yaml, mis sisaldab ka marsruutimise seadeid SA-WebApp ja SA-Feedback jaoks, kuid on artiklis lĂŒhidalt esitatud.Rakendame VirtualService, öeldes:
MĂ€rkus: Kui rakendame Istio ressursse, loob Kubernetes API Server sĂŒndmuse, mille saab Istio Control Plane, ja alles siis rakendatakse uus konfigureerimine iga podi Envoy-proksiserveritesse. Ingress Gateway kontroller esindab veel ĂŒhte Envoyâd, mis on konfigureeritud Control Planeâis. KĂ”ik see nĂ€eb skeemis vĂ€lja nii:
Istio-IngressGateway konfiguratsioon pÀringute suunamiseksSentiment Analysis rakendus on saadaval aadressil
http://{EXTERNAL-IP}/. Ărge muretsege, kui saate staatuse Not Found: kasutamiseks vĂ”ib olla vajalik veidi rohkem aega, et seadistuse jĂ”ustumine toimuks ja Envoy vahemĂ€lu uuendataks.Enne jĂ€tkamist töötage rakendusega, et genereerida liiklust (see on vajalik jĂ€rgmiste toimingute selguse tagamiseks â toimetuse mĂ€rkus).
Kiali: jÀlgimine
Kiali administratiivliidesele jÔudmiseks tÀitke jÀrgmine kÀsk:
⊠ja avage , logige sisse admin/admin. Siit leiate palju kasulikke vĂ”imalusi, nĂ€iteks Istio komponentide seadistuse kontrollimiseks, teenuste visualiseerimiseks kogutud teabe alusel, vastamiseks kĂŒsimustele "Kes kellega suhtleb?", "Millise teenuse versiooniga tekivad probleemid?" jne. Uurige Kiali vĂ”imalusi enne edasiviimist â suunduge metrikate visualiseerimise juurde Grafana.
Grafana: metrikate visualiseerimine
Istios kogutud metrikad jÔuavad Prometheusesse ja visualiseeritakse Grafanas. JuurdepÀÀsemiseks Grafana administratiivliidesele tÀitke allolev kÀsk, seejÀrel avage :
Kliki vasakult ĂŒlanurgast menĂŒĂŒd Avaleht ja vali Istio teenuse armatuurlaud vasakus ĂŒlanurgas, alusta teenusest sa-web-app, et vaadata kogutud mÔÔdikuid:
Siin ootab meid tĂŒhi ja tĂ€iesti igav esitlus â juhend kunagi midagi sellist ei kiidaks. Loome nĂŒĂŒd kerge koormuse jĂ€rgmise kĂ€suga:
NĂŒĂŒd on meil palju ilusamad graafikud ning lisaks neile on meil fantastilised Prometheuse tööriistad jĂ€lgimiseks ja Grafana mÔÔdiku visualiseerimiseks, mis aitavad meil jĂ€lgida teenuste toimivust, terviseseisundit, parandusi/degradatsiooni ajas.
LÔpuks vaatame teenuste pÀringute jÀlgimist.
Jaegerâ: jĂ€lgimine
JÀlgimine on vajalik, sest mida rohkem meil on teenuseid, seda keerulisem on pÔhjuse leidmine. Vaatame lihtsat juhtumit allolevast pildist:
TĂŒĂŒpiline nĂ€ide juhuslikust ebaĂ”nnestunud pĂ€ringustPĂ€ring tuleb, kukub â mis on pĂ”hjus? Esimene teenus? VĂ”i teine? MĂ”ningad erandid on mĂ”lemas â vaatame igaĂŒhe logisid. Kui tihti olete end sellise tegevuse juures tabanud? Meie töö sarnaneb rohkem tarkvara detektiivide omaga kui arendajategaâŠ
See on laialdaselt levinud probleem mikroteenustes ning lahendatakse jagatud sĂŒsteemide jĂ€lgimisega, kus teenused edastavad ĂŒksteisele unikaalse pĂ€ise, mille jĂ€rel see teave suunatakse jĂ€lgimisse sĂŒsteemi, kus see seostatakse pĂ€ringu andmetega. Siin on illustreeriv joonis:
PÀringu identifitseerimiseks kasutatakse TraceIdIstios kasutatakse Jaeger Tracerit, mis rakendab tootjast sÔltumatut raamistikku OpenTracing API. Juhtige kasutajaliidese juurde jÀrgnevate kÀsureade abil:
NĂŒĂŒd minge aadressile ja valige teenus sa-web-app. Kui teenus ei ole avanevas menĂŒĂŒs nĂ€ha â pange lehelt tegevust vĂ”i genereerige tegevus ja vĂ€rskendage liidest. PĂ€rast seda vajutage nuppu Find Traces, mis nĂ€itab uusimaid jĂ€lgi â valige ĂŒkskĂ”ik milline â kuvatakse kĂ”igi jĂ€lgede ĂŒksikasjalik teave:
See jÀlgib:
- PĂ€ring jĂ”uab istio-ingressgateway (see on esimene suhtlemine ĂŒhe teenusega ja pĂ€ringu jaoks genereeritakse jĂ€lgimise ID), pĂ€rast mida suunab vĂ€rav pĂ€ringu teenusesse sa-web-app.
- Teenuses sa-web-app pĂ€ring haaratakse kinni Envoy sidecarâi poolt, luuakse spanâis "laste" (seetĂ”ttu nĂ€eme seda jĂ€lgimistes) ja suunatakse konteinerisse sa-web-app. ( â loogiline tööosa Jaeger'is, millel on nimi, töö algusaeg ja kestus. Spanâid vĂ”ivad olla sisemised ja jĂ€rjestatud. Suunatud tsĂŒkliline graaf spanâidest moodustab jĂ€lje. â tĂ”lkija mĂ€rkus.
- Siin töödeldakse pÀringut meetodi abil sentimentAnalysis. Need jÀljed on juba genereeritud rakenduse poolt, st nende jaoks olid vajalikud muudatused koodis.
- Sellest hetkest alates algatatakse POST-pÀring sa-logic. JÀlgimise ID peab olema edastatud sa-web-app.
- âŠ
MÀrkus: 4. sammul peab rakendus nÀgema Istio genereeritud pÀiseid ja edastama need edasistes pÀringutes, nagu on nÀidatud alloleval pildil:
(A) PĂ€iste edastamise eest vastutab Istio; (B) PĂ€iste eest vastutavad teenusedIstio teeb pĂ”hitegevuse, kuna genereerib sisenevate pĂ€ringute jaoks pĂ€iseid, loob igas sidecarâis uusi spanâe ja edastab need edasi. Siiski, kui teenustes ei tehta pĂ€istega tööd, siis on pĂ€ringu jĂ€lgimise tĂ€ispikkus kadunud.
On oluline arvesse vÔtta (edasi suunata) jÀrgmisi pÀiseid:
See ei ole keeruline ĂŒlesanne, kuid rakendamise lihtsustamiseks on juba olemas â nĂ€iteks teenuses sa-web-app edastab klient RestTemplate need pĂ€idikud, kui lihtsalt lisada teegid Jaeger ja OpenTracing .
Pange tÀhele, et rakendus Sentiment Analysis demonstreerib teostusi Flaski, Springi ja ASP.NET Core'i peal.
NĂŒĂŒd, kui on selge, mida me âkarbistâ (vĂ”i peaaegu âkarbistâ) saame, vaatame lĂ€hemalt tĂ€psustatavat marsruutimist, vĂ”rgu liikluse haldamist, turvalisust jne!
MÀrk. tÔlge.: selle kohta loe jÀrgmises osas Istio materjalidest, mille on koostanud Rinor Maloku, mille tÔlked jÀrgnevad meie blogis varsti. KUUDA (14. mÀrts): oletame avaldatud.
P.S. tÔlkija mÀrkused
Lugege ka meie blogist:
- âTagasi mikroteenuste juurde koos Istioâgaâ: , ;
- «»;
- «»;
- «»;
- «».
Allikas: habr.com







