Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1

Phawula. transl.: I-meshes yenkonzo ngokuqinisekileyo ibe sisisombululo esifanelekileyo kwiziseko ezingundoqo zangoku kwizicelo ezilandela uyilo lwe-microservice. Ngelixa i-Istio inokuba semilebeni yeenjineli ezininzi ze-DevOps, yimveliso entsha enokuthi, ngelixa ibanzi ngokwezakhono ezibonelela ngayo, inokufuna ixesha elininzi lokuqhelana nayo. Injineli yaseJamani uRinor Maloku, ojongene necomputing yamafu kubathengi abakhulu kwinkampani yonxibelelwano i-Orange Networks, ubhale uluhlu olumangalisayo lwezinto ezikuvumela ukuba ungene ngokukhawuleza nangokunzulu kwi-Istio. Uqala ibali lakhe ngento i-Istio enokuyenza ngokubanzi kunye nendlela onokuyibona ngayo ngokukhawuleza ngamehlo akho.

Istio -Iprojekthi yoMthombo oVulekileyo ophuhliswe ngentsebenziswano namaqela avela kuGoogle, IBM kunye neLyft. Isombulula ubunzima obuvela kwii-microservices-based applications, ezifana:

  • Ulawulo lwezoThutho: ukuphelelwa kwexesha, ukuzama kwakhona, ukulinganisa umthwalo;
  • Khu seleko: ukuqinisekiswa komsebenzisi wokugqibela kunye nogunyaziso;
  • Ukuqwalaselwa: ukulandelela, ukubeka iliso, ukugawulwa kwemithi.

Zonke ezi zinto zingasombululwa kwinqanaba lesicelo, kodwa emva koko iinkonzo zakho aziyi kuba "zincinci". Yonke inzame eyongezelelweyo yokusombulula ezi ngxaki yinkcitho yezibonelelo zenkampani ezinokuthi zisetyenziswe ngokuthe ngqo kwixabiso leshishini. Makhe sijonge umzekelo:

Umphathi weProjekthi: Kuthatha ixesha elingakanani ukongeza inqaku lengxelo?
Umphuhlisi: Imitsi emibini.

MP: Yintoni?.. Yi-CRUD nje!
R: Ukwenza i-CRUD yinxalenye elula, kodwa kusafuneka siqinisekise kwaye sigunyazise abasebenzisi kunye neenkonzo. Ekubeni inethiwekhi ayithembekanga, kuya kufuneka ukuba uphumeze izicelo eziphindaphindiweyo, ngokunjalo ipateni ye-circuit breaker kubaxhasi. Kwakhona, ukuze uqiniseke ukuba yonke inkqubo ayintlitheka, uya kufuna ixesha lokuphuma kunye iibhloko (ukufumana iinkcukacha ezithe vetshe malunga neepateni zombini ezikhankanyiweyo, jonga kamva kwinqaku - malunga ne-transl.), kwaye ukuze kubonwe iingxaki, ukubeka iliso, umkhondo, […]

MP: Owu, ke masifake eli nqaku kwinkonzo yeMveliso.

Ndicinga ukuba ingcamango icacile: ubungakanani bamanyathelo kunye nomzamo ofunekayo wokongeza inkonzo enye mkhulu kakhulu. Kule nqaku, siza kujonga indlela i-Istio isusa ngayo yonke into eyinkimbinkimbi ekhankanywe ngasentla (engajoliswanga ukuba ibe yingqiqo yezoshishino) kwiinkonzo.

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1

Qaphela:: Eli nqaku lithatha ukuba unolwazi olusebenzayo lweKubernetes. Ngaphandle koko, ndincoma ukufunda intshayelelo yam kuKubernetes kwaye kuphela emva koko uqhubeke ufunda lo mbandela.

Ingcamango ye-Istio

Ehlabathini elingenayo i-Istio, enye inkonzo yenza izicelo ezithe ngqo komnye, kwaye xa kukho ukungaphumeleli, inkonzo kufuneka ikwazi ukuzibamba ngokwayo: yenza umzamo omtsha, unikeze ixesha lokuvala, uvule i-breaker circuit, njl.

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
Itrafikhi yenethiwekhi eKubernetes

I-Istio inikeza isisombululo esikhethekileyo, esahlulwe ngokupheleleyo kwiinkonzo kunye nokusebenza ngokuphazamisa unxibelelwano lwenethiwekhi. Kwaye ngoko iyasebenza:

  • ukunyamezela iimpazamo: Ngokusekelwe kwikhowudi yesimo kwimpendulo, iyaqonda ukuba isicelo asiphumelelanga kwaye iphinde iphinde iyenze.
  • Ukukhutshwa kweCanary: iphinda iqondise kuphela ipesenti emiselweyo yezicelo kuguqulelo olutsha lwenkonzo.
  • Ukubeka iliso kunye neemetrics: Kuthathe ixesha elingakanani ukuba inkonzo iphendule?
  • Ukulandela kunye nokuQwalasela: Yongeza iiheader ezikhethekileyo kwisicelo ngasinye kwaye uzilandelele kwiqela lonke.
  • Khu seleko: Ifumana kwakhona ithokheni ye-JWT, iqinisekisa kwaye igunyazise abasebenzisi.

Ezi zimbalwa zezinto ezinokwenzeka (ngenyani nje ezimbalwa!) ukuze ukwenze umdla. Ngoku makhe singene kwiinkcukacha zobugcisa!

Uyilo lwe-Istio

I-Istio ibamba yonke i-traffic yenethiwekhi kwaye isebenzise isethi yemithetho kuyo, ifake i-proxy ehlakaniphile ngendlela yesitya se-sidecar kwi-pod nganye. Abameli abasebenzisa zonke izakhono zenza a Data Plane, kwaye zinokuqwalaselwe ngokusetyenziswayo Inqwelomoya yokulawula.

Data Plane

Iiproksi ezifakwe kwiipods zivumela i-Istio ukuba ihlangabezane ngokulula neemfuno esizidingayo. Umzekelo, makhe sijonge kwakhona kunye nemisebenzi ye-circuit breaker.

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
Ukuzama kwakhona kunye nokwaphulwa kwesekethe kuphunyezwa njani kuMthunywa

Ukushwankathela:

  1. sithunywa (sithetha ngommeli obekwe kwisingxobo esisecaleni, esisasazwa njenge imveliso eyahlukileyo - malunga. guqulela.) ithumela isicelo kwimeko yokuqala yenkonzo B kwaye iyasilela.
  2. Umthunywa uSidecar uyazama kwakhona (zama kwakhona). (1)
  3. Isicelo siyasilela kwaye sibuyiselwa kummeli osibizileyo.
  4. Oku kuvula i-Circuit Breaker kwaye ibize inkonzo elandelayo kwizicelo ezilandelayo. (2)

Oku kuthetha ukuba akufuneki usebenzise elinye ithala leencwadi kwakhona, akufuneki ukuba wenze eyakho ukuphunyezwa kweSekethe yoKwaphulwa kunye nokuFunyaniswa kweNkonzo kulwimi lwenkqubo X, Y okanye Z. Konke oku nokunye okuninzi kufumaneka ngaphandle kwebhokisi. kwi-Istio kwaye ayifuni cha utshintsho kwikhowudi.

Kakhulu! Ngoku unokufuna ukuhamba nohambo nge-Istio, kodwa usenamathandabuzo athile, imibuzo evulekileyo. Ukuba esi sisisombululo sendalo yonke kuzo zonke iimeko zobomi, ngoko unesikrokro esingokwemvelo: emva koko, zonke ezo zisombululo ngokwenene zijika zingafanelekanga kuyo nayiphi na imeko.

Kwaye ekugqibeleni uyabuza: "Ngaba iyenzeka ngokwezifiso?"

Ngoku ulungele uhambo lolwandle, makhe siqhelane nePlane yoLawulo.

Inqwelomoya yokulawula

Iqulathe amacandelo amathathu: Pilot, Umxube ΠΈ elunge, - abasebenza kunye ukuqwalasela Abathunywa bendlela yetrafikhi, ukunyanzelisa imigaqo-nkqubo, kunye nokuqokelela idatha ye-telemetry. Ngokucwangcisekileyo yonke into ibonakala ngolu hlobo:

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
Ukusebenzisana kweNdlela yoLawulo kunye neNdlela yeDatha

Abathunywa (o.k.t. inqwelomoya) iqwalaselwe kusetyenziswa Kubernetes CRD (IiNgcaciso zeSibonelelo soMsebenzi) zichazwe yi-Istio kwaye zijoliswe ngokukodwa kule njongo. Oku kuthetha ntoni kuwe kukuba zibonakala zisesinye nje isixhobo kwi-Kubernetes ene-syntax eqhelekileyo. Emva kokudalwa, lo mthombo uya kuthatyathwa yinqwelomoya yokulawula kwaye isetyenziswe kuThunywa.

Ubudlelwane beenkonzo kwi-Istio

Siye sachaza ubudlelwane be-Istio kwiinkonzo, kodwa kungekhona umva: iinkonzo zihambelana njani ne-Istio?

Ukunyaniseka, iinkonzo ziyazi malunga nobukho be-Istio njengeentlanzi zamanzi xa zizibuza, "Yintoni amanzi nangona kunjalo?"

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
Mze keliso UVictoria Dimitrakopoulos:- uwathanda njani amanzi? - Yintoni amanzi?

Ngaloo ndlela, unokuthatha iqela elisebenzayo kwaye emva kokuthumela amacandelo e-Istio, iinkonzo ezikuyo ziya kuqhubeka zisebenza, kwaye emva kokususa la macandelo, yonke into iya kuphinda ilungile. Kucacile ukuba kule meko uya kulahlekelwa amandla anikezelwe yi-Istio.

Kwanele ithiyori - masilusebenzise olu lwazi!

Istio ekusebenzeni

I-Istio idinga i-cluster ye-Kubernetes ubuncinane kunye ne-4 vCPU kunye ne-8 GB ye-RAM ekhoyo. Ukuseta ngokukhawuleza iqela kwaye ulandele imiyalelo evela kwinqaku, ndincoma ukusebenzisa i-Google Cloud Platform, enika abasebenzisi abatsha free $300.

Emva kokudala iqela kunye nokuqwalasela ukufikelela kwi-Kubernetes ngokusebenzisa i-console utility, ungafaka i-Istio ngokusebenzisa umphathi wephakheji ye-Helm.

Ufakelo lweHelm

Faka umxhasi weHelm kwikhompyuter yakho, njengoko kuchaziwe kwi amaxwebhu asemthethweni. Siza kusebenzisa oku ukwenza iitemplates zokufaka i-Istio kwicandelo elilandelayo.

Kufakwe i-Istio

Khuphela izixhobo ze-Istio ukusuka ukhupho lwamva nje (ikhonkco lombhali wokuqala kwinguqulo 1.0.5 itshintshiwe yangoku, okt 1.0.6 - approx. transl.), khupha imixholo kulawulo olunye, endiza kulubiza ngoku [istio-resources].

Ukuchonga ngokulula izixhobo ze-Istio, yenza indawo yamagama kwiqela le-K8s istio-system:

$ kubectl create namespace istio-system

Gqibezela ukufakela ngokuya kuluhlu [istio-resources] kwaye uqhuba umyalelo:

$ 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

Lo myalelo uya kukhupha amacandelo aphambili e-Istio kwifayile istio.yaml. Siyilungisile itemplate esemgangathweni ukuba ilungele thina, sichaza ezi parameters zilandelayo:

  • global.mtls.enabled ifakiwe false (oko kukuthi uqinisekiso lwe-mTLS luvaliwe - malunga.)ukwenza lula inkqubo yethu yokuthandana;
  • tracing.enabled ibandakanya isicelo umkhondo usebenzisa Jaeger;
  • kiali.enabled ifakela i-Kiali kwi-cluster ukubona iinkonzo kunye ne-traffic;
  • grafana.enabled ifakela iGrafana ukubona imilinganiselo eqokelelweyo.

Masisebenzise izixhobo ezenziweyo ngomyalelo:

$ kubectl apply -f istio.yaml

Ukufakwa kwe-Istio kwiqela kugqityiwe! Linda de zonke iipods zibe kwindawo yamagama istio-system uya kukwazi Running okanye Completedngokwenza lo myalelo ungezantsi:

$ kubectl get pods -n istio-system

Ngoku sikulungele ukuqhubeka kwicandelo elilandelayo, apho siya kufumana isicelo sisebenze.

Uyilo lwesicelo sokuHlalutywa kweSentiment

Masisebenzise umzekelo weSentiment Analysis application microservice esetyenziswayo esele ikhankanyiwe Inqaku lentshayelelo kuKubernetes. Kunzima ngokwaneleyo ukubonisa amandla e-Istio ekusebenzeni.

Isicelo siquka ii-microservices ezine:

  1. inkonzo SA-Frontend, esebenza umphambili wesicelo seReactjs;
  2. inkonzo SA-WebApp, ebonelela ngemibuzo yoHlalutyo lweSivakalelo;
  3. inkonzo SA-Logic, eyenza ngokwayo uhlalutyo lweemvakalelo;
  4. inkonzo SA-Impendulo, efumana ingxelo evela kubasebenzisi malunga nokuchaneka kohlalutyo.

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1

Kulo mzobo, ngaphezu kweenkonzo, sibona kwakhona i-Ingress Controller, e-Kubernetes ihambisa izicelo ezingenayo kwiinkonzo ezifanelekileyo. I-Istio isebenzisa ingcamango efanayo ngaphakathi kwe-Ingress Gateway, iinkcukacha ezingakumbi eziza kulandela.

Ukwenza isicelo ngommeli ovela kwi-Istio

Ukufumana eminye imisebenzi ekhankanywe kwinqaku, fanisa indawo yakho yokugcina istio-mastery. Iqulethe isicelo kwaye ibonakalisa i-Kubernetes kunye ne-Istio.

Ukufaka ii-sidecars

Ukufakwa kunokwenziwa ngokuzenzekelayo okanye ngesandla. Ukufaka ngokuzenzekelayo izikhongozeli zemoto esecaleni, kuya kufuneka usete ileyibhile kwindawo yamagama istio-injection=enabled, eyenziwa ngalo myalelo ulandelayo:

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

Ngoku iphod nganye eza kubekwa kwindawo emiselweyo yegama (default) iya kufumana isikhongozeli sayo semoto esecaleni. Ukuqinisekisa oku, makhe sisebenzise uvavanyo lwesicelo ngokuya kuluhlu lweengcambu zogcino [istio-mastery] kwaye usebenzise lo myalelo ulandelayo:

$ 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

Emva kokuhambisa iinkonzo, masijonge ukuba iipods zinezikhongozeli ezibini (kunye nenkonzo ngokwayo kunye nemoto esecaleni) ngokuqhuba umyalelo. kubectl get pods kunye nokuqinisekisa ukuba phantsi kwekholamu READY ixabiso lichaziwe 2/2, ebonisa ukuba zombini izikhongozeli ziyasebenza:

$ 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

Ngokubonakalayo ibonakala ngolu hlobo:

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
Ummeli womthunywa kwenye yeepod

Ngoku isicelo siphezulu kwaye siyasebenza, kuya kufuneka sivumele i-traffic engenayo ukuba ingene kwisicelo.

I-Ingress Gateway

Eyona ndlela ilungileyo yokufezekisa oku (vumela i-traffic kwi-cluster) idlula I-Ingress Gateway kwi-Istio, ebekwe "emdeni" weqela kwaye ikuvumela ukuba wenze iimpawu ze-Istio ezifana nokuhamba, ukulinganisa umthwalo, ukhuseleko kunye nokubeka iliso kwi-traffic engenayo.

Icandelo le-Ingress Gateway kunye nenkonzo eyithumela ngaphandle zifakwe kwi-cluster ngexesha lofakelo lwe-Istio. Ukufumana idilesi ye-IP yangaphandle yenkonzo, sebenzisa:

$ 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

