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)$'
    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:

$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

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:

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

... 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/:

$ kubectl -n istio-system port-forward 
    $(kubectl -n istio-system get pod -l app=grafana 
    -o jsonpath={.items[0].metadata.name}) 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:

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

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:

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

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:

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

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

Yongeza izimvo