Ku laabo adeegaha yaryar ee Istio. Qaybta 1

Ku laabo adeegaha yaryar ee Istio. Qaybta 1

Ogow. turjumiMeshes-ka adeeggu waxa uu noqday xal ku haboon kaabayaasha casriga ah ee codsiyada ka dib qaab dhismeedka adeega-yaraha. In kasta oo Istio laga yaabo inuu ku jiro bushimaha injineero badan oo DevOps ah, waa badeecad cadaalad ah oo cusub, in kasta oo la dhammaystiro marka la eego awoodaha ay bixiso, waxay u baahan kartaa waqti aad u badan si aad u barato. Injineer Jarmal ah Rinor Maloku, oo mas'uul ka ah xisaabinta daruuraha macaamiisha waaweyn ee shirkadda isgaarsiinta Orange Networks, ayaa qoray qalab taxane ah oo cajiib ah oo kuu oggolaanaya inaad si deg deg ah oo qoto dheer u dhex gasho Istio. Wuxuu ku bilaabay sheekadiisa waxa uu Istio qaban karo guud ahaan iyo sida aad si dhakhso ah ugu arki karto indhahaaga.

Istio - Mashruuc Isha Furan oo la sameeyay iyadoo lala kaashanayo kooxaha Google, IBM iyo Lyft. Waxay xallisaa kakanaanta ka soo baxa codsiyada ku salaysan adeeg-yaraha, sida:

  • Maamulka GaadiidkaWakhtiga ka baxay, isku-dayga, dheelli-tirka culayska;
  • Amniga: xaqiijinta dhamaadka isticmaalaha iyo oggolaanshaha;
  • U fiirsashada: baafinta, la socodka, gaynta.

Dhammaan kuwan waxaa lagu xallin karaa heerka codsiga, laakiin intaa ka dib adeegyadaadu ma sii ahaan doonaan "micro". Dhammaan dadaalka dheeraadka ah ee lagu xallinayo dhibaatooyinkan waa luminta hantida shirkadda oo si toos ah loogu isticmaali karo qiimaha ganacsiga. Bal aan tusaale u soo qaadano:

Maareeyaha Mashruuca: Muddo intee le'eg ayay qaadanaysaa in lagu daro sifada jawaab celinta?
Horumariye: Laba sprints.

Xildhibaan: Waa maxay?... Waa CRUD kaliya!
R: Samaynta CRUD waa qaybta ugu fudud, laakiin waxaan wali u baahanahay inaan xaqiijino oo aan ogolaano isticmaalayaasha iyo adeegyada. Maadaama shabakadu tahay mid aan la isku halayn karin, waxaad u baahan doontaa inaad fuliso codsiyada soo noqnoqda, iyo sidoo kale qaabka wareegga wareegga macaamiisha. Sidoo kale, si aad u hubiso in nidaamka oo dhan aanu shil ku iman, waxaad u baahan doontaa waqti-gooyo iyo bulkheads (si aad u hesho tafaasiil dheeraad ah oo ku saabsan labada qaab ee la soo sheegay, eeg dambe ee maqaalka - qiyaastii. tarjumaad.), iyo si loo ogaado dhibaatooyinka, la socodka, raadinta, [...]

MP: Oh, markaas aan gelinno sifadan adeegga Alaabta.

Waxaan u maleynayaa in fikraddu ay caddahay: qaddarka tillaabooyinka iyo dadaalka loo baahan yahay in lagu daro hal adeeg waa mid aad u weyn. Maqaalkan, waxaan ku eegi doonaa sida Istio uu uga saaro dhammaan kakanaanta kor ku xusan (taas oo aan loogu talagalin inay noqoto macquul ganacsi) adeegyada.

Ku laabo adeegaha yaryar ee Istio. Qaybta 1

tacliiqMaqaalkani waxa uu u malaynayaa in aad aqoon shaqo u leedahay Kubernetes. Haddii kale, waxaan ku talinayaa in la akhriyo hordhacayga Kubernetes oo kaliya intaa ka dib sii wad akhrinta qoraalkan.

Fikradda ah

Adduunyada aan Istio lahayn, hal adeeg ayaa si toos ah u codsada mid kale, haddii ay dhacdo guuldarro, adeeggu waa inuu iskiis u maamulaa: samee isku day cusub, bixi waqti xaddidan, fur furaha wareegga, iwm.

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
Taraafikada shabakada ee Kubernetes

