Bwererani ku microservices ndi Istio. Gawo 1

Bwererani ku microservices ndi Istio. Gawo 1

Zindikirani. transl.: Ma meshes a ntchito akhaladi yankho loyenera pazomangamanga zamakono pazogwiritsa ntchito motsatira kamangidwe ka microservice. Ngakhale Istio ikhoza kukhala pamilomo ya akatswiri ambiri a DevOps, ndi chinthu chatsopano chomwe, ngakhale chiri chokwanira malinga ndi luso lomwe limapereka, chingafunike nthawi yochuluka kuti muzolowerane nazo. Katswiri wa ku Germany Rinor Maloku, yemwe ali ndi udindo woyang'anira cloud computing kwa makasitomala akuluakulu ku kampani ya telecommunications Orange Networks, adalemba mndandanda wodabwitsa wa zipangizo zomwe zimakulolani kuti mulowe mu Istio mofulumira komanso mozama. Amayamba nkhani yake ndi zomwe Istio angachite nthawi zambiri komanso momwe mungadziwonere mwachangu ndi maso anu.

Istio - Pulojekiti ya Open Source yopangidwa mogwirizana ndi magulu a Google, IBM ndi Lyft. Imathetsa zovuta zomwe zimabwera muzogwiritsa ntchito ma microservices, monga:

  • Kuwongolera Magalimoto: kutha kwa nthawi, kuyesanso, kusanja katundu;
  • Chitetezo: kutsimikizika kwa ogwiritsa ntchito kumapeto ndi chilolezo;
  • Kuwoneka: kufufuza, kuyang'anira, kudula mitengo.

Zonsezi zitha kuthetsedwa pamlingo wofunsira, koma pambuyo pake mautumiki anu sadzakhalanso "micro". Khama lowonjezerapo kuti athetse mavutowa ndikuwononga chuma chamakampani chomwe chingagwiritsidwe ntchito mwachindunji pamtengo wabizinesi. Tiyeni tione chitsanzo:

Project Manager: Zimatenga nthawi yayitali bwanji kuti muwonjezere ndemanga?
Madivelopa: Mipikisano iwiri.

