Tagasi mikroteenuste juurde koos Istio. Osa 1

Tagasi mikroteenuste juurde koos Istio. Osa 1

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 the circuit breaker pattern in the clients. Furthermore, to ensure that the entire system doesn't crash, we will require timeouts and bulkheads (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.

Tagasi mikroteenuste juurde koos Istio. Osa 1

MÀrkus: Artikkel eeldab, et teil on praktilised teadmised Kubernetesest. Vastupidisel juhul soovitan lugeda minu sissejuhatus Kubernetesesse 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.

Tagasi mikroteenuste juurde koos Istio. Osa 1
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.

Tagasi mikroteenuste juurde koos Istio. Osa 1
Kuidas on retries ja circuit breaking rakendatud Envoy's

KokkuvÔttes:

  1. Envoy (rÀÀkides proksist, mis asub sidecar-konteineris, mis levib ja nagu eraldi toode — kt. tĂ”lge) saadab pĂ€ringu esimesele teenuse B eksemplarile ja ilmneb rike.
  2. Envoy Sidecar pĂŒĂŒab uuesti (retry). (1)
  3. Viga saanud pÀring tagastatakse selle kutsunud proksile.
  4. 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:

Tagasi mikroteenuste juurde koos Istio. Osa 1
Control Plane'i ja Data Plane'i interaktsioon

Envoy'id (st data plane) on konfigureeritud Kubernetes CRD (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?'.

Tagasi mikroteenuste juurde koos Istio. Osa 1
Illustratsioon Victoria Dimitrakopoulos: — 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 tasuta $300.

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 ametlikus dokumentatsioonis. Seda kasutame Istio installimise mallide genereerimiseks jÀrgmiseks osaks.

Istio paigaldamine

Laadige Istio ressursid alla viimase vĂ€ljaande (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-system

LÔ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.yaml

See kÀsk genereerib Istio vÔtmekomponendid faili istio.yaml. Oleme kohandanud vaikimisi templati enda tarbeks, mÀÀrates jÀrgmised parameetrid:

  • global.mtls.enabled seatud vÀÀrtuseks false (st mTLS autentimine on keelatud — vt selgitust.), et lihtsustada meie tutvumise protsessi;
  • tracing.enabled lubab pĂ€ringute jĂ€lgimise Jaegeri abil;
  • kiali.enabled paigaldab Kiali klastrisse teenuste ja liikluse visualiseerimiseks;
  • grafana.enabled paigaldab Grafana kogutud metrikate visualiseerimiseks.

Kohandatud ressursid kehtib meeskonna poolt:

$ kubectl apply -f istio.yaml

Istio 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-system

NĂŒĂŒ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 Kubernetesesse tutvustavas artiklis.See on piisavalt keeruline, et nÀidata Istio vÔimekust praktikas.

Rakendus koosneb neljast mikroteenusest:

  1. Teenuse SA-Frontend, mis teenindab rakenduse frontendi Reactjs'i peal;
  2. Teenuse SA-WebApp, mis teenindab Sentiment Analysis pÀringuid;
  3. Teenuse SA-Logic, mis viib lĂ€bi sentiment-analĂŒĂŒsi;
  4. Teenuse SA-Feedback, mis kogutakse kasutajatelt tagasisidet analĂŒĂŒsi tĂ€psuse kohta.

Tagasi mikroteenuste juurde koos Istio. Osa 1

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 istio-mastery. 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 labeled

NĂŒĂŒ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 created

Teenuste 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          12m

Visuaalselt tundub see jÀrgmiselt:

Tagasi mikroteenuste juurde koos Istio. Osa 1
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.120

Me 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 (http-gateway.yaml):

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 created

NĂŒĂŒ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:

Tagasi mikroteenuste juurde koos Istio. Osa 1
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 (sa-virtualservice-external.yaml):

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:

  1. See VirtualService kehtib pÀringutele, mis tulevad http-gateway;
  2. V destination mÀÀratleb teenuse, kuhu pÀringud saadetakse.
MĂ€rkus: Ülaltoodud konfiguratsioon on salvestatud faili 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 loodud

MĂ€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:

Tagasi mikroteenuste juurde koos Istio. Osa 1
Istio-IngressGateway konfiguratsioon pÀringute suunamiseks

Sentiment 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 http://localhost:20001/, 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.

Tagasi mikroteenuste juurde koos Istio. Osa 1

Grafana: metrikate visualiseerimine

Istios kogutud metrikad jÔuavad Prometheusesse ja visualiseeritakse Grafanas. JuurdepÀÀsemiseks Grafana administratiivliidesele tÀitke allolev kÀsk, seejÀrel avage http://localhost:3000/:

$ kubectl -n istio-system port-forward 
    $(kubectl -n istio-system get pod -l app=grafana 
    -o jsonpath={.items[0].metadata.name}) 3000

Kliki vasakult ĂŒlanurgast menĂŒĂŒd Avaleht ja vali Istio teenuse armatuurlaud vasakus ĂŒlanurgas, alusta teenusest sa-web-app, et vaadata kogutud mÔÔdikuid:

Tagasi mikroteenuste juurde koos Istio. Osa 1

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; done

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:

Tagasi mikroteenuste juurde koos Istio. Osa 1
TĂŒĂŒpiline nĂ€ide juhuslikust ebaĂ”nnestunud pĂ€ringust

PĂ€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:

Tagasi mikroteenuste juurde koos Istio. Osa 1
PĂ€ringu identifitseerimiseks kasutatakse TraceId

Istios 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}') 16686

NĂŒĂŒd minge aadressile http://localhost:16686/ 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:

Tagasi mikroteenuste juurde koos Istio. Osa 1

See jÀlgib:

  1. 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.
  2. 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. (Span — 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)
  3. Siin töödeldakse pÀringut meetodi abil sentimentAnalysis. Need jÀljed on juba genereeritud rakenduse poolt, st nende jaoks olid vajalikud muudatused koodis.
  4. Sellest hetkest alates algatatakse POST-pÀring sa-logic. JÀlgimise ID peab olema edastatud sa-web-app.
  5. 


MÀrkus: 4. sammul peab rakendus nÀgema Istio genereeritud pÀiseid ja edastama need edasistes pÀringutes, nagu on nÀidatud alloleval pildil:

Tagasi mikroteenuste juurde koos Istio. Osa 1
(A) PĂ€iste edastamise eest vastutab Istio; (B) PĂ€iste eest vastutavad teenused

Istio 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-context

See ei ole keeruline ĂŒlesanne, kuid rakendamise lihtsustamiseks on juba olemas mitmeid teeke — nĂ€iteks teenuses sa-web-app edastab klient RestTemplate need pĂ€idikud, kui lihtsalt lisada teegid Jaeger ja OpenTracing oma sĂ”ltuvustesse.

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): Teine osa oletame avaldatud.

P.S. tÔlkija mÀrkused

Lugege ka meie blogist:

Allikas: habr.com

marsruut:
- sihtkoht:
host: sa-frontend # 2
port:
number: 80


Olulised punktid:
  1. See VirtualService kehtib pÀringutele, mis tulevad http-gateway;
  2. V destination mÀÀ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:

Tagasi mikroteenuste juurde koos Istio. Osa 1
Istio-IngressGateway konfiguratsioon pÀringute suunamiseks

Sentiment 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 http://localhost:20001/, 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.

Tagasi mikroteenuste juurde koos Istio. Osa 1

Grafana: metrikate visualiseerimine

Istios kogutud metrikad jÔuavad Prometheusesse ja visualiseeritakse Grafanas. JuurdepÀÀsemiseks Grafana administratiivliidesele tÀitke allolev kÀsk, seejÀrel avage http://localhost:3000/:

Kliki vasakult ĂŒlanurgast menĂŒĂŒd Avaleht ja vali Istio teenuse armatuurlaud vasakus ĂŒlanurgas, alusta teenusest sa-web-app, et vaadata kogutud mÔÔdikuid:

Tagasi mikroteenuste juurde koos Istio. Osa 1

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:

Tagasi mikroteenuste juurde koos Istio. Osa 1
TĂŒĂŒpiline nĂ€ide juhuslikust ebaĂ”nnestunud pĂ€ringust

PĂ€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:

Tagasi mikroteenuste juurde koos Istio. Osa 1
PĂ€ringu identifitseerimiseks kasutatakse TraceId

Istios kasutatakse Jaeger Tracerit, mis rakendab tootjast sÔltumatut raamistikku OpenTracing API. Juhtige kasutajaliidese juurde jÀrgnevate kÀsureade abil:

NĂŒĂŒd minge aadressile http://localhost:16686/ 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:

Tagasi mikroteenuste juurde koos Istio. Osa 1

See jÀlgib:

  1. 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.
  2. 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. (Span — 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.
  3. Siin töödeldakse pÀringut meetodi abil sentimentAnalysis. Need jÀljed on juba genereeritud rakenduse poolt, st nende jaoks olid vajalikud muudatused koodis.
  4. Sellest hetkest alates algatatakse POST-pÀring sa-logic. JÀlgimise ID peab olema edastatud sa-web-app.
  5. 


MÀrkus: 4. sammul peab rakendus nÀgema Istio genereeritud pÀiseid ja edastama need edasistes pÀringutes, nagu on nÀidatud alloleval pildil:

Tagasi mikroteenuste juurde koos Istio. Osa 1
(A) PĂ€iste edastamise eest vastutab Istio; (B) PĂ€iste eest vastutavad teenused

Istio 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 mitmeid teeke — nĂ€iteks teenuses sa-web-app edastab klient RestTemplate need pĂ€idikud, kui lihtsalt lisada teegid Jaeger ja OpenTracing oma sĂ”ltuvustesse.

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): Teine osa oletame avaldatud.

P.S. tÔlkija mÀrkused

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster