Dzokera kumamicroservices neIstio. Chikamu 1

Dzokera kumamicroservices neIstio. Chikamu 1

Cherechedza. transl.: Masevhisi meshes akave mhinduro yakakodzera muzvivakwa zvemazuva ano zvekushandisa zvinotevera microservice architecture. Nepo Istio inogona kunge iri pamiromo yevazhinji mainjiniya eDevOps, ichiri chigadzirwa chitsva icho, kunyangwe chakazara maererano nehunyanzvi hwachinopa, chinogona kuda nguva yakawanda yekujairana nacho. Injiniya weGerman Rinor Maloku, uyo anoona nezve cloud computing yevatengi vakakura pakambani yekufonera Orange Networks, akanyora zvinoshamisa zvakatevedzana zvezvinhu zvinokutendera iwe kukurumidza uye zvakadzama kunyura muIstio. Anotanga nyaya yake neizvo Istio inogona kuita muhuwandu uye kuti iwe unogona sei kukurumidza kuzviona nemeso ako.

Istio -Iyo Open Source chirongwa chakagadziridzwa mukubatana nezvikwata zveGoogle, IBM neLyft. Inogadzirisa zvinonetsa zvinomuka mumamicroservices-based application, senge:

  • Traffic Management: nguva, kuedzazve, kuyera kuyera;
  • Chengetedzo: kupedzisa mushandisi kutendeseka uye mvumo;
  • Kucherechedzwa: kutsvaga, kutarisa, kutema miti.

Zvese izvi zvinogona kugadziriswa padanho rekushandisa, asi mushure meizvozvo masevhisi ako haazove "micro". Kuedza kwese kugadzirisa matambudziko aya kutambisa zviwanikwa zvekambani zvinogona kushandiswa zvakananga kune kukosha kwebhizinesi. Ngatitarisei muenzaniso:

Project Manager: Zvinotora nguva yakareba sei kuti uwedzere mhinduro?
Mugadziri: Mimhanyi miviri.

MP: Chii?.. Inongova CRUD!
R: Kuita CRUD ndicho chikamu chiri nyore, asi isu tichiri kuda kutendesa uye kubvumidza vashandisi nemasevhisi. Sezvo network isingavimbike, iwe uchafanirwa kuita zvikumbiro zvakadzokororwa, zvakare circuit breaker pattern muvatengi. Zvakare, kuve nechokwadi chekuti system yese haina kuparara, iwe unozoda nguva yekubuda uye mhodzi (kuti uwane rumwe ruzivo nezve ese ari maviri mapatani ataurwa, ona gare gare muchinyorwa - approx. transl.), uye kuitira kuona matambudziko, kutarisa, kutsvaga, […]

MP: Ah, saka ngatingoisa chinhu ichi muChigadzirwa sevhisi.

Ini ndinofunga zano rakajeka: huwandu hwenhanho uye kushanda nesimba kunodiwa kuwedzera imwe sevhisi yakakura. Muchikamu chino, tichatarisa kuti Istio inobvisa sei kuoma kwese kwataurwa pamusoro (izvo hazvina kuitirwa kuve bhizinesi logic) kubva kumasevhisi.

Dzokera kumamicroservices neIstio. Chikamu 1

taura pfungwa: Ichi chinyorwa chinofungidzira kuti une ruzivo rwekushanda rweKubernetes. Zvikasadaro, ndinokurudzira kuverenga sumo yangu kuKubernetes uye chete pashure paizvozvo ramba uchiverenga chinyorwa ichi.

Istio pfungwa

Munyika isina Istio, imwe sevhisi inoita zvikumbiro zvakananga kune imwe, uye kana paine kukundikana, sevhisi inofanirwa kuzvibata pachayo: ita kuyedza kutsva, kupa nguva yekubuda, kuvhura dunhu redunhu, nezvimwe.

Dzokera kumamicroservices neIstio. Chikamu 1
Network traffic muKubernetes

Istio inopa yakasarudzika mhinduro, yakaparadzaniswa zvachose kubva kumasevhisi uye kushanda nekukanganisa netiweki kutaurirana. Uye saka inoshandisa:

  • kukanganisa kushivirira: Zvichienderana nekodhi yemamiriro mumhinduro, inonzwisisa kana chikumbiro chakundikana uye wochiita zvakare.
  • Canary rollouts: inodzosera chete chikamu chakatarwa chezvikumbiro kune iyo itsva vhezheni yesevhisi.
  • Monitoring uye metrics: Zvakatora nguva yakareba sei kuti sevhisi ipindure?
  • Kutsvaga uye Kucherechedzwa: Inowedzera yakakosha misoro kuchikumbiro chega chega uye inovateedzera pane iyo cluster.
  • Chengetedzo: Inotora chiratidzo cheJWT, inosimbisa uye inobvumidza vashandisi.

Aya angori mashoma emikana (chaizvo ingori mishoma!) yekukushamisa iwe. Zvino ngatinyure mune zvehunyanzvi ruzivo!

Istio architecture

Istio inobata ese network traffic uye inoshandisa seti yemitemo kwairi, ichiisa smart proxy muchimiro che sidecar chigaba mune yega yega pod. MaProxies anomutsa zvese zvinogoneka zvinoumba a Data Plane, uye vanogona kugadzirwa zvine simba vachishandisa Kudzora Ndege.

Data Plane

MaProxies akaiswa mumapods anobvumira Istio kuzadzisa zviri nyore izvo zvatinoda. Semuyenzaniso, ngatitarisei iyo yekuedza zvakare uye yedunhu breaker mabasa.

Dzokera kumamicroservices neIstio. Chikamu 1
Kuedzazve uye kutyora kwedunhu kunoitwa muEnvoy

Summing up:

  1. nhume (tiri kutaura nezve proxy iri mubhokisi remota, iro rinogoverwa se zvakasiyana chigadzirwa - approx. transl.) inotumira chikumbiro kumuenzaniso wekutanga webasa B uye inokundikana.
  2. Envoy Sidecar anoedza zvakare (edzazve). (1)
  3. Chikumbiro chakundikana uye chinodzoserwa kune proxy yachidaidza.
  4. Izvi zvinovhura Circuit Breaker uye inodaidza iyo inotevera sevhisi kune zvinotevera zvikumbiro. (2)

Izvi zvinoreva kuti haufanirwe kushandisa imwe Yedzazve raibhurari, iwe haufanirwe kuita yako pachako kusevenzesa kweCircuit Breaking uye Service Discovery mumutauro wechirongwa X, Y kana Z. Zvese izvi nezvimwe zvakawanda zvinowanikwa kunze kwebhokisi. muIstio uye haidi kwete kuchinja kwekodhi.

Hukuru! Iye zvino ungada kuenda parwendo neIstio, asi iwe uchine kusava nechokwadi, mibvunzo yakazaruka. Kana iyi iri mhinduro yepasirese yezviitiko zvese zvehupenyu, saka une fungidziro yechisikigo: mushure mezvose, mhinduro dzese dzakadaro muchokwadi dzinoshanduka kuve dzisina kukodzera chero nyaya.

Uye pakupedzisira unobvunza: "Zvinogoneka here?"

Iye zvino wagadzirira rwendo rwegungwa, ngatizivei neKudzora Ndege.

Kudzora Ndege

Inoumbwa nezvikamu zvitatu: Pilot, chisanganiso ΠΈ nhare, iyo inoshanda pamwe chete kugadzirisa Nhume kuti dzifambise traffic, kutevedzera mitemo, uye kuunganidza telemetry data. Schematically zvese zvinotaridzika seizvi:

Dzokera kumamicroservices neIstio. Chikamu 1
Kudyidzana kweKudzora Ndege neData Plane

Nhume (kureva ndege yedata) inogadziriswa uchishandisa Kubernetes CRD (Custom Resource Definitions) inotsanangurwa neIstio uye yakanyatsogadzirirwa chinangwa ichi. Zvinoreva izvi kwauri ndezvekuti vanoita senge imwe sosi muKubernetes ine yakajairika syntax. Kana yangosikwa, sosi iyi inotorwa nendege yekudzora yoiswa kune Nhume.

Hukama hwemasevhisi kuIstio

Isu takatsanangura hukama hweIstio kumasevhisi, asi kwete zvakadzoserwa: masevhisi anobatana sei neIstio?

Kutaura chokwadi, masevhisi anonyatsoziva kuvepo kweIstio sehove dziri dzemvura padzinozvibvunza kuti, "Mvura chii zvakadaro?"

Dzokera kumamicroservices neIstio. Chikamu 1
Mufananidzo Victoria Dimitrakopoulos: - Unoda sei mvura? - Mvura chii zvakadaro?