MP: Bwanji?.. Ndi CRUD basi!
R: Kuchita CRUD ndi gawo losavuta, koma tifunikabe kutsimikizira ndi kuvomereza ogwiritsa ntchito ndi ntchito. Popeza maukonde ndi osadalirika, muyenera kukhazikitsa zopempha mobwerezabwereza, komanso chitsanzo cha circuit breaker mu makasitomala. Komanso, kuti muwonetsetse kuti dongosolo lonse silikuwonongeka, mudzafunika nthawi yopuma komanso ma bulkheads (kuti mumve zambiri zamitundu yonse yomwe yatchulidwa, onani pambuyo pake m'nkhaniyo - pafupifupi transl.), ndi kuti muwone zovuta, kuyang'anira, kufufuza, [...]

MP: O, ndiye tiyeni tingoyika izi mu ntchito ya Product.

Ndikuganiza kuti lingaliro liri lomveka bwino: kuchuluka kwa masitepe ndi khama lofunikira kuti muwonjezere ntchito imodzi ndi yayikulu. M'nkhaniyi, tiwona momwe Istio imachotsera zovuta zonse zomwe tazitchula pamwambapa (zomwe sizinapangidwe kuti zikhale zomveka zamalonda) kuchokera ku mautumiki.

Bwererani ku microservices ndi Istio. Gawo 1

ndemanga: Nkhaniyi ikuganiza kuti muli ndi chidziwitso chogwira ntchito cha Kubernetes. Apo ayi, ndikupangira kuwerenga chiyambi changa ku Kubernetes ndipo pambuyo pake pitirizani kuwerenga nkhaniyi.

Istio lingaliro

M'dziko lopanda Istio, ntchito imodzi imapanga zopempha zachindunji kwa wina, ndipo ngati zitalephera, ntchitoyi iyenera kudzigwira yokha: kuyesera kwatsopano, perekani nthawi yopuma, tsegulani woyendetsa dera, ndi zina zotero.

Bwererani ku microservices ndi Istio. Gawo 1
Kuchuluka kwa ma network ku Kubernetes

Istio imapereka yankho lapadera, lolekanitsidwa kwathunthu ndi mautumiki ndikugwira ntchito mwa kusokoneza kulankhulana kwa intaneti. Ndiye imagwiritsa ntchito:

  • kulekerera zolakwika: Kutengera code code mu yankho, imamvetsetsa ngati pempholo lalephera ndikuyambiranso.
  • Kutulutsa kwa Canary: imangowongolera kuchuluka kwa zopempha ku mtundu watsopano wa ntchito.
  • Monitoring ndi metrics: Zinatenga nthawi yayitali bwanji kuti utumikiwo uyankhe?
  • Kufufuza ndi Kuwona: Imawonjezera mitu yapadera pa pempho lililonse ndikutsata gulu lonse.
  • Chitetezo: Imapeza chizindikiro cha JWT, imatsimikizira ndi kuvomereza ogwiritsa ntchito.

Izi ndi zochepa chabe mwa mwayi (zochepa kwenikweni!) kuti zikusangalatseni. Tsopano tiyeni tilowe muzambiri zaukadaulo!

Zomangamanga za Istio

Istio imalepheretsa kuchuluka kwa magalimoto pamanetiweki ndikuyikapo malamulo angapo, ndikuyika projekiti yanzeru ngati chidebe cham'mbali mu pod iliyonse. Ma proxies omwe amayatsa mphamvu zonse amapanga a Ndege ya Data, ndipo amatha kusinthidwa mosinthika pogwiritsa ntchito Control Ndege.

Ndege ya Data

Ma proxies olowetsedwa mu ma pod amalola Istio kukwaniritsa zofunikira zomwe tikufuna. Mwachitsanzo, tiyeni tiyesenso ndi ntchito za circuit breaker.

Bwererani ku microservices ndi Istio. Gawo 1
Momwe kuyesanso ndi kuswa madera kumakhazikitsidwa mu Envoy

Mwachidule:

  1. nthumwi (tikulankhula za proxy yomwe ili mu chidebe cham'mbali, chomwe chimagawidwa ngati osiyana mankhwala - pafupifupi. transl.) imatumiza pempho ku nthawi yoyamba ya utumiki B ndipo ikulephera.
  2. Evoy Sidecar ayesanso (yesanso). (1)
  3. Pempho lalephera ndipo libwezeredwa kwa woyitanira yemwe adayitcha.
  4. Izi zimatsegula Circuit Breaker ndikuyitanitsa msonkhano wotsatira pazopempha zotsatila. (2)

Izi zikutanthauza kuti simuyenera kugwiritsa ntchito laibulale ina Yesaninso, simuyenera kupanga nokha kukhazikitsa kwa Circuit Breaking ndi Service Discovery m'chinenero cha pulogalamu X, Y kapena Z. Zonsezi ndi zina zambiri zikupezeka m'bokosi. mu Istio ndipo safuna ayi kusintha kwa code.

Zabwino! Tsopano mungafune kupita paulendo ndi Istio, koma muli ndi kukayikira, mafunso otseguka. Ngati ili ndi yankho lachilengedwe pazochitika zonse m'moyo, ndiye kuti muli ndi chikayikiro chachilengedwe: pambuyo pake, mayankho onsewa amakhala osayenera pazochitika zilizonse.

Ndipo pamapeto pake mumafunsa kuti: "Kodi ndi makonda?"

Tsopano mwakonzekera ulendo wa panyanja, tiyeni tidziwe Control Plane.

Control Ndege

Lili ndi zigawo zitatu: Woyendetsa, Wosakaniza ΠΈ Citadel, zomwe zimagwirira ntchito limodzi kukonza Nthumwi kuti ziyendetse magalimoto, kutsata ndondomeko, ndi kusonkhanitsa deta ya telemetry. Mwadongosolo zonse zikuwoneka motere:

Bwererani ku microservices ndi Istio. Gawo 1
Kuyanjana kwa Control Plane ndi Data Plane

Nthumwi (i.e. dataplane) zimakonzedwa pogwiritsa ntchito Kubernetes CRD (Custom Resource Definitions) yofotokozedwa ndi Istio ndipo cholinga chake ndi ichi. Zomwe zikutanthauza kwa inu ndikuti akuwoneka ngati chida china ku Kubernetes chokhala ndi mawu odziwika bwino. Akapangidwa, gweroli lidzatengedwa ndi ndege yoyang'anira ndikugwiritsidwa ntchito kwa Nthumwi.

Ubale wa mautumiki ku Istio

Tafotokoza za ubale wa Istio ndi mautumiki, koma osati mobwerera: kodi mautumikiwa amagwirizana bwanji ndi Istio?

Kunena zowona, mautumiki amadziΕ΅a kukhalapo kwa Istio monga momwe nsomba zilili ndi madzi pamene amadzifunsa kuti, "Kodi madzi ndi chiyani?"

Bwererani ku microservices ndi Istio. Gawo 1
Chitsanzo Victoria Dimitrakopoulos: - Mumakonda madzi bwanji? - Madzi ndi chiyani?

Choncho, mukhoza kutenga gulu logwira ntchito ndipo mutatha kuyika zigawo za Istio, mautumiki omwe ali mmenemo adzapitiriza kugwira ntchito, ndipo mutatha kuchotsa zigawozi, zonse zidzakhala bwino. Zikuwonekeratu kuti mu nkhani iyi mudzataya mphamvu zoperekedwa ndi Istio.

Chiphunzitso chokwanira - tiyeni tigwiritse ntchito chidziwitsochi!

Istio mukuchita

Istio imafuna gulu la Kubernetes lokhala ndi osachepera 4 vCPU ndi 8 GB ya RAM yomwe ilipo. Kuti mukhazikitse gulu mwachangu ndikutsata malangizo a nkhaniyi, ndikupangira kugwiritsa ntchito Google Cloud Platform, yomwe imapereka ogwiritsa ntchito atsopano. kwaulere $300.

Mutapanga gulu ndikusintha mwayi wofikira Kubernetes kudzera pa chothandizira, mutha kukhazikitsa Istio kudzera pa Helm package manager.

Kuyika helm

Ikani kasitomala wa Helm pa kompyuta yanu, monga tafotokozera mu zolemba zovomerezeka. Tidzagwiritsa ntchito izi kupanga ma tempuleti oyika Istio mu gawo lotsatira.

Kukhazikitsa Istio

Tsitsani zothandizira za Istio kuchokera kutulutsidwa kwaposachedwa (ulalo wa wolemba woyamba ku mtundu 1.0.5 wasinthidwa kukhala wamakono, mwachitsanzo 1.0.6 - approx. transl.), chotsani zomwe zili m'ndandanda umodzi, zomwe ndidzaimbira [istio-resources].

Kuti muzindikire zida za Istio mosavuta, pangani malo a mayina mugulu la K8s istio-system:

$ kubectl create namespace istio-system

Malizitsani kukhazikitsa popita ku chikwatu [istio-resources] ndi kuyendetsa lamulo:

$ 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

Lamuloli litulutsa zigawo zazikulu za Istio ku fayilo istio.yaml. Tidasintha template yokhazikika kuti igwirizane ndi ife, kutchula magawo awa:

  • global.mtls.enabled adayikidwa mu false (i.e. kutsimikizika kwa mTLS kwayimitsidwa - pafupifupi.)kufewetsa zibwenzi zathu;
  • tracing.enabled kumaphatikizapo kufufuza kupempha pogwiritsa ntchito Jaeger;
  • kiali.enabled imayika Kiali mumagulu kuti muwonetsetse ntchito ndi magalimoto;
  • grafana.enabled imayika Grafana kuti muwone ma metric osonkhanitsidwa.

Tiyeni tigwiritse ntchito zinthu zopangidwa ndi lamulo:

$ kubectl apply -f istio.yaml

Kuyika kwa Istio pagulu kwatha! Dikirani mpaka masamba onse ali mumphika wamadzi istio-system adzatha Running kapena Completedpoyendetsa lamulo ili pansipa:

$ kubectl get pods -n istio-system

Tsopano ndife okonzeka kupitiriza mu gawo lotsatira, pamene tiyamba kugwiritsa ntchito pulogalamuyi.

Zomangamanga za Sentiment Analysis application

Tiyeni tigwiritse ntchito chitsanzo cha Sentiment Analysis microservice application yomwe yatchulidwa kale Nkhani yoyambira ku Kubernetes. Ndizovuta mokwanira kuwonetsa kuthekera kwa Istio pochita.

Ntchitoyi imakhala ndi ma microservices anayi:

  1. utumiki SA-Frondend, yomwe imakhala kutsogolo kwa pulogalamu ya Reactjs;
  2. utumiki SA-WebApp, yomwe imapereka mafunso a Sentiment Analysis;
  3. utumiki SA-Logic, yomwe imachita yokha kusanthula maganizo;
  4. utumiki SA - Ndemanga, yomwe imalandira ndemanga kuchokera kwa ogwiritsa ntchito ponena za kulondola kwa kusanthula.

Bwererani ku microservices ndi Istio. Gawo 1

Muchithunzichi, kuwonjezera pa mautumiki, tikuwonanso Ingress Controller, yomwe ku Kubernetes imayendetsa zopempha zomwe zikubwera ku mautumiki oyenera. Istio imagwiritsa ntchito lingaliro lofananalo mkati mwa Ingress Gateway, zambiri zomwe zidzatsatidwe.

Kugwiritsa ntchito ndi projekiti yochokera ku Istio

Kuti mugwiritse ntchito zina zomwe zatchulidwa m'nkhaniyi, phatikizani nkhokwe yanu istio-mastery. Ili ndi kugwiritsa ntchito komanso mawonekedwe a Kubernetes ndi Istio.

Kuyika ma sidecars

Kuyika kungatheke basi kapena pamanja. Kuti muyike zokha zotengera zam'mbali, mufunika kuyika chizindikiro pamalo a mayina istio-injection=enabled, zomwe zimachitika ndi lamulo ili:

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

Tsopano pod iliyonse yomwe idzayikidwa mu malo osasintha (default) adzalandira chidebe chake cham'mbali. Kuti titsimikizire izi, tiyeni titumize ntchito yoyeserera popita ku bukhu la nkhokwe [istio-mastery] ndikuyendetsa lamulo ili:

$ 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

Pambuyo potumiza mautumikiwa, tiyeni tiwone ngati ma pod ali ndi zotengera ziwiri (ndi utumiki womwewo ndi galimoto yake yam'mbali) poyendetsa lamulo. kubectl get pods ndi kuonetsetsa kuti pansi pa mzati READY mtengo watchulidwa 2/2, kusonyeza kuti zotengera zonse zikuyenda:

$ 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

Zowoneka zikuwoneka motere:

Bwererani ku microservices ndi Istio. Gawo 1
Woyimira nthumwi mu imodzi mwa ma pod

Tsopano popeza pulogalamuyo yayamba kugwira ntchito, tidzafunika kulola magalimoto omwe akubwera kuti alowe mu pulogalamuyi.

Ingress Gateway

Njira yabwino yokwaniritsira izi (lolani magalimoto mumagulu) ndikudutsa Ingress Gateway ku Istio, yomwe ili pa "m'mphepete" mwa gululo ndipo imakulolani kuti muthe kuyika zinthu za Istio monga njira, kusanja katundu, chitetezo ndi kuyang'anira magalimoto omwe akubwera.

Chigawo cha Ingress Gateway ndi ntchito yomwe imatumiza kunja idayikidwa mgululi panthawi yoyika Istio. Kuti mudziwe adilesi yakunja ya IP ya ntchitoyo, yesani:

$ 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

Tipitiliza kupeza pulogalamuyi pogwiritsa ntchito IP iyi (ndiyitchula kuti EXTERNAL-IP), kuti zikhale zosavuta tidzalemba mtengowo kuti ukhale wosinthika:

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

Ngati muyesa kupeza IP iyi kudzera pa msakatuli tsopano, mudzalandira cholakwika cha Utumiki Chosapezeka, chifukwa mwachisawawa Istio imaletsa magalimoto onse omwe akubwera, Gateway sinafotokozedwebe.

Chithandizo cha Gateway

Gateway ndi CRD (Custom Resource Definition) ku Kubernetes, yomwe imatanthauzidwa pambuyo pa kukhazikitsa Istio mumagulu ndikuthandizira kufotokozera madoko, protocol ndi makamu omwe tikufuna kulola magalimoto obwera.

Kwa ife, tikufuna kulola kuchuluka kwa HTTP padoko 80 kwa onse omwe ali nawo. Ntchitoyi ikugwiridwa ndi tanthauzo ili (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:
- "*"

Kukonzekera uku sikufuna kufotokozera kupatula kwa wosankha istio: ingressgateway. Ndi chosankha ichi titha kufotokozera kuti Ingress Gateway iti tigwiritse ntchito kasinthidwe. Kwa ife, uyu ndiye woyang'anira Chipata cha Ingress, chomwe chinakhazikitsidwa mwachisawawa ku Istio.

Kukonzekera kumagwiritsidwa ntchito poyitana lamulo ili:

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

Chipata tsopano chimalola mwayi wopita ku doko 80, koma sadziwa komwe angatumize zopempha. Kwa ichi mudzafunika Ntchito Zabwino.

Chida cha VirtualService

VirtualService imauza Ingress Gateway momwe mungayendetsere zopempha zomwe zimaloledwa mkati mwa tsango.

Zopempha ku pulogalamu yathu yobwera kudzera pa http-gateway ziyenera kutumizidwa ku sa-frontend, sa-web-app ndi ntchito zoyankha:

Bwererani ku microservices ndi Istio. Gawo 1
Njira zomwe ziyenera kukonzedwa ndi VirtualServices

Tiyeni tiwone zopempha zomwe ziyenera kutumizidwa ku SA-Frontend:

  • Kufanana kwenikweni panjira / iyenera kutumizidwa ku SA-Frontend kuti ipeze index.html;
  • Njira zokhazikika /static/* iyenera kutumizidwa ku SA-Frontend kuti ilandire mafayilo osasunthika omwe amagwiritsidwa ntchito kutsogolo, monga CSS ndi JavaScript;
  • Njira zofananira ndi mawonekedwe anthawi zonse '^.*.(ico|png|jpg)$', iyenera kutumizidwa ku SA-Frontend, chifukwa Izi ndi zithunzi zowonetsedwa patsamba.

Kukhazikitsa kumatheka ndi kasinthidwe kotsatira (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

Mfundo zofunika:

  1. VirtualService iyi imatanthawuza zopempha zomwe zikubwera http-chipata;
  2. Π’ destination Ntchito zomwe zopempha zimatumizidwa zimatsimikiziridwa.

ndemanga: Zosintha pamwambapa zimasungidwa mufayilo sa-virtualservice-external.yaml, yomwe ilinso ndi zoikamo zoyendetsera mu SA-WebApp ndi SA-Feedback, koma yafupikitsidwa apa m'nkhaniyo kuti ikhale yofupikitsa.

Tiyeni tigwiritse ntchito VirtualService poyimba:


ndemanga: Tikamadya zinthu za Istio, Kubernetes API Server imapanga chochitika chomwe chimalandiridwa ndi Istio Control Plane, ndipo pambuyo pake kusinthika kwatsopano kumagwiritsidwa ntchito kwa ma proxies a pod iliyonse. Ndipo wolamulira wa Ingress Gateway akuwoneka kuti ndi nthumwi ina yokonzedwa mu Control Plane. Zonsezi zikuwoneka ngati izi mujambula:

Bwererani ku microservices ndi Istio. Gawo 1
Kukonzekera kwa Istio-IngressGateway pakufunsira njira

Sentiment Analysis application ikupezeka pa http://{EXTERNAL-IP}/. Osadandaula ngati simunapezeke: Nthawi zina zimatenga nthawi yayitali kuti kasinthidwe ayambe kugwira ntchito ndipo ma cache a Envoy asinthe.

Musanayambe, sewerani ndi pulogalamuyi pang'ono kuti mupange magalimoto. (kukhalapo kwake ndikofunikira kuti zimveke bwino pazotsatira - pafupifupi transl.).

Kiali: kuwonera

Kuti mufike pa mawonekedwe a Kiali, yendetsani lamulo ili:


... ndi kutsegula http://localhost:20001/, kulowa ngati admin/admin. Apa mupeza zinthu zambiri zothandiza, mwachitsanzo, kuyang'ana kasinthidwe ka zigawo za Istio, kuwona mautumiki pogwiritsa ntchito zidziwitso zomwe zasonkhanitsidwa kuchokera pakufunsira zofunsira pa netiweki, pezani mayankho a mafunso "Ndani akulumikizana ndi ndani?", "Ndi mtundu uti wautumiki womwe ukukumana nawo. zolephera?” ndi zina zotero. Nthawi zambiri, fufuzani zomwe Kiali ali nazo musanayambe kuwonera ma metric ndi Grafana.

Bwererani ku microservices ndi Istio. Gawo 1

Grafana: mawonekedwe a metrics

Ma metric omwe amasonkhanitsidwa ku Istio amapita ku Prometheus ndipo amawonetsedwa ndi Grafana. Kuti mufike ku Grafana administrative interface, yendetsani lamulo ili pansipa ndikutsegula http://localhost:3000/:


Kusindikiza pa menyu Kunyumba pamwamba kumanzere ndi kusankha Istio Service Dashboard pamwamba kumanzere ngodya, kuyamba ndi utumiki sa-web-appkuti muwone ma metric omwe asonkhanitsidwa:

Bwererani ku microservices ndi Istio. Gawo 1

Zomwe zikutiyembekezera pano ndizopanda kanthu komanso zotopetsa - oyang'anira sangavomereze izi. Tiyeni tipange katundu wochepa ndi lamulo ili:


Tsopano tili ndi ma graph abwino kwambiri, ndipo kuwonjezera pa iwo, zida zabwino za Prometheus zowunikira ndi Grafana zowonera ma metric omwe angatithandizire kuphunzira za magwiridwe antchito, thanzi, kusintha / kutsika kwa ntchito pakapita nthawi.

Pomaliza, tiyeni tiyang'ane kutsata zopempha mu ntchito.

Jaeger: kutsatira

Tidzafunika kufufuza chifukwa ntchito zambiri zomwe tili nazo, zimakhala zovuta kwambiri kuti tipeze zomwe zalephereka. Tiyeni tiwone vuto losavuta kuchokera pachithunzi pansipa:

Bwererani ku microservices ndi Istio. Gawo 1
Chitsanzo chodziwika bwino cha pempho lolephera mwachisawawa

Pempho likubwera, likugwa - chifukwa chake ndi chiyani? Utumiki woyamba? Kapena wachiwiri? Pali zosiyana mu zonse ziwiri - tiyeni tiwone zipika za iliyonse. Kodi mwadzipeza bwanji mukuchita izi? Ntchito yathu ili ngati ofufuza mapulogalamu kuposa opanga ...

Ili ndi vuto lodziwika bwino mu ma microservices ndipo limathetsedwa ndi njira zotsatirira zogawa, momwe mautumiki amadutsa mutu wapadera kwa wina ndi mzake, pambuyo pake chidziwitsochi chimatumizidwa kumayendedwe otsatirira, pomwe amafananizidwa ndi zopempha. Nachi chithunzi:

Bwererani ku microservices ndi Istio. Gawo 1
TraceId imagwiritsidwa ntchito kuzindikira pempho

Istio imagwiritsa ntchito Jaeger Tracer, yomwe imagwiritsa ntchito ndondomeko ya OpenTracing API yodziyimira pawokha. Mutha kugwiritsa ntchito mawonekedwe a Jaeger ndi lamulo ili:


Tsopano pitani ku http://localhost:16686/ ndikusankha ntchito sa-web-app. Ngati ntchitoyo sinawonetsedwe mumenyu yotsitsa, onetsani / pangani zochitika patsamba ndikusintha mawonekedwe. Pambuyo pake, dinani batani Pezani Ma traces, yomwe iwonetsa zotsatizana zaposachedwa - sankhani chilichonse - mwatsatanetsatane pazotsatira zonse zidzawonekera:

Bwererani ku microservices ndi Istio. Gawo 1

Chizindikiro ichi chikuwonetsa:

  1. Pempho likubwera istio-ingressgateway (uku ndiko kuyanjana koyamba ndi imodzi mwamautumiki, ndipo Trace ID imapangidwa kuti ifunsidwe), pambuyo pake chipata chimatumiza pempho ku ntchitoyo. sa-web-app.
  2. Mu utumiki sa-web-app pempho likutengedwa ndi Evoy sidecar, "mwana" amapangidwa mu span (ndicho chifukwa ife tikuziwona izo mu mayendedwe) ndi kutumizidwa ku chidebe. sa-web-app. (chikhato - gawo lomveka la ntchito ku Jaeger, lomwe lili ndi dzina, nthawi yoyambira kugwira ntchito ndi nthawi yake. Spans ikhoza kukhazikitsidwa ndikuyitanitsa. Chithunzi chowongolera cha acyclic cha spans chimapanga trace. - pafupifupi. transl.)
  3. Apa pempho likukonzedwa ndi njira sentimentAnalysis. Zotsatirazi zapangidwa kale ndi ntchito, i.e. anafunika kusintha ma code.
  4. Kuyambira pano, pempho la POST likuyambika sa-logic. Trace ID iyenera kutumizidwa kuchokera sa-web-app.
  5. ...

ndemanga: Mu sitepe 4, ntchitoyo iyenera kuwona mitu yopangidwa ndi Istio ndikuipereka ku zopempha zotsatila monga momwe tawonetsera pachithunzichi:

Bwererani ku microservices ndi Istio. Gawo 1
(A) Istio ili ndi udindo wotumiza mitu; (B) Ntchito zili ndi udindo pamitu

Istio imagwira ntchito zambiri chifukwa ... imapanga mitu yazofunsira zomwe zikubwera, imapanga mipata yatsopano m'mbali zonse ndikuzipititsa patsogolo. Komabe, popanda kugwira ntchito ndi mitu mkati mwa mautumiki, njira yonse yofunsira idzatayika.

Mitu yotsatirayi iyenera kuganiziridwa:


Iyi si ntchito yovuta, koma kufewetsa kukhazikitsa kwake kulipo kale malaibulale ambiri - mwachitsanzo, mu ntchito ya sa-web-app, kasitomala wa RestTemplate amatumiza mitu iyi ngati mungowonjezera malaibulale a Jaeger ndi OpenTracing ku zizolowezi zake.

Dziwani kuti ntchito ya Sentiment Analysis ikuwonetsa zomwe zachitika mu Flask, Spring, ndi ASP.NET Core.

Tsopano zikuwonekeratu zomwe timatuluka m'bokosi (kapena pafupifupi kuchokera m'bokosi), tiyeni tiwone njira zowongoka bwino, kasamalidwe ka magalimoto pamaneti, chitetezo, ndi zina zambiri!

Zindikirani. transl.: Werengani za izi mu gawo lotsatira la zolemba za Istio kuchokera kwa Rinor Maloku, zomasulira zomwe zidzatsatira pa blog yathu posachedwa. PEZANI (March 14): Gawo lachiwiri zasindikizidwa kale.

PS kuchokera kwa womasulira

Werenganinso pa blog yathu:

Source: www.habr.com