Istio waxay bixisaa xal gaar ah, oo gebi ahaanba ka soocay adeegyada oo ku shaqeeya faragelinta isgaarsiinta shabakada. Oo sidaas ayay u fulisaa:

  • dulqaadka qaladka: Iyada oo ku saleysan code-ka jawaabta, waxay fahamsan tahay in codsigu guuldareystay oo dib loo fulinayo.
  • Soo-bandhigista Canary: waxa uu u jiheeyaa kaliya boqolkiiba go'an ee codsiyada nooca cusub ee adeega.
  • Kormeerka iyo cabbiradaMuddo intee le'eg ayay qaadatay in adeeggu ka jawaabo?
  • Baafinta iyo La fiirsashada: Ku dara madax gaar ah codsi kasta oo ka raad raacaa kutlada.
  • Amniga: Soo celisa summada JWT, xaqiijisa oo oggolaada isticmaalayaasha.

Kuwani waa dhawr ka mid ah fursadaha (dhab ahaantii dhowr!) si ay kuu xiiso galiyaan. Hadda aan u dhex galno faahfaahinta farsamada!

Dhismaha Istio

Istio waxay ka hortagtaa dhammaan taraafikada shabakada waxayna ku dabaqdaa xeerar, isaga oo geliya wakiil caqli-gal ah oo qaab weel dhinaceed ah mid kasta. Wakiilo dhaqaajiya dhammaan awoodaha waxay sameeyaan a Diyaarada Xogta, waxaana si firfircoon loo habayn karaa iyadoo la isticmaalayo Diyaaradda Xakamaynta.

Diyaarada Xogta

Proxies-ka la geliyo pods-ka ayaa u oggolaanaya Istio inuu si fudud u buuxiyo shuruudaha aan u baahanahay. Tusaale ahaan, aynu eegno dib u tijaabinta iyo hawlaha wareegyada.

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
Sida dib-u-eegisyada iyo kala-goynta wareegyada loogu fuliyo Ergayga

Soo koobid:

  1. Ergayga (waxaanu ka hadlaynaa wakiil ku yaal weel dhinaceed ah, kaas oo loo qaybiyo sida alaab gaar ah - qiyaastii. turjumi.) wuxuu codsi u diraa heerka koowaad ee adeega B wuuna ku guuldareystay.
  2. Ergeyga Sidecar ayaa mar kale isku dayaya (dib u tijaabi). (1)
  3. Codsigu wuu guuldarraystay waxaana lagu celiyaa wakiilkii u yeedhay.
  4. Tani waxay fureysaa Wareegtada Wareegga waxayna wacdaa adeegga xiga ee codsiyada xiga. (2)

Tani waxay ka dhigan tahay inaadan isticmaalin maktabad kale oo Dib-u-isku-day ah, maahan inaad adigu sameysato hirgelinta wareegga wareegga iyo Raadinta Adeegga ee luuqadda barnaamijka X, Y ama Z. Dhammaan waxaas iyo wax ka badan ayaa laga heli karaa sanduuqa dhexdiisa gudaha Istio oo uma baahna maya isbeddelka koodka.

Wayn! Hadda waxaa laga yaabaa inaad rabto inaad safar la baxdo Istio, laakiin wali waxaad haysataa xoogaa shaki ah, su'aalo furan. Haddii tani ay tahay xal caalami ah oo loogu talagalay dhammaan xaaladaha nolosha, markaa waxaad leedahay shaki dabiici ah: ka dib, dhammaan xalalka noocaas ah ee dhabta ah waxay u noqdaan kuwo aan ku habboonayn kiis kasta.

Ugu dambayntiina waxaad waydiisaa: "Miyaa la beddeli karaa?"

Hadda waxaad diyaar u tahay safarka badda, aan is barano Diyaaradda Xakamaynta.

Diyaaradda Xakamaynta

Waxay ka kooban tahay saddex qaybood: Pilot, Mashiinka ΠΈ khan, kuwaas oo ka wada shaqeeya habaynta Ergooyinka si ay u maraan taraafikada, dhaqan geliyaan siyaasadaha, iyo ururinta xogta telemetry. Nidaam ahaan waxay u egtahay sidan:

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
Is dhexgalka Diyaaradda Xakamaynta ee Diyaaradda Xogta

Ergada (sida diyaarada xogta) ayaa lagu habeeyey iyadoo la isticmaalayo Kubernetes CRD (Qeexitaannada Kheyraadka Gaarka ah) waxaa qeexay Istio oo si gaar ah loogu talagalay ujeedadan. Waxa ay tani adiga kugu tahay waa inay u muuqdaan inay yihiin kheyraad kale oo Kubernetes ah oo leh eray-bixin la yaqaan. Marka la abuuro, kheyraadkan waxaa qaadi doonta diyaaradda kontoroolka waxaana lagu dabaqi doonaa Ergada.

Xiriirka adeegyada Istio

Waxaan ku sifeynay xiriirka Istio ee adeegyada, laakiin ma ahan dhanka kale: sidee ayay adeegyadu ula xiriiraan Istio?

Si daacad ah, adeegyadu waxay ogyihiin joogitaanka Istio sida kalluunku u yahay biyaha marka ay is weydiiyaan, "Waa maxay biyuhu si kastaba?"

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
Sawir Victoria DimitakopoulosSideed u jeceshahay biyaha? - si kastaba waa maxay biyuhu?