Nokudaro, iwe unogona kutora boka rekushanda uye mushure mekutumira zvikamu zveIstio, masevhisi ari mairi acharamba achishanda, uye mushure mokubvisa zvikamu izvi, zvose zvichange zvakanaka zvakare. Zviri pachena kuti munyaya iyi iwe ucharasikirwa nekwanisi inopiwa neIstio.

Dzidziso yakakwana - ngatiise ruzivo urwu mukuita!

Istio mukuita

Istio inoda Kubernetes cluster ine angangoita 4 vCPU uye 8 GB ye RAM iripo. Kukurumidza kuseta sumbu uye kutevera mirairo kubva kuchinyorwa, ini ndinokurudzira kushandisa Google Cloud Platform, iyo inopa vashandisi vatsva. mahara $300.

Mushure mekugadzira sumbu uye kugadzirisa kupinda kuKubernetes kuburikidza neiyo console utility, unogona kuisa Istio kuburikidza neHelm package maneja.

Helm installation

Isa iyo Helm mutengi pakombuta yako, sezvakatsanangurwa mukati zvinyorwa zvepamutemo. Tichashandisa izvi kugadzira matemplate ekuisa Istio muchikamu chinotevera.

Kuisa Istio

Dhawunirodha Istio zviwanikwa kubva ichangoburwa (link yemunyori wemabviro kuvhezheni 1.0.5 yachinjirwa kune yazvino, kureva 1.0.6 - approx. transl.), bvisa zviri mukati mune rimwe dhairekitori, randichazofona kubva zvino [istio-resources].

Kuti uone zviri nyore zviwanikwa zveIstio, gadzira nzvimbo yezita muK8s cluster istio-system:

$ kubectl create namespace istio-system

Pedzisa kuiswa nekuenda kune dhairekitori [istio-resources] uye kumhanya murairo:

$ 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

Uyu murairo uchaburitsa zvakakosha zveIstio kufaira istio.yaml. Isu takagadzirisa iyo yakajairwa template kuti ienderane isu, tichitsanangura zvinotevera paramita:

  • global.mtls.enabled yakaiswa mukati false (kureva mTLS authentication yadzimwa - approx.)kurerutsa maitiro edu ekufambidzana;
  • tracing.enabled inosanganisira kukumbira kutsvaga uchishandisa Jaeger;
  • kiali.enabled inoisa Kiali muboka rekuona masevhisi uye traffic;
  • grafana.enabled inoisa Grafana kuti ione maitiro akaunganidzwa.

Ngatishandisei zviwanikwa zvakagadzirwa nemurairo:

$ kubectl apply -f istio.yaml

Kuiswa kweIstio pane cluster kwapera! Mirira kusvika mapodhi ese ari munzvimbo yemazita istio-system achakwanisa Running kana Completednekumhanyisa murairo uri pasi apa:

$ kubectl get pods -n istio-system

Ikozvino tagadzirira kuenderera mberi muchikamu chinotevera, apo tichasimudzira application.

Architecture yeSentiment Analysis application

Ngatishandisei muenzaniso weSentiment Analysis microservice application inoshandiswa mune yatotaurwa Nhanganyaya yeKubernetes. Izvo zvakaoma zvakakwana kuratidza kugona kweIstio mukuita.

Iko kushandiswa kunosanganisira ina microservices:

  1. sevhisi SA-Frontend, iyo inoshandira kumberi kweReactjs application;
  2. sevhisi SA-WebApp, iyo inoshandisa Sentiment Analysis mibvunzo;
  3. sevhisi SA-Logic, iyo inozviita pachayo manzwiro kuongorora;
  4. sevhisi SA-Feedback, iyo inogamuchira mhinduro kubva kune vashandisi pamusoro pekururama kwekuongorora.

Dzokera kumamicroservices neIstio. Chikamu 1

Mumufananidzo uyu, pamusoro pemasevhisi, tinoona zvakare Ingress Controller, iyo muKubernetes inofambisa zvikumbiro zvinouya kumasevhisi akakodzera. Istio inoshandisa pfungwa yakafanana mukati mayo Ingress Gateway, mamwe mashoko anozotevera.

Kumhanyisa application neproxy kubva kuIstio

Kuti uwane mamwe mashandisiro ataurwa muchinyorwa, clone yako repository istio-mastery. Iyo ine application uye inoratidza yeKubernetes uye Istio.

Kupinza sidecars

Kupinza kunogona kuitwa otomatiki kana noruoko. Kuti uise otomatiki zvigubhu zvepadivi, unozofanirwa kuseta label kunzvimbo yezita istio-injection=enabled, izvo zvinoitwa nemurairo unotevera:

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

Iye zvino podhi yega yega inozoiswa mune yakasarudzika namespace (default) ichagamuchira chigaba chayo chepadivi. Kuona izvi, ngatiisei bvunzo application nekuenda kumudzi wedhairekitori repository [istio-mastery] uye kuita murairo unotevera:

$ 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

Kana taendesa masevhisi, ngatitarisei kuti mapods ane midziyo miviri (ine sevhisi pachayo uye padivi payo) nekumhanyisa murairo. kubectl get pods uye kuve nechokwadi kuti pasi pembiru READY kukosha kwataurwa 2/2, zvichiratidza kuti midziyo yese iri kushanda:

$ 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

Zvinotaridzika seizvi:

Dzokera kumamicroservices neIstio. Chikamu 1
Envoy proxy mune imwe yepods

Ikozvino iyo application yave kusimuka uye ichishanda, isu tichada kubvumidza iri kuuya traffic kuti iuye mukushandisa.

Ingress Gateway

Iyo yakanakisa tsika yekuita izvi (kubvumira traffic musumbu) iri kuburikidza Ingress Gateway muIstio, iyo iri pa "kumucheto" kwesumbu uye inokubvumira kuti uite zvinhu zveIstio zvakadai sekufambisa, kuenzanisa kwekutakura, kuchengeteka uye kutarisa kwemigwagwa inouya.

Iyo Ingress Gateway chikamu uye sevhisi inoiendesa kunze yakaiswa musumbu panguva yekuiswa kweIstio. Kuti uzive yekunze IP kero yebasa, mhanya:

$ 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

Isu ticharamba tichiwana iyo application tichishandisa iyi IP (ini ndichaidaidza se EXTERNAL-IP), saka kuti zviitike isu tichanyora kukosha kwayo kuita shanduko:

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

Kana iwe ukaedza kuwana iyi IP kuburikidza nebrowser izvozvi, iwe unogashira Basa Risingawanikwe kukanganisa, nekuti nekusarudzika Istio inovhara zvese zvinouya traffic, Gateway haisati yatsanangurwa.

Gateway resource

Gedhi iCRD (Custom Resource Definition) muKubernetes, inotsanangurwa mushure mekuisa Istio musumbu uye kugonesa kugona kutsanangura madoko, protocol uye mauto atinoda kubvumidza inouya traffic.

Mune yedu kesi, isu tinoda kubvumidza HTTP traffic pachiteshi 80 kune ese mahosts. Basa rinoitwa netsanangudzo inotevera (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:
- "*"

Iyi gadziriso haidi tsananguro kunze kweiyo yekusarudza istio: ingressgateway. Neichi chisarudzi tinogona kutsanangura kuti ndeipi Ingress Gateway yekushandisa iyo gadziriso. Kwatiri, iyi ndiyo Ingress Gateway controller, iyo yakaiswa nekusarudzika muIstio.

Iyo gadziriso inoshandiswa nekudaidza murairo unotevera:

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

Iyo gedhi ikozvino inobvumira kupinda pachiteshi 80, asi haina ruzivo rwekuenda kupi zvikumbiro. Nokuda kweizvi uchada Virtual Services.

VirtualService resource

Iyo VirtualService inoudza iyo Ingress Gateway nzira yekufambisa zvikumbiro zvinotenderwa mukati mesumbu.

Zvikumbiro zvekushandisa kwedu zvinouya kuburikidza ne http-gedhi zvinofanirwa kutumirwa kune sa-frontend, sa-web-app uye sa-feedback masevhisi:

Dzokera kumamicroservices neIstio. Chikamu 1
Nzira dzinoda kugadzirwa neVirtualServices

Ngatitarisei zvikumbiro zvinofanirwa kutumirwa kuSA-Frontend:

  • Machisi chaiwo munzira / inofanira kutumirwa kuSA-Frontend kuti uwane index.html;
  • Prefixed nzira /static/* inofanira kutumirwa kuSA-Frontend kuti igamuchire static mafaira anoshandiswa kumberi, seCSS neJavaScript;
  • Nzira dzakafananidzwa nekutaura nguva dzose '^.*.(ico|png|jpg)$', inofanira kutumirwa kuSA-Frontend, nokuti Iyi ndiyo mifananidzo inoratidzwa papeji.

Iko kushandiswa kunowanikwa nekugadzirisa kunotevera (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

Pfungwa dzakakosha:

  1. Iyi VirtualService inoreva zvikumbiro zvinouya kuburikidza http-gedhi;
  2. Π’ destination Sevhisi inotumirwa zvikumbiro inotemwa.

taura pfungwa: Magadzirirwo ari pamusoro anochengetwa mufaira sa-virtualservice-external.yaml, iyo inewo marongero ekufambisa muSA-WebApp uye SA-Feedback, asi yakapfupikiswa pano muchinyorwa chekupfupika.

Ngatishandise VirtualService nekufona:


taura pfungwa: Patinodya zviwanikwa zveIstio, Kubernetes API Server inogadzira chiitiko chinogamuchirwa neIstio Control Plane, uye mushure meizvozvo kugadziridzwa kutsva kunoshandiswa kune imwe neimwe pod's Envoy proxies. Uye iyo Ingress Gateway controller inoita kunge imwe Nhume yakagadziridzwa muDhipatimendi Rokudzora. Zvese izvi zvinotaridzika seizvi mudhayagiramu:

Dzokera kumamicroservices neIstio. Chikamu 1
Istio-IngressGateway kumisikidza yekukumbira nzira

Sentiment Analysis application yave kuwanikwa pa http://{EXTERNAL-IP}/. Usanetseka kana iwe ukawana Hauna Kuwanikwa chimiro: Dzimwe nguva zvinotora nguva yakati rebei kuti gadziriso iite uye Envoy caches kugadzirisa.

Usati waenderera, tamba neapp zvishoma kuti ugadzire traffic. (kuvapo kwayo kwakakosha kuti ijekeswe muzviito zvinotevera - approx. transl.).

Kiali: kucherechedzwa

Kuti usvike kune Kiali administrative interface, mhanyisa unotevera kuraira:


... uye vhura http://localhost:20001/, kupinda mukati se admin/admin. Pano iwe unowana akawanda anobatsira maficha, semuenzaniso, kutarisa kumisikidzwa kweIstio zvikamu, fungidzira masevhisi uchishandisa ruzivo rwakaunganidzwa kubva mukubvunzurudza zvikumbiro zvetiweki, tora mhinduro kumibvunzo "Ndiani arikusangana naani?", "Ndeipi vhezheni yebasa iri kusangana kukundikana?” zvichingoenda zvakadaro. Kazhinji, ongorora kugona kweKiali usati waenderera mberi nekuona metrics neGrafana.

Dzokera kumamicroservices neIstio. Chikamu 1

Grafana: metrics kuona

Metrics inounganidzwa muIstio inopinda muPrometheus uye inoonekwa naGrafana. Kuti usvike kuGrafana administrative interface, mhanyisa murairo pazasi wobva wavhura http://localhost:3000/:


Kudzvanya pane menyu Home kumusoro kuruboshwe uye kusarudza Istio Service Dashboard kumusoro kuruboshwe, tanga nebasa sa-web-appkutarisa ma metrics akaunganidzwa:

Dzokera kumamicroservices neIstio. Chikamu 1

Izvo zvakatimirira pano ibasa risina chinhu uye rinofinha - manejimendi haazombobvumira izvi. Ngatigadzirei mutoro mudiki nemurairo unotevera:


Iye zvino tine magirafu akawanda akanaka, uye nekuwedzera kwavari, zvinoshamisa zvePrometheus zvishandiso zvekutarisa uye Grafana yekuona metrics izvo zvinotibvumira kudzidza nezvekuita, hutano, kuvandudzwa / kuderedzwa mumasevhisi nekufamba kwenguva.

Chekupedzisira, ngatitarisei kutsvaga zvikumbiro mumasevhisi.

Jaeger: kutsvaga

Tichada kutsvaga nekuti kuwanda kwesevhisi yatinayo, ndiko kunonyanya kuoma kusvika kune chikonzero chekutadza. Ngatitarisei nyaya iri nyore kubva pamufananidzo uri pazasi:

Dzokera kumamicroservices neIstio. Chikamu 1
Muenzaniso wechikumbiro chatadza kurongeka

Chikumbiro chinouya, chinowira - chikonzero chii? Sevhisi yekutanga? Kana wechipiri? Pane zvakasarudzika mune zvese - ngatitarisei matanda ega ega. Kangani kawakazvibata uchiita izvi? Basa redu rakafanana nesoftware yekuongorora pane vanogadzira ...

Iri idambudziko rakajairika mumamicroservices uye rinogadziriswa neakagoverwa ekutsvaga masisitimu, umo masevhisi anopfuudza yakasarudzika musoro kune mumwe nemumwe, mushure mezvo ruzivo urwu rwunotumirwa kune yekutevera system, kwainofananidzwa nedata rekukumbira. Heino mufananidzo:

Dzokera kumamicroservices neIstio. Chikamu 1
TraceId inoshandiswa kuona chikumbiro

Istio inoshandisa Jaeger Tracer, iyo inoshandisa mutengesi-akazvimiririra OpenTracing API chimiro. Iwe unogona kuwana iyo Jaeger mushandisi interface neinotevera rairo:


Zvino enda ku http://localhost:16686/ uye sarudza sevhisi sa-web-app. Kana iyo sevhisi isina kuratidzwa mune yekudonha-pasi menyu, ratidza / gadzira chiitiko pane peji uye gadzirisa iyo interface. Mushure meizvozvo, tinya bhatani Find Traces, iyo icharatidza zvichangobva kuitika - sarudza chero - ruzivo rwakadzama pane ese maronda achaonekwa:

Dzokera kumamicroservices neIstio. Chikamu 1

Ichi chinyorwa chinoratidza:

  1. Chikumbiro chinopinda istio-ingressgateway (uku ndiko kusangana kwekutanga neimwe yemasevhisi, uye Trace ID inogadzirwa yechikumbiro), mushure meizvozvo gedhi rinotumira chikumbiro kubasa. sa-web-app.
  2. Mushumiro sa-web-app chikumbiro chinotorwa neEnvoy sidecar, "mwana" anogadzirwa mukati menguva (ndosaka tichizviona mumatanho) uye anodzoserwa kumudziyo. sa-web-app. (sapanosvika - inonzwisisika unit yebasa muJaeger, ine zita, nguva yekutanga yekushanda uye nguva yayo. Spans inogona kuiswa uye kuodha. Yakanangwa acyclic graph yezvipanha inoumba trace. - approx. transl.)
  3. Pano chikumbiro chinogadziriswa nenzira sentimentAnalysis. Aya maronda atogadzirwa neapp, i.e. vaida kuchinja kodhi.
  4. Kubva panguva ino zvichienda mberi, chikumbiro chePOST chinotangwa mukati sa-logic. Trace ID inofanira kuendeswa mberi kubva sa-web-app.
  5. ...

taura pfungwa: Muchikamu chechina, chikumbiro chinofanira kuona misoro inogadzirwa neIstio uye ipfuure kune zvinotevera zvikumbiro sezvakaratidzwa mumufananidzo uri pazasi:

Dzokera kumamicroservices neIstio. Chikamu 1
(A) Istio ine basa rekutumira misoro; (B) Masevhisi ane basa remusoro

Istio inoita rakawanda rebasa nekuti... inogadzira misoro yezvikumbiro zvinouya, inogadzira mitsva mitsva mune yega yega yekutarisira uye inoendesa mberi. Nekudaro, pasina kushanda nemusoro mukati mesevhisi, iyo yakazara yekukumbira nzira yekutsvaga inorasika.

Misoro inotevera inofanirwa kuverengerwa:


Iri harisi basa rakaoma, asi kurerutsa kuita kwayo kwatovepo maraibhurari akawanda - semuenzaniso, mune sa-web-app sevhisi, iyo RestTemplate mutengi inoendesa mberi iyi misoro kana iwe ukangowedzera Jaeger uye OpenTracing raibhurari ku. kupindwa muropa kwake.

Ziva kuti Sentiment Analysis application inoratidza kuita muFlask, Spring, uye ASP.NET Core.

Iye zvino zvave pachena izvo zvatinowana kunze kwebhokisi (kana kupotsa kunze kwebhokisi), ngatitarisei nzira yakarongeka, manejimendi traffic traffic, chengetedzo, nezvimwe!

Cherechedza. transl.: Verenga pamusoro peizvi muchikamu chinotevera chezvinyorwa paIstio kubva kuRinor Maloku, shanduro dzichatevera pa blog yedu munguva pfupi iri kutevera. UPDATE (Kurume 14): Chikamu chechipiri yakatodhindwa.

PS kubva kumushanduri

Verenga zvakare pablog yedu:

Source: www.habr.com