Siza kuqhubeka nokufikelela kwisicelo sisebenzisa le IP (ndiya kubhekisa kuyo njenge-IP YAPHANDLE), ke ukwenzela ukuba kube lula siya kubhala ixabiso libe yi-variable:

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

Ukuba uzama ukufikelela kule IP ngokusebenzisa umkhangeli zincwadi ngoku, uya kufumana iNkonzo Ayifumaneki impazamo, kuba ngokungagqibekanga i-Istio ivimba zonke iitrafikhi ezingenayo, iGateway ayikachazwa.

Umthombo wesango

Isango yi-CRD (iNgcaciso yeSibonelelo soMthombo) kwi-Kubernetes, echazwe emva kokufaka i-Istio kwiqela kunye nokwenza ukuba sikwazi ukucacisa izibuko, i-protocol kunye neenginginya apho sifuna ukuvumela i-traffic engenayo.

Kwimeko yethu, sifuna ukuvumela i-HTTP traffic kwi-port 80 kubo bonke ababuki zindwendwe. Umsebenzi uphunyezwa ngale nkcazo ilandelayo (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:
- "*"

Olu qwalaselo alufuni ngcaciso ngaphandle komkhethi istio: ingressgateway. Ngalo mkhethi sinokucacisa ukuba yeyiphi i-Ingress Gateway ekunokufakwa kuyo uqwalaselo. Kwimeko yethu, lo ngumlawuli we-Ingress Gateway, ofakwe ngokungagqibekanga kwi-Istio.

Ubumbeko lusetyenziswa ngokubiza lo myalelo ulandelayo:

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

Isango ngoku livumela ufikelelo kwi-port 80, kodwa ayinalo nofifi apho izicelo zomzila. Kule nto uya kuyidinga Iinkonzo eziSebenzayo.

Umthombo weNkonzo yeVirtual

I-VirtualService ixelela i-Ingress Gateway indlela yokuhambisa izicelo ezivunyelwe ngaphakathi kweqela.

Izicelo kwisicelo sethu eziza nge-http-gateway kufuneka zithunyelwe kwi-sa-frontend, i-sa-web-app kunye neenkonzo ze-feedback:

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
Iindlela ezifuna ukuqwalaselwa ngeeNkonzo zeVirtual

Makhe sijonge izicelo ekufuneka zithunyelwe kwi-SA-Frontend:

  • Umdlalo ochanekileyo endleleni / kufuneka ithunyelwe kuSA-Frontend ukufumana index.html;
  • Iindlela ezimiselweyo /static/* kufuneka ithunyelwe kwi-SA-Frontend ukufumana iifayile ezingatshintshiyo ezisetyenziswe kumphambili, njengeCSS kunye neJavaScript;
  • Iindlela ezihambelana nokubonakaliswa okuqhelekileyo '^.*.(ico|png|jpg)$', kufuneka ithunyelwe kwi-SA-Frontend, kuba Le yimifanekiso eboniswe kwiphepha.

Ukuphunyezwa kuphunyezwa ngolu lungelelwaniso lulandelayo (sa-virtualservice-yangaphandle.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

Amaphupha abalulekileyo:

  1. Le nkonzo yeVirtual ibhekisa kwizicelo ezizayo http-isango;
  2. Π’ destination Inkonzo ezithunyelwa kuyo izicelo iyamiselwa.

Qaphela:: Uqwalaselo olungentla lugcinwe kwifayile sa-virtualservice-external.yaml, equlethe nezicwangciso zomzila kwi-SA-WebApp kunye ne-SA-Feedback, kodwa ifinyelelwe apha kwinqaku elikufutshane.

Masisebenzise iNkonzo yeVirtual ngokufowuna:


Qaphela:: Xa sisebenzisa izixhobo ze-Istio, i-Kubernetes API Server yenza isiganeko esifunyenwe yi-Istio Control Plane, kwaye emva koko ukucwangciswa okutsha kusetyenziswe kwi-proxies ye-Envoy ye-pod nganye. Kwaye i-Ingress Gateway isilawuli ibonakala ingomnye uMthunywa olungiselelwe kwiPlane yoLawulo. Konke oku kujongeka ngolu hlobo kumzobo:

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
Ubumbeko lwe-Istio-IngressGateway yesicelo somzila

Isicelo sokuHlalutywa kweemvakalelo ngoku siyafumaneka http://{EXTERNAL-IP}/. Sukuba nexhala xa ufumana imeko engafumanekiyo: Ngamanye amaxesha kuthatha ixesha elide ukuba ulungelelwaniso lusebenze kwaye i-Cache ye-Essay ihlaziywe.

Ngaphambi kokuba uqhubeke, dlala kunye ne-app kancinane ukwenza itrafikhi. (ubukho bayo buyimfuneko ukuze kucace kwizenzo ezilandelayo - malunga ne-transl.).

Kialiβ€Š: ukuqwalaselwa

Ukuya kujongano lolawulo lwe-Kiali, sebenzisa lo myalelo ulandelayo:


... kwaye uvule http://localhost:20001/, ngena njengomlawuli/admin. Apha uya kufumana amanqaku amaninzi aluncedo, umzekelo, ukujonga uqwalaselo lwamacandelo e-Istio, jonga iinkonzo usebenzisa ulwazi oluqokelelwe ekuthinteleni izicelo zenethiwekhi, fumana iimpendulo kwimibuzo ethi β€œNgubani onxibelelana nobani?”, β€œYeyiphi inguqulelo yenkonzo ehlangabezana nayo. ukusilela?” kwaye nangokunjalo. Ngokubanzi, hlola izakhono ze-Kiali ngaphambi kokuba uqhubele phambili ujonge iimethrikhi kunye neGrafana.

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1

Grafana: ukubonwa kweemetrics

Iimetriki eziqokelelwe kwi-Istio zingena kwi-Prometheus kwaye zibonwa ngeGrafana. Ukufikelela kujongano lolawulo lweGrafana, sebenzisa lo myalelo ungezantsi uze uvule http://localhost:3000/:


Ukucofa kwimenyu Ikhaya phezulu ekhohlo kwaye ukhetha Istio Service Dashboard kwikona ephezulu ngasekhohlo, qala ngenkonzo sa-web-appukujonga iimetrics eziqokelelweyo:

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1

Into esilindele apha kukusebenza okulambathayo nokukruqulayo ngokupheleleyo - abaphathi abasoze bakuvume oku. Masenze umthwalo omncinci ngalo myalelo ulandelayo:


Ngoku sineegrafu ezintle kakhulu, kwaye ukongeza kuzo, izixhobo ezimangalisayo zePrometheus zokubeka iliso kunye neGrafana yokujonga iimetriki eziya kusivumela ukuba sifunde malunga nokusebenza, impilo, ukuphuculwa / ukuthotywa kweenkonzo ngokuhamba kwexesha.

Okokugqibela, makhe sijonge ekulandeleni izicelo kwiinkonzo.

Jaegerβ€Š: umkhondo

Siza kufuna umkhondo kuba okukhona sineenkonzo ezininzi, kokukhona kuya kuba nzima ukufumana unobangela wokusilela. Makhe sijonge umzekelo olula kumfanekiso ongezantsi:

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
Umzekelo oqhelekileyo wesicelo asiphumelelanga

Isicelo siza, siwela - siyintoni isizathu? Inkonzo yokuqala? Okanye eyesibini? Kukho izinto ezingafaniyo kuzo zombini - makhe sijonge iilog zayo nganye. Uzibhaqe kangaphi usenza lento? Umsebenzi wethu ufana nabacuphi besoftware kunabaphuhlisi...

Le yinkinga eqhelekileyo kwii-microservices kwaye ixazululwa ngeenkqubo zokulandelela ezisasazwayo, apho iinkonzo zidlulisela i-header ekhethekileyo komnye nomnye, emva koko le ngcaciso idluliselwe kwinkqubo yokulandelela, apho ifaniswa nedatha yesicelo. Nanku umzekeliso:

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
I-TraceId isetyenziselwa ukuchonga isicelo

I-Istio isebenzisa i-Jaeger Tracer, esebenzisa isakhelo se-OpenTracing API esizimeleyo. Ungafikelela kujongano lomsebenzisi weJaeger ngalo myalelo ulandelayo:


Ngoku yiya ku http://localhost:16686/ uze ukhethe inkonzo sa-web-app. Ukuba inkonzo ayiboniswanga kwimenyu eyehlayo, bonisa/uvelise umsebenzi kwiphepha kwaye uhlaziye ujongano. Emva koko, cofa iqhosha Fumana imikhondo, eya kubonisa umkhondo wamva nje - khetha naluphi na - ulwazi oluneenkcukacha kuwo onke amakhondo ayakuvela:

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1

Lo mkhondo ubonisa:

  1. Isicelo siyangena istio-ingressgateway (olu lunxibelelwano lokuqala nenye yeenkonzo, kwaye i-ID yeTrace yenzelwe isicelo), emva koko isango lithumela isicelo kwinkonzo. sa-web-app.
  2. Inkonzo sa-web-app isicelo sithathwa yi-Envoy sidecar, "umntwana" wenziwa kwi-span (yiyo loo nto siyibona kwimizila) kwaye iqondiswe kwisitya. sa-web-app. (Span - iyunithi enengqiqo yomsebenzi eJaeger, enegama, ixesha lokuqala lokusebenza kunye nobude bayo. Iispans zinokubekwa kwaye zi-odolwe. Igrafu ye-acyclic eqondisiweyo ye-spans yenza umkhondo. - malunga. guqulela.)
  3. Apha isicelo siqhutywe yindlela sentimentAnalysis. Le mikhondo sele yenziwe ngesicelo, okt. bafuna utshintsho lwekhowudi.
  4. Ukusukela ngalo mzuzu ukuya phambili, isicelo se-POST siqaliswa sa-logic. I-Trace ID kufuneka ithunyelwe ukusuka sa-web-app.
  5. ...

Qaphela:: Kwinqanaba lesi-4, isicelo kufuneka sibone izihloko ezenziwe yi-Istio kwaye zidlulisele kwizicelo ezilandelayo njengoko kuboniswe kumfanekiso ongezantsi:

Buyela kwii-microservices kunye ne-Istio. Icandelo loku-1
(A) I-Istio inoxanduva lokudlulisa iiheader; (B) Iinkonzo zinoxanduva lwezihloko

I-Istio yenza uninzi lomsebenzi kuba... yenza iiheader zezicelo ezingenayo, yenza izikhewu ezintsha kukhathalelo lwecala ngalinye kwaye izigqithisele phambili. Nangona kunjalo, ngaphandle kokusebenza ngeeheader ngaphakathi kweenkonzo, isicelo esipheleleyo sendlela yokulandelela iya kulahleka.

Ezi zihloko zilandelayo mazithathelwe ingqalelo:


Lo akuwona umsebenzi onzima, kodwa ukwenza lula ukuphunyezwa kwawo sele kukho amathala eencwadi amaninzi - umzekelo, kwinkonzo ye-sa-web-app, umxhasi weRestTemplate udlulisela ezi zihloko ngaphambili ukuba udibanisa ngokulula iJaeger kunye nethala leencwadi le-OpenTracing imikhwa yakhe.

Qaphela ukuba isicelo sokuHlalutywa kweSentiment sibonisa ukuphunyezwa kwiFlask, Spring, kunye ne-ASP.NET Core.

Ngoku ukuba kucacile ukuba yintoni esiyifumanayo kwibhokisi (okanye phantse ngaphandle kwebhokisi), makhe sijonge indlela elungiswe kakuhle, ulawulo lwetrafikhi yenethiwekhi, ukhuseleko, njl.!

Phawula. transl.: Funda malunga noku kwinxalenye elandelayo yemathiriyeli kwi-Istio evela kuRinor Maloku, iinguqulelo zayo eziza kulandela kwibhlog yethu kungekudala. UPDATE (NgoMatshi 14): Icandelo lesibini sele ipapashiwe.

PS evela kumguquleli

Funda nakwibhlog yethu:

umthombo: www.habr.com