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, ngokunjaloipateni ye-circuit breaker kubaxhasi. Kwakhona, ukuze uqiniseke ukuba yonke inkqubo ayintlitheka, uya kufuna ixesha lokuphuma kunyeiibhloko (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.
Qaphela:: Eli nqaku lithatha ukuba unolwazi olusebenzayo lweKubernetes. Ngaphandle koko, ndincoma ukufunda
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.
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.
Ukuzama kwakhona kunye nokwaphulwa kwesekethe kuphunyezwa njani kuMthunywa
Ukushwankathela:
- sithunywa (sithetha ngommeli obekwe kwisingxobo esisecaleni, esisasazwa njenge
imveliso eyahlukileyo - malunga. guqulela.) ithumela isicelo kwimeko yokuqala yenkonzo B kwaye iyasilela. - Umthunywa uSidecar uyazama kwakhona (zama kwakhona). (1)
- Isicelo siyasilela kwaye sibuyiselwa kummeli osibizileyo.
- 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:
Ukusebenzisana kweNdlela yoLawulo kunye neNdlela yeDatha
Abathunywa (o.k.t. inqwelomoya) iqwalaselwe kusetyenziswa
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?"
Mze keliso
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
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
Kufakwe i-Istio
Khuphela izixhobo ze-Istio ukusuka [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
ifakiwefalse
(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 Completed
ngokwenza 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
Isicelo siquka ii-microservices ezine:
- inkonzo SA-Frontend, esebenza umphambili wesicelo seReactjs;
- inkonzo SA-WebApp, ebonelela ngemibuzo yoHlalutyo lweSivakalelo;
- inkonzo SA-Logic, eyenza ngokwayo
uhlalutyo lweemvakalelo ; - inkonzo SA-Impendulo, efumana ingxelo evela kubasebenzisi malunga nokuchaneka kohlalutyo.
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
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:
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 (
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:
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 (
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) ΠΠ°ΠΆΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ:
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²ΡΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅
- ΠΡΠΎΡ VirtualService ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π· http-gateway;
- Π
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-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.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, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ:
ΠΠ΄Π΅ΡΡ Π½Π°Ρ ΠΆΠ΄ΡΡ ΠΏΡΡΡΠΎΠ΅ ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠΊΡΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ β ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΊΠΎΠ΅ Π½Π΅ ΠΎΠ΄ΠΎΠ±ΡΠΈΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
$ 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β: ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Ρ Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΡΠ΅ΠΌ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΏΡΠΈΡΠΈΠ½Ρ ΡΠ±ΠΎΡ. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΈΠ· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π½ΠΈΠΆΠ΅:
Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°ΠΠ°ΠΏΡΠΎΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ, ΠΏΠ°Π΄Π°Π΅Ρ β Π² ΡΡΠΌ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π°? ΠΠ΅ΡΠ²ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ? ΠΠ»ΠΈ Π²ΡΠΎΡΠΎΠΉ? ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΅ΡΡΡ Π² ΠΎΠ±ΠΎΠΈΡ β Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π»ΠΎΠ³ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ. ΠΠ°ΠΊ ΡΠ°ΡΡΠΎ Π²Ρ Π»ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ΅Π±Ρ Π·Π° ΡΠ°ΠΊΠΈΠΌ Π·Π°Π½ΡΡΠΈΠ΅ΠΌ? ΠΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° Π΄Π΅ΡΠ΅ΠΊΡΠΈΠ²ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²β¦
ΠΡΠΎ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°Ρ ΠΈ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΠ½Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π³Π΄Π΅ ΠΎΠ½Π° ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΎΡ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ:
ΠΠ»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ 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-ingressgateway (ΡΡΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΈ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Trace ID), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ»ΡΠ· Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ Π² ΡΠ΅ΡΠ²ΠΈΡ sa-web-app.
- Π ΡΠ΅ΡΠ²ΠΈΡΠ΅ sa-web-app Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ΄Ρ Π²Π°ΡΡΠ²Π°Π΅ΡΡΡ Envoy sidecar'ΠΎΠΌ, ΡΠΎΠ·Π΄Π°ΡΡΡΡ Β«ΡΠ΅Π±ΡΠ½ΠΎΠΊΒ» Π² span'Π΅ (ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π² ΡΡΠ΅ΠΉΡΠ°Ρ ) ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ sa-web-app. (
Span β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΡ Π² Jaeger, ΠΈΠΌΠ΅ΡΡΠ°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π²ΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. Span'Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΌΠΈ. ΠΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π°ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Ρ ΠΈΠ· span'ΠΎΠ² ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ trace. β ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².)- ΠΠ΄Π΅ΡΡ Π·Π°ΠΏΡΠΎΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ sentimentAnalysis. ΠΡΠΈ ΡΡΠ΅ΠΉΡΡ ΡΠΆΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ.Π΅. Π΄Π»Ρ Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅.
- Π‘ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΡΡΡ POST-Π·Π°ΠΏΡΠΎΡ Π² sa-logic. Trace ID Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠΎΠ±ΡΠΎΡΠ΅Π½ ΠΈΠ· sa-web-app.
- β¦
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ° 4 ΡΠ°Π³Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Istio, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΆΠ΅:
(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. ΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«ΠΠ°Π·Π°Π΄ ΠΊ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠ΅ Ρ IstioΒ»:
ΡΠ°ΡΡΡ 2 (ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ) ,ΡΠ°ΡΡΡ 3 (Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ) ;- Β«
Conduit β Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΠΉ service mesh Π΄Π»Ρ Kubernetes Β»;- Β«
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ service mesh ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ ΠΌΠ½Π΅ Π½ΡΠΆΠ΅Π½ [Π΄Π»Ρ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ]? Β»;- Β«
ΠΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ ΡΠ΅ΡΠΈ Π² Kubernetes. Π§Π°ΡΡΠΈ 1 ΠΈ 2 Β»;- Β«
ΠΠ°ΠΊ ΡΡΠΎΡ sidecar-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π·Π΄Π΅ΡΡ [Π² Kubernetes]? Β».ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com
route:
- destination:
host: sa-frontend # 2
port:
number: 80
Amaphupha abalulekileyo:
- Le nkonzo yeVirtual ibhekisa kwizicelo ezizayo http-isango;
- Π
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:
Ubumbeko lwe-Istio-IngressGateway yesicelo somzilaIsicelo 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.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:
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:
Umzekelo oqhelekileyo wesicelo asiphumelelangaIsicelo 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:
I-TraceId isetyenziselwa ukuchonga isiceloI-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:Lo mkhondo ubonisa:
- Isicelo siyangena istio-ingressgateway (olu lunxibelelwano lokuqala nenye yeenkonzo, kwaye i-ID yeTrace yenzelwe isicelo), emva koko isango lithumela isicelo kwinkonzo. sa-web-app.
- 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.)- Apha isicelo siqhutywe yindlela sentimentAnalysis. Le mikhondo sele yenziwe ngesicelo, okt. bafuna utshintsho lwekhowudi.
- Ukusukela ngalo mzuzu ukuya phambili, isicelo se-POST siqaliswa sa-logic. I-Trace ID kufuneka ithunyelwe ukusuka sa-web-app.
- ...
Qaphela:: Kwinqanaba lesi-4, isicelo kufuneka sibone izihloko ezenziwe yi-Istio kwaye zidlulisele kwizicelo ezilandelayo njengoko kuboniswe kumfanekiso ongezantsi:
(A) I-Istio inoxanduva lokudlulisa iiheader; (B) Iinkonzo zinoxanduva lwezihlokoI-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-OpenTracingimikhwa 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:
- "Buyela kwiinkonzo ezincinci kunye ne-Istio":
icandelo 2 (indlela, ulawulo lwendlela) ,icandelo 3 (uqinisekiso kunye nogunyaziso) ; - Β«
I-Conduit - i-mesh yenkonzo elula ye-Kubernetes "; - Β«
Yintoni i-mesh yenkonzo kwaye kutheni ndiyifuna [kwisicelo selifu esinee-microservices]? "; - Β«
Isikhokelo esinemifanekiso sothungelwano kwi-Kubernetes. Amacandelo 1 kunye ne-2 "; - Β«
Ingaba esi sikhongozeli semoto esecaleni siphelele njani apha [eKubernetes]? Β».
umthombo: www.habr.com