Sidaa darteed, waxaad qaadan kartaa koox shaqo ka dib markaad geyso qaybaha Istio, adeegyada ku yaal waxay sii wadi doonaan inay shaqeeyaan, ka dib markaad ka saarto qaybahan, wax waliba way fiicnaan doonaan mar kale. Way caddahay in kiiskan aad waayi doonto awoodaha uu bixiyay Istio.

Aragti nagu filan - aan ku dhaqan galno aqoontan!

Istio ficil ahaan

Istio wuxuu u baahan yahay kutlada Kubernetes oo leh ugu yaraan 4 vCPUs iyo 8 GB ee RAM la heli karo. Si aad si dhakhso ah u dejiso koox ah oo aad raacdo tilmaamaha maqaalka, waxaan ku talinayaa isticmaalka Google Cloud Platform, kaas oo siiya isticmaalayaasha cusub $300 oo bilaash ah.

Ka dib markii la abuuro koox iyo habaynta gelitaanka Kubernetes iyada oo loo marayo utility console, waxaad ku rakibi kartaa Istio maareeyaha xirmada Helm.

Ku rakibida Helm

Ku rakib macmiilka Helm kombiyuutarkaaga, sida lagu sharaxay dukumeenti rasmi ah. Waxaan tan u isticmaali doonaa si aan u soo saarno habab lagu rakibo Istio qaybta xigta.

Ku rakibida Istio

Ka soo deji ilaha Istio sii dayntii ugu dambeysay (Xiriirka qoraaga asalka ah ee nooca 1.0.5 ayaa loo beddelay kan hadda jira, ie. 1.0.6 - qiyaastii. tarjumaad.), soo saar waxa ku jira hal hage, oo aan wici doono hadda ka dib [istio-resources].

Si aad si sahal ah u aqoonsato ilaha Istio, ka samee meel magac ah kooxda K8s istio-system:

$ kubectl create namespace istio-system

Buuxi rakibaadda adiga oo aadaya hagaha [istio-resources] oo socodsiiya amarka:

$ 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

Amarkani wuxuu soo saari doonaa qaybaha muhiimka ah ee Istio faylka istio.yaml. Waxaan wax ka bedelnay qaab-dhismeedka caadiga ah si aan nafteena ku habboono, annagoo qeexnay cabbirrada soo socda:

  • global.mtls.enabled lagu rakibay false (tusaale ahaan, aqoonsiga mTLS waa naafo - qiyaastii.)si loo fududeeyo habka shukaansiga;
  • tracing.enabled waxaa ka mid ah raadinta codsiga iyadoo la isticmaalayo Jaeger;
  • kiali.enabled Ku rakibida Kiali koox si ay u aragto adeegyada iyo taraafikada;
  • grafana.enabled wuxuu rakibaa Grafana si uu u arko cabbirrada la ururiyey.

Aan u isticmaalno agabka la soo saaray amarka:

$ kubectl apply -f istio.yaml

Ku rakibida Istio ee kutlada waa dhammaatay! Sug ilaa dhammaan galalka ay ku jiraan booska magaca istio-system awood u yeelan doonaan Running ama Completedadigoo raacaya amarka hoose:

$ kubectl get pods -n istio-system

Hadda waxaan diyaar u nahay inaan ku sii wadno qaybta xigta, halkaas oo aan ka heli doono codsiga iyo socodsiinta.

Naqshadeynta codsiga falanqaynta dareenka

Aynu isticmaalno tusaalaha arjiga falanqaynta dareenka ee adeeg-yaraha ee loo adeegsaday kuwan hore loo sheegay Maqaalka hordhaca ah ee Kubernetes. Waa mid adag oo ku filan in lagu muujiyo kartida Istio ficil ahaan.

Codsigu wuxuu ka kooban yahay afar adeeg-yar:

  1. adeegga SA-Frontend, kaas oo u adeega afka hore ee codsiga Reactjs;
  2. adeegga SA-WebApp, kaas oo u adeega weydiimaha falanqaynta dareenka;
  3. adeegga SA-Logic, taas oo iskeed u shaqeysa falanqaynta dareenka;
  4. adeegga SA-celinta, kaas oo ka hela jawaab celin isticmaalayaasha ku saabsan saxnaanta falanqaynta.

Ku laabo adeegaha yaryar ee Istio. Qaybta 1

Jaantuskan, marka lagu daro adeegyada, waxaanu sidoo kale ku aragnaa Kontoroolka Gudaha, kaas oo Kubernetes ku yaala wadooyinka soo gala codsiyada adeegyada ku habboon. Istio waxay isticmaashaa fikrad la mid ah gudaha Gateway-ka Gateway, tafaasiil dheeri ah oo ku saabsan taas ayaa raaci doonta.

Ku socodsiinta codsiga wakiil ka socda Istio

Hawlgallada dheeraadka ah ee lagu sheegay maqaalka, xidho kaydkaaga istio-sare. Waxay ka kooban tahay codsiga iyo muujinta Kubernetes iyo Istio.

Gelida gawaarida dhinaceeda

Gelida waa la samayn karaa si toos ah ama gacanta. Si aad si otomaatig ah u geliso weelasha baabuurta dhinaceeda, waxaad u baahan doontaa inaad calaamad u dejiso meesha magaca istio-injection=enabled, kaas oo lagu sameeyo amarka soo socda:

$ kubectl label namespace default istio-injection=enabled
namespace/default labeled

Hadda boodh kasta oo la geyn doono goobta magaca caadiga ah (default) waxay heli doontaa weelkeeda dhinaca baabuurka. Si loo xaqiijiyo tan, aynu dirno arjiga tijaabada anagoo tagayna tusaha xididka ee kaydka [istio-mastery] oo socodsiiya amarka soo socda:

$ 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

Markaan adeegyadii geynay, aan eegno in boorashyadu ay leeyihiin laba weel (oo leh adeegga laftiisa iyo baabuurka dhinaceeda) annagoo ku shaqeynayna amarka kubectl get pods iyo hubinta in tiirka hoostiisa READY qiimo cayiman 2/2, oo astaan ​​u ah in labada weel ay socdaan:

$ 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

Muuqaal ahaan waxay u egtahay sidan:

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
Ergeyga wakiil ka ah mid ka mid ah galalka

Hadda arjigu wuu shaqaynayaa, waxaanu u baahan doonaa inaanu ogolaano taraafikada soo galaya inay soo galaan codsiga.

Gateway ka soo gelida

Habka ugu fiican ee tan lagu gaari karo (u ogolow taraafikada kooxda) waa la maraa Gateway ka soo gelida gudaha Istio, taas oo ku taal "cirka" kooxda waxayna kuu ogolaaneysaa inaad awood u yeelatid sifooyinka Istio sida jiheynta, isku dheelitirka culeyska, amniga iyo la socodka gaadiidka soo socda.

Qaybta Ingress Gateway iyo adeegga u soo gudbiya dibadda ayaa lagu rakibay kutlada inta lagu jiro rakibidda Istio. Si aad u ogaato ciwaanka IP-ga ee adeega, orod:

$ 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

Waxaan sii wadi doonaa gelitaanka arjiga annagoo adeegsanayna IP-kan (waxaan u tixraaci doonaa sida EXTERNAL-IP), si ay ugu habboonaato waxaan u qori doonaa qiimaha doorsoome:

$ EXTERNAL_IP=$(kubectl get svc -n istio-system 
  -l app=istio-ingressgateway 
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

Haddii aad isku daydo inaad hadda ka gasho IP-gan browserka, waxaad heli doontaa cilad aan la heli karin adeegga, sababtoo ah Sida caadiga ah Istio wuxuu xannibaa dhammaan taraafikada soo galaya, Gateway weli lama qeexin.

Ilaha Gateway

Gateway waa CRD (Qeexida Kheyraadka Gaarka ah) ee Kubernetes, oo lagu qeexay ka dib markii lagu rakibo Istio kooxda oo awood u leh in lagu qeexo dekedaha, borotokoolka iyo martigeliyayaasha kuwaas oo aan rabno inaan u oggolaano taraafikada soo socota.

Xaaladeena, waxaan rabnaa inaan u oggolaano taraafikada HTTP ee dekedda 80 dhammaan martigeliyayaasha. Hawsha waxaa lagu fuliyay qeexida soo socota (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:
- "*"

Qaabayntan wax sharraxaad ah uma baahna marka laga reebo cidda dooratay istio: ingressgateway. Xulashadan waxaan ku qeexi karnaa Kadinka Ingress-ka ee lagu dabaqayo qaabeynta. Xaaladeena, kani waa kantaroolaha Ingress Gateway, kaas oo si caadi ah loogu rakibay Istio.

Qaabaynta waxa lagu dabaqaa adoo wacaya amarka soo socda:

$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created

Albaabka hadda waxa uu ogolyahay gelitaanka dekedda 80, laakiin ma laha fikrad halka loo maro codsiyada. Tan waxaad u baahan doontaa Adeegyada Virtual.

Ilaha Adeegga Virtual

Adeegga 'VirtualService' wuxuu u sheegaa Kadinka Ingress-ka sida loo maro codsiyada loo ogolyahay kooxda dhexdeeda.

Codsiyada codsigayaga ka imanaya http-gateway waa in loo diraa sa-frontend, sa-web-app iyo adeegyada jawaab celinta:

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
Wadooyinka u baahan in lagu habeeyo VirtualServices

Aynu eegno codsiyada loo diro SA-Frontend:

  • Ciyaarta saxda ah ee jidka / waa in loo diraa SA-Frontend si loo helo index.html;
  • Wadooyin hore loo sii cayimay /static/* waa in loo diraa SA-Frontend si loo helo faylal aan caadi ahayn oo loo isticmaalo dhinaca hore, sida CSS iyo JavaScript;
  • Wadooyinka ku habboon tibaaxaha caadiga ah '^.*.(ico|png|jpg)$', waa in loo diraa SA-Frontend, sababtoo ah Kuwani waa sawirada bogga lagu soo bandhigay.

Hirgelinta waxaa lagu gaaraa qaabeynta soo socota (sa-virtualservice-external.yaml):

kind: VirtualService
metadata:
  name: sa-external-services
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway                      # 1
  http:
  - match:
    - uri:
        exact: /
    - uri:
        exact: /callback
    - uri:
        prefix: /static
    - uri:
        regex: '^.*.(ico|png|jpg)

Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  1. Π­Ρ‚ΠΎΡ‚ VirtualService относится ΠΊ запросам, приходящим Ρ‡Π΅Ρ€Π΅Π· http-gateway;
  2. Π’ destination опрСдСляСтся сСрвис, ΠΊΡƒΠ΄Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ запросы.
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π²Ρ‹ΡˆΠ΅ хранится Π² Ρ„Π°ΠΉΠ»Π΅ sa-virtualservice-external.yaml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ содСрТит настройки для ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² SA-WebApp ΠΈ SA-Feedback, Π½ΠΎ Π±Ρ‹Π» сокращён здСсь Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ для лаконичности. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ VirtualService Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ:
$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Когда ΠΌΡ‹ примСняСм рСсурсы Istio, Kubernetes API Server создаёт событиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Istio Control Plane, ΠΈ ΡƒΠΆΠ΅ послС этого новая конфигурация примСняСтся ΠΊ прокси-сСрвСрам Envoy ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ pod'Π°. А ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Ingress Gateway прСдставляСтся ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹ΠΌ Envoy, сконфигурированным Π² Control Plane. Всё это Π½Π° схСмС выглядит Ρ‚Π°ΠΊ:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1
ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Istio-IngressGateway для ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ запросов

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Sentiment Analysis стало доступным ΠΏΠΎ http://{EXTERNAL-IP}/. НС ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅, Ссли Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ статус Not Found: ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся Ρ‡ΡƒΡ‚ΡŒ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ конфигурация вступила Π² силу ΠΈ кэши Envoy обновились.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ, ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ (Π΅Π³ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для наглядности Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… дСйствиях β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².).

Kialiβ€Š: Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΡŒ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² административный интСрфСйс Kiali, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

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

… ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ http://localhost:20001/, залогинившись ΠΏΠΎΠ΄ admin/admin. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ мноТСство ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… возмоТностСй, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Istio, Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвисов ΠΏΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, собранной ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π΅ сСтСвых запросов, получСния ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π½Π° вопросы Β«ΠšΡ‚ΠΎ ΠΊ ΠΊΠΎΠΌΡƒ обращаСтся?Β», Β«Π£ ΠΊΠ°ΠΊΠΎΠΉ вСрсии сСрвиса Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ сбои?Β» ΠΈ Ρ‚.ΠΏ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ возмоТности Kiali ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС β€” ΠΊ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ с Grafana.

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1

Grafana: визуализация ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ

Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ Π² Istio ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Prometheus ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с Grafana. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² административный интСрфСйс Grafana, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½ΠΈΠΆΠ΅, послС Ρ‡Π΅Π³ΠΎ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ 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

ΠšΠ»ΠΈΠΊΠ½ΡƒΠ² Π½Π° мСню Home слСва свСрху ΠΈ Π²Ρ‹Π±Ρ€Π°Π² Istio Service Dashboard Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ, Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с сСрвиса sa-web-app, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° собранныС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1

Π—Π΄Π΅ΡΡŒ нас ΠΆΠ΄Ρ‘Ρ‚ пустоС ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ скучноС прСдставлСниС β€” руководство Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΆΠ΅ создадим Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$ while true; do 
    curl -i http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

Π’ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ симпатичныС Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Π° Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ β€” Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты Prometheus для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ Grafana для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, Ρ‡Ρ‚ΠΎ позволят Π½Π°ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, состоянии Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΡ…/Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ сСрвисов Π½Π° протяТСнии Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

НаконСц, посмотрим Π½Π° трассировку запросов Π² сСрвисах.

Jaegerβ€Š: трассировка

Врассировка Π½Π°ΠΌ потрСбуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ большС Ρƒ нас сСрвисов, Ρ‚Π΅ΠΌ слоТнСС Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ сбоя. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° простой случай ΠΈΠ· ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½ΠΈΠΆΠ΅:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1
Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ случайного Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ запроса

Запрос ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚, ΠΏΠ°Π΄Π°Π΅Ρ‚ β€” Π² Ρ‡Ρ‘ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°? ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ сСрвис? Или Π²Ρ‚ΠΎΡ€ΠΎΠΉ? Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΅ΡΡ‚ΡŒ Π² ΠΎΠ±ΠΎΠΈΡ… β€” Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π»ΠΎΠ³ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ. Как часто Π²Ρ‹ Π»ΠΎΠ²ΠΈΠ»ΠΈ сСбя Π·Π° Ρ‚Π°ΠΊΠΈΠΌ занятиСм? Наша Ρ€Π°Π±ΠΎΡ‚Π° большС ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π° Π½Π΅ разработчиков…

Π­Ρ‚ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространённая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² микросСрвисах ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠ½Π° распрСдСлёнными систСмами трассировки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сСрвисы ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, послС Ρ‡Π΅Π³ΠΎ эта информация пСрСнаправляСтся Π² систСму трассировки, Π³Π΄Π΅ ΠΎΠ½Π° сопоставляСтся с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ запроса. Π’ΠΎΡ‚ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1
Для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ запроса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ TraceId

Π’ Istio ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Jaeger Tracer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ нСзависимый ΠΎΡ‚ Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ² Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ OpenTracing API. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйсу Jaeger ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° http://localhost:16686/ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ сСрвис sa-web-app. Если сСрвис Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΌ мСню β€” проявитС/сгСнСрируйтС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π½Π° страницС ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ интСрфСйс. ПослС этого Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Find Traces, которая ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ самыС послСдниС трСйсы β€” Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ любой β€” покаТСтся дСтализированная информация ΠΏΠΎ всСм трСйсам:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1

Π­Ρ‚ΠΎΡ‚ трСйс ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚:

  1. Запрос ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² istio-ingressgateway (это ΠΏΠ΅Ρ€Π²ΠΎΠ΅ взаимодСйствиС с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· сСрвисов, ΠΈ для запроса гСнСрируСтся Trace ID), послС Ρ‡Π΅Π³ΠΎ шлюз направляСт запрос Π² сСрвис sa-web-app.
  2. Π’ сСрвисС sa-web-app запрос подхватываСтся Envoy sidecar'ΠΎΠΌ, создаётся Β«Ρ€Π΅Π±Ρ‘Π½ΠΎΠΊΒ» Π² span'Π΅ (поэтому ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π² трСйсах) ΠΈ пСрСнаправляСтся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ sa-web-app. (Span β€” логичСская Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Jaeger, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, врСмя Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π΅Ρ‘ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Span'Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ упорядочСнными. ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ацикличСский Π³Ρ€Π°Ρ„ ΠΈΠ· span'ΠΎΠ² ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ trace. β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².)
  3. Π—Π΄Π΅ΡΡŒ запрос обрабатываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ sentimentAnalysis. Π­Ρ‚ΠΈ трСйсы ΡƒΠΆΠ΅ сгСнСрированы ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‚.Π΅. для Π½ΠΈΡ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ измСнСния Π² ΠΊΠΎΠ΄Π΅.
  4. Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° инициируСтся POST-запрос Π² sa-logic. Trace ID Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡˆΠ΅Π½ ΠΈΠ· sa-web-app.
  5. …

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: На 4 шагС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, сгСнСрированныС Istio, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ запросы, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΆΠ΅:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1
(A) Π—Π° проброс Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Istio; (B) Π—Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ сСрвисы

Istio Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‚.ΠΊ. Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ для входящих запросов, создаёт Π½ΠΎΠ²Ρ‹Π΅ span'Ρ‹ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ sidecare'Π΅ ΠΈ пробрасываСт ΠΈΡ…. Однако Π±Π΅Π· Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСрвисов ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ трассировки запроса Π±ΡƒΠ΄Π΅Ρ‚ утСрян.

НСобходимо ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ (ΠΏΡ€ΠΎΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ) ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ:

x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

Π­Ρ‚ΠΎ нСслоТная Π·Π°Π΄Π°Ρ‡Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ для упрощСния Π΅Ρ‘ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡƒΠΆΠ΅ сущСствуСт мноТСство Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² сСрвисС sa-web-app ΠΊΠ»ΠΈΠ΅Π½Ρ‚ RestTemplate пробрасываСт эти Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Ссли просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Jaeger ΠΈ OpenTracing Π² Π΅Π³ΠΎ зависимости.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Sentiment Analysis дСмонстрируСт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Flask, Spring ΠΈ ASP.NET Core.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° стало ясно, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ (ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Β«ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈΒ»), рассмотрим вопросы Ρ‚ΠΎΠ½ΠΊΠΎ настраиваСмой ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, управлСния сСтСвым Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ, бСзопасности ΠΈ Ρ‚.ΠΏ.!

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: ΠΎΠ± этом Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΏΠΎ Istio ΠΎΡ‚ Rinor Maloku, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π² нашСм Π±Π»ΠΎΠ³Π΅ Π² блиТайшСС врСмя. UPDATE (14 ΠΌΠ°Ρ€Ρ‚Π°): Вторая Ρ‡Π°ΡΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π°.

P.S. ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

route:
- destination:
host: sa-frontend # 2
port:
number: 80

Qodobbada muhiimka ah:

  1. Adeeggan Virtual waxa loola jeedaa codsiyada soo socda http-gateway;
  2. Π’ destination Adeegga codsiyada loo soo diro waa la go'aamiyay.

tacliiqQaabaynta sare waxa lagu kaydiyaa fayl sa-virtualservice-external.yaml, kaas oo sidoo kale ka kooban jaangooyooyin loogu talagalay marinka SA-WebApp iyo SA-Feedback, laakiin halkan lagu soo koobay maqaalka si kooban.

Aan codsano VirtualService annagoo waca:


tacliiqMarka aan isticmaalno ilaha Istio, Kubernetes API Server wuxuu abuuraa dhacdo ay heshay Diyaaradda Xakamaynta Istio, ka dibna qaabaynta cusub ayaa lagu dabaqayaa wakiil kasta oo Ergeyga ah. Iyo kontoroolka Gateway-ga Ingress-ka ayaa u muuqda inuu yahay Ergeyga kale ee lagu habeeyay Diyaaradda Xakamaynta. Waxaas oo dhami waxay u eg yihiin sidan jaantuska:

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
Qaabeynta Istio-IngressGateway ee habaynta codsiga

Codsiga Falanqaynta Dareenka ayaa hadda la heli karaa http://{EXTERNAL-IP}/. Ha werwerin haddii aad hesho xaalad aan la helin: Mararka qaarkood waxa ay qaadataa wax yar in habayntu dhaqan gasho oo kaydinta Ergadu in ay cusboonaysiiso.

Kahor intaadan sii wadin, la ciyaar abka waxoogaa si aad u abuurto taraafikada. (joogitaanka ayaa lagama maarmaan u ah caddaynta ficilada xiga - qiyaastii. transl.).

Kiali: fiirsashada

Si aad u hesho interface-ka maamulka Kiali, ku orod amarka soo socda:


... oo furan http://localhost:20001/, Gelida sida admin/admin. Halkan waxaad ka heli doontaa sifooyin badan oo faa'iido leh, tusaale ahaan, si aad u hubiso qaabaynta qaybaha Istio, sawir adeegyada adoo isticmaalaya macluumaadka laga soo ururiyay codsiyada shabakada, u hel jawaabaha su'aalaha "Yaa la xidhiidhaya?", "Nooca adeegga ayaa la kulma guuldarrooyinka? iyo wixi la mida. Guud ahaan, sahamin kartida Kiali ka hor intaadan u dhaqaaqin inaad ku sawirto mitirka Grafana.

Ku laabo adeegaha yaryar ee Istio. Qaybta 1

Grafana: metrics visualization

Metrics laga soo ururiyay Istio waxay galaan Prometheus waxaana lagu sawiray Grafana. Si aad u hesho interface-ka maamulka Grafana, ku orod amarka hoose ka dibna fur http://localhost:3000/:


Gujinaya liiska Bogga Hore bidix sare iyo xulashada Dashboardka Adeegga Istio geeska bidix ee sare, ka bilow adeeg sa-web-appsi loo eego cabbirada la ururiyey:

Ku laabo adeegaha yaryar ee Istio. Qaybta 1

Waxa halkan nagu sugaya waa waxqabad madhan oo caajis ah - maamulku waligiis ma aqbali doono tan. Aan abuurno rar yar oo wata amarka soo socda:


Hadda waxaan haynaa garaafyo aad u fiican, oo iyaga lagu daro, aaladaha Prometheus ee cajiibka ah ee kormeerka iyo Grafana si loo sawiro cabbirada noo oggolaan doona inaan wax ka barano waxqabadka, caafimaadka, hagaajinta / hoos u dhaca adeegyada waqti ka dib.

Ugu dambeyntii, aan eegno codsiyada raadinta ee adeegyada.

Jaeger: baafin

Waxaan u baahan doonaa baafin sababtoo ah adeegyada badan ee aan haysano, way sii adkaanaysaa in la gaadho sababta fashilka. Bal aan eegno kiis fudud sawirka hoose:

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
Tusaalaha caadiga ah ee codsiga fashilka random

Codsigu wuu yimaadaa, wuu dhacaa - waa maxay sababtu? Adeegga koowaad? Mise kan labaad? Labaduba waxa ka reeban - bal aynu eegno mid walba diiwaankiisa. Immisa jeer ayaad isku qabatay inaad sidan samaynayso? Shaqadeenu waxay la mid tahay baarayaasha software-ka marka loo eego kuwa horumariya...

Tani waa dhibaato caadi ah oo ka jirta microservices waxaana lagu xalliyaa hababka raadinta ee loo qaybiyo, kuwaas oo adeegyadu u gudbiyaan madax gaar ah midba midka kale, ka dib macluumaadkan waxaa loo gudbiyaa nidaamka raadinta, halkaas oo lagu barbar dhigo xogta codsiga. Waa tan tusaale:

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
TraceId waxa loo isticmaalaa in lagu aqoonsado codsiga

Istio waxay isticmaashaa Jaeger Tracer, kaas oo fuliya qaab-dhismeedka API-ga OpenTracing-ka madax-bannaan ee iibiyaha. Waxaad geli kartaa is-dhexgalka isticmaalaha Jaeger amarkan soo socda:


Hadda u tag http://localhost:16686/ oo dooro adeeg sa-web-app. Haddii adeegga aan lagu muujin liiska hoos-u-hoosaadka, tus/dhal dhaqdhaqaaqa bogga oo cusboonaysii interface-ka. Intaa ka dib, dhagsii badhanka Raadi Raad-raac, kaas oo muujin doona raadadkii ugu dambeeyay - dooro mid kasta - macluumaad faahfaahsan oo ku saabsan dhammaan raadadka ayaa soo bixi doona:

Ku laabo adeegaha yaryar ee Istio. Qaybta 1

Raadraacan ayaa muujinaya:

  1. Codsiga ayaa soo galay istio-ingressgateway (tani waa is dhexgalka ugu horreeya ee mid ka mid ah adeegyada, waxaana loo sameeyay aqoonsiga Trace ee codsiga), ka dib albaabku wuxuu u soo diraa codsiga adeegga. sa-web-app.
  2. Adeegga sa-web-app Codsiga waxaa qaadaya Ergeyga dhinac gaariga, "ilmo" ayaa lagu abuuray taako (taasi waa sababta aan u aragno raadadka) oo loo sii jiheeyo weelka sa-web-app. (Span - unug macquul ah oo shaqo ah oo ku yaal Jaeger, oo leh magac, waqtiga bilawga hawlgalka iyo muddada. Taabooyin waa la buul oo la dalban karaa. Garaaf acyclic ah oo toosan oo taako ah ayaa sameeyay raad. - qiyaastii. turjumi.)
  3. Halkan codsiga waxaa lagu farsameeyaa habka dareenka Falanqaynta. Raad-raacyadan waxaa durba soo saaray arjiga, i.e. waxay u baahdeen isbedel kood.
  4. Laga bilaabo hadda, codsi POST ayaa la bilaabay sa-macquul. Aqoonsiga raadraaca waa in laga soo gudbiyaa sa-web-app.
  5. ...

tacliiqTallaabada 4, codsigu waa inuu arko madaxyada uu sameeyay Istio oo u gudbiyaa codsiyada dambe sida ka muuqata sawirka hoose:

Ku laabo adeegaha yaryar ee Istio. Qaybta 1
(A) Istio ayaa mas'uul ka ah gudbinta madax-madaxeedyada; (B) Adeegyada ayaa ka mas'uul ah madaxyada

Istio waxa uu qabtaa shaqada inteeda badan sababtoo ah... wuxuu abuuraa madaxyo codsiyada soo socda, wuxuu abuuraa taako cusub daryeel dhinac kasta wuxuuna sii gudbiyaa. Si kastaba ha ahaatee, iyada oo aan lala shaqayn madaxyada gudaha adeegyada, dariiqa raadraaca codsiga buuxa waa la lumin doonaa.

Waa in lagu xisaabtamaa madaxyada soo socda:


Tani ma aha hawl adag, laakiin si loo fududeeyo hirgelinteeda ayaa horeba u jirtay maktabado badan - tusaale ahaan, adeega sa-web-app, macmiilka RestTemplate wuxuu u gudbiyaa madaxyadan haddii aad si fudud ugu darto maktabadaha Jaeger iyo OpenTracing balwadihiisa.

Ogsoonow in codsiga falanqaynta dareenka uu muujinayo hirgelinta Flask, Guga, iyo ASP.NET Core.

Hadda oo ay caddahay waxa aan ka helayno sanduuqa (ama ku dhawaad ​​​​boorsada), aynu eegno hab-socodka habsan, maamulka taraafikada, amniga, iwm.!

Ogow. turjumiTan ku saabsan ka akhri qaybta xigta ee agabka ku yaal Istio ee Rinor Maloku, tarjumadoodu waxay ku socon doontaa blog-keena mustaqbalka dhow. WARSIDAHA (Maarso 14-keedii): Qaybta Labaad mar hore ayaa la daabacay.

PS ka turjumaan

Sidoo kale ka akhri boggayaga:

Source: www.habr.com