Tagasi mikroteenustele koos Istio. Osa 1

Tagasi mikroteenustele koos Istio. Osa 1

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 circuit breaker muster klientides. Samuti on vajalik, et kogu sĂŒsteem ei kukuks kokku, seetĂ”ttu on vajalikud ajaĂŒlesanded ja bulkheads (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.

Tagasi mikroteenustele koos Istio. Osa 1

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

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

Tagasi mikroteenustele koos Istio. Osa 1
Kuidas on Envoy’s rakendatud korduskatseid ja circuit breaking’ut

KokkuvÔtteks:

  1. Envoy (rÀÀkides proxy-st, mis asub sidecar konteineris, mis levib ka nagu erinev toode — toimetaja mĂ€rkus) saadetakse pĂ€ring esimese teenuse B eksemplari juurde ja toimub tĂ”rge.
  2. Envoy Sidecar teeb uue katse (retry). (1)
  3. TÔrkepÀring naaseb selle esitanud proxy-le.
  4. 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:

Tagasi mikroteenustele koos Istio. Osa 1
Control Plane'i ja Data Plane'i vaheline koostöö

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

Tagasi mikroteenustele koos Istio. Osa 1
Illustreerimine Victoria Dimitrakopoulos: — 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 tasuta 300 dollarit.

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 ametlikust dokumentatsioonist. Seda kasutame Istio installimiseks mustrite genereerimiseks jÀrgmises jaotises.

Istio installimine

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

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

See kĂ€sk vĂ€ljastab Istio pĂ”hikomponendid faili istio.yaml. Oleme muutnud standardset ŃˆĐ°Đ±Đ»ĐŸĐœĐ° enda jaoks, mÀÀrates jĂ€rgmised parameetrid:

  • global.mtls.enabled seatud false (st mTLS autentimine on keelatud — tĂ”lkija mĂ€rkus), et lihtsustada meie tutvumist;
  • tracing.enabled lĂŒlitab sisse pĂ€ringute jĂ€lgimise Jaegeri abil;
  • kiali.enabled paigaldab Kiali klastrisse teenuste ja liikluse visualiseerimiseks;
  • grafana.enabled paigaldab Grafana kogutud mÔÔdikute visualiseerimiseks.

Kandke genereeritud ressursid kÀsu abil:

$ kubectl apply -f istio.yaml

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

NĂŒĂŒ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 Kubernetes’i sissejuhatuses.See on piisavalt keeruline, et demonstreerida Istio vĂ”imalusi praktikas.

Rakendus koosneb neljast mikroteenusest:

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

Tagasi mikroteenustele koos Istio. Osa 1

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

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

Teenuste 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

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

Me 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 (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:
- "*"

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 created

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

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

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:

  1. See VirtualService kÀsitleb pÀringuid, mis saabuvad kaudu http-gateway;
  2. Uues sihtkoht mÀÀratakse teenus, kuhu saadetakse pÀringud.
MĂ€rkus: Ülaltoodud konfiguratsioon salvestatakse faili 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 loodud

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

Tagasi mikroteenustele koos Istio. Osa 1
Istio-IngressGateway konfiguratsioon pÀringute marsruutimiseks

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

Tagasi mikroteenustele koos Istio. Osa 1

Grafana: metrikate visualiseerimine

Istios kogutud meetrikad saadetakse Prometheusele ja visualiseeritakse Grafana abil. JuurdepÀÀsuks Grafana halduskeskkonnale kÀivitage 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

KlĂ”psake menĂŒĂŒd Home vasakul ĂŒleval ja valige Istio Service Dashboard vasakus ĂŒlanurgas, alustades teenusest sa-web-app, et vaadata kogutud meetrikaid:

Tagasi mikroteenustele koos Istio. Osa 1

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

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:

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

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

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

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

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

Tagasi mikroteenustele koos Istio. Osa 1

See jÀlgimine nÀitab:

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


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:

Tagasi mikroteenustele koos Istio. Osa 1
(A) Peaeesed edastab Istio; (B) PĂ€idete eest vastutavad teenused

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

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

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

P.S. tÔlkijalt

Lugege ka meie blogist:

Allikas: habr.com

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


Olulised punktid:
  1. See VirtualService kÀsitleb pÀringuid, mis saabuvad kaudu http-gateway;
  2. Uues sihtkoht mÀÀ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:

Tagasi mikroteenustele koos Istio. Osa 1
Istio-IngressGateway konfiguratsioon pÀringute marsruutimiseks

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

Tagasi mikroteenustele koos Istio. Osa 1

Grafana: metrikate visualiseerimine

Istios kogutud meetrikad saadetakse Prometheusele ja visualiseeritakse Grafana abil. JuurdepÀÀsuks Grafana halduskeskkonnale kÀivitage allolev kÀsk, seejÀrel avage http://localhost:3000/:

KlĂ”psake menĂŒĂŒd Home vasakul ĂŒleval ja valige Istio Service Dashboard vasakus ĂŒlanurgas, alustades teenusest sa-web-app, et vaadata kogutud meetrikaid:

Tagasi mikroteenustele koos Istio. Osa 1

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:

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

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

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

Istios 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 http://localhost:16686/ 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:

Tagasi mikroteenustele koos Istio. Osa 1

See jÀlgimine nÀitab:

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


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:

Tagasi mikroteenustele koos Istio. Osa 1
(A) Peaeesed edastab Istio; (B) PĂ€idete eest vastutavad teenused

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

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

P.S. tÔlkijalt

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster