Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia

Ohar. itzul.: Zerbitzu-sareak, zalantzarik gabe, gaur egungo azpiegituretan, mikrozerbitzuen arkitekturaren ondorengo aplikazioetarako gai nagusi bihurtu dira. Istio DevOps ingeniari askoren radarrean egon daitekeen arren, nahiko produktu berria da, eskaintzen dituen ezaugarrien aldetik konplexua bada ere, denbora asko behar izan dezake ezagutzeko. Rinor Maloku ingeniari alemaniarrak, Orange Networks telekomunikazio-enpresako bezero handientzako hodei-informazioaren arduraduna denak, Istio-n azkar eta sakonki murgiltzeko aukera ematen duten material sorta zoragarria idatzi du. Istio-k zer egin dezakeen eta zure begiekin azkar nola ikusten duzunarekin hasten du bere istorioa.

Istio β€” Kode irekiko proiektua, Google, IBM eta Lyft taldeekin elkarlanean garatua. Mikrozerbitzuetan oinarritutako aplikazioetan sortzen diren konplexutasunak konpontzen ditu, adibidez:

  • trafikoaren kudeaketa: denbora-muga, berriro saiakerak, karga orekatzea;
  • Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: azken erabiltzailearen autentifikazioa eta baimena;
  • behagarritasuna: trazadura, jarraipena, erregistroa.

Horiek guztiak aplikazio mailan konpondu daitezke, baina horren ondoren zure zerbitzuak ez dira "mikro" izango. Gai horiei aurre egiteko aparteko ahalegin guztia enpresa-baliabideen alferrik galtzea da, negozioaren baliorako zuzenean erabil litezkeenak. Demagun adibide bat:

Proiektu-kudeatzailea: zenbat denbora behar da feedback-a gehitzeko?
Garatzailea: bi sprint.

MP: Zer?... GORDINA besterik ez da!
R: CRUD egitea zereginaren zati erraza da, baina hala ere erabiltzaileak eta zerbitzuak autentifikatu eta baimendu behar ditugu. Sarea fidagarria ez denez, behin eta berriz eskaerak ezarri beharko dituzu, baita etengailuaren eredua bezeroetan. Gainera, sistema osoa huts egin ez zela ziurtatzeko, denbora-muga eta anteparatuak (Aipatutako bi ereduei buruz gehiago jakiteko, ikusi geroago artikuluan - gutxi gorabehera. itzul.), eta arazoak detektatzeko, jarraipena, trazadura, [...]

MP: Oh, jar dezagun funtzio hau Produktuen zerbitzuan.

Ideia argia dela uste dut: zerbitzu bakarra gehitzeko beharrezkoak diren urratsak eta esfortzuak izugarriak dira. Artikulu honetan, Istio-k goian aipatutako konplexutasun guztia (negozio-logikaren xedea ez duena) zerbitzuetatik nola kentzen duen ikusiko dugu.

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia

Kontuan izan: artikuluak Kubernetesen lan-ezagutza duzula suposatzen du. Bestela, irakurtzea gomendatzen dut nire Kubernetes-en aurkezpena eta orduan bakarrik jarraitu material hau irakurtzen.

Istio ideia

Istiorik gabeko mundu batean, zerbitzu batek eskaera zuzenak egiten dizkio beste bati, eta hutsegite kasuan, zerbitzuak berak kudeatu behar du: saiakera berri bat egin, denbora-muga eman, etengailu bat ireki, etab.

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
Sareko trafikoa Kubernetes-en

Istio-k, berriz, zerbitzu eta funtzioetatik guztiz bereizten den irtenbide espezializatu bat eskaintzen du, sareko interakzioa oztopatuz. Eta horrela ezartzen du:

  • akatsen tolerantzia: erantzuneko egoera kodean oinarrituta, eskaerak huts egin duen ala ez ulertzen du eta berriro bidaltzen du.
  • Kanariar Ibilgailuak: eskaeren ehuneko finko bat soilik birbideratzen du zerbitzuaren bertsio berrira.
  • Jarraipena eta neurketak: zenbat denbora behar izan du zerbitzuak erantzuteko?
  • Trazadura eta behagarritasuna: Eskaera bakoitzari goiburu bereziak gehitzen dizkio eta klusterrean zehar trazatzen ditu.
  • Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: JWT token bat berreskuratzen du, erabiltzaileak autentifikatu eta baimentzen ditu.

Hauek dira zu intrigatzeko aukera batzuk (batzuk benetan!). Orain murgil gaitezen xehetasun teknikoetan!

Arkitektura

Istio-k sareko trafiko guztia atzematen du eta arau-multzo bat aplikatzen dio, proxy adimendun bat txertatuz alboko edukiontzi moduan pod bakoitzean. Aukera guztiak aktibatzen dituzten proxyek osatzen dute a Datuen planoa, eta dinamikoki doi daitezke Kontrol-hegazkina.

Datuen planoa

Podetan txertatzen diren proxyei esker, Istio-k behar ditugun baldintzak erraz lortzen ditu. Adibidez, egiaztatu ditzagun berriro saiakerak eta etengailuaren funtzioak.

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
Envoy-en berriro saiakerak eta etenaldiak nola ezartzen diren

Laburtzeko:

  1. Jesukristo ( sidecar edukiontzi batean kokatutako proxy bati buruz ari gara, zein banatzen den eta nola produktu bereizia - gutxi gorabehera. itzul.) eskaera bat bidaltzen dio B zerbitzuko lehen instantziari eta huts egiten du.
  2. Envoy Sidecar berriro saiatzen ari da (berriro saiatu). (1)
  3. Huts egin duen eskaera deitu duen proxyari itzultzen zaio.
  4. Honek Circuit Breaker irekitzen du eta hurrengo zerbitzura deitzen du hurrengo eskaeretarako. (2)

Horrek esan nahi du ez duzula hurrengo Berriz saiatu liburutegia erabili beharrik, ez duzula Zirkuitu-hausturaren eta Zerbitzuen Aurkikuntzaren inplementazio propioa egin behar X, Y edo Z programazio-lengoaian. Hori guztia eta gehiago eskuragarri dago. kutxa Istioan eta ez du eskatzen edozein kodea aldaketak.

Bikaina! Orain, agian, bidaia bat egin nahi duzu Istiorekin, baina oraindik zalantza batzuk daude, galdera irekiak. Bizitzako une guztietarako irtenbide unibertsala bada, orduan legezko susmoa duzu: azken finean, irtenbide horiek guztiak ez dira egokiak kasurako.

Eta azkenean galdetzen duzu: "Pertsonalizagarria al da?"

Orain itsasoko bidaiarako prest zaude, eta ezagut dezagun Kontrol Hegazkina.

Kontrol-hegazkina

Hiru osagaiz osatuta dago: Pilot, Mixer ΠΈ Ziudadela, elkarrekin konfiguratzen duten Envoys trafikoa bideratzeko, politikak aplikatzeko eta telemetria datuak biltzeko. Eskematikoki, dena honelakoa da:

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
Kontrol-planoaren interakzioa Datu-planoarekin

Envoys (hau da, datu-hegazkina) konfiguratuta daude Kubernetes CRD (Personalizatutako Baliabideen Definizioak) Istio-k definitu eta horretarako bereziki diseinatua. Horrek esan nahi du zuretzat sintaxi ezaguna duten Kubernetes-en beste baliabide bat besterik ez direla. Sortu ondoren, baliabide hori kontrol-hegazkinak jasoko du eta Envoys-i aplikatuko die.

Zerbitzuen harremana Istiorekin

Istiok zerbitzuekin duen harremana deskribatu dugu, baina ez alderantziz: nola erlazionatzen dira zerbitzuak Istiorekin?

Egia esateko, zerbitzuek badakite Istioren presentziaz eta arrainek uraz dakite, euren buruari galdetzen diotenean: β€œZer da ura, hala ere?”.

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
Ilustrazioa Victoria Dimitrakopoulos: Nola gustatzen zaizu ura? - Zer da ura hala ere?

Horrela, lan-kluster bat har dezakezu eta Istio osagaiak zabaldu ondoren, bertan dauden zerbitzuek lanean jarraituko dute, eta osagai horiek kendu ondoren, dena ondo egongo da berriro. Argi dago kasu honetan Istiok ematen dituen aukerak galduko dituzula.

Nahikoa teoria: jar ditzagun ezagutza hori praktikan!

Istio praktikan

Istio-k Kubernetes kluster bat behar du gutxienez 4 vCPU eta 8 GB RAM eskuragarri dituena. Klusterra azkar igotzeko eta artikuluko argibideak jarraitzeko, erabiltzaile berriak eskaintzen dituen Google Cloud Platform erabiltzea gomendatzen dut doan 300 $.

Klusterra sortu eta Kuberneteserako sarbidea kontsolaren utilitatearen bidez konfiguratu ondoren, Istio instalatu dezakezu Helm pakete-kudeatzailearen bidez.

Helm Instalazioa

Instalatu Helm bezeroa zure ordenagailuan atalean deskribatzen den moduan dokumentazio ofiziala. Istio instalatzeko txantiloiak sortzeko erabiliko dugu hurrengo atalean.

Instalazioa

Deskargatu Istio baliabideak azken bertsioa (Jatorrizko egilearen 1.0.5 bertsiorako esteka oraingora aldatu da, hau da, 1.0.6 - gutxi gorabehera itzul.), atera edukiak direktorio bakarrera, izenez aipatuko dudana [istio-resources].

Istio baliabideak erraz identifikatzeko, sortu izen-espazio bat K8s klusterrean istio-system:

$ kubectl create namespace istio-system

Osatu instalazioa direktoriora nabigatuz [istio-resources] eta komandoa exekutatu:

$ 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

Komando honek Istioren funtsezko osagaiak fitxategi batera aterako ditu istio.yaml. Txantiloi estandarra guk geuk aldatu dugu parametro hauek zehaztuz:

  • global.mtls.enabled barruan instalatuta false (hau da, mTLS autentifikazioa desgaituta dago - gutxi gorabehera itzul.)gure datazio-prozesua errazteko;
  • tracing.enabled Jaeger-ekin eskaerak trazatzea ahalbidetzen du;
  • kiali.enabled Kiali kluster batean instalatzen du zerbitzuak eta trafikoa ikusteko;
  • grafana.enabled Grafana instalatzen du bildutako neurketak ikusteko.

Aplikatu sortutako baliabideak komandoarekin:

$ kubectl apply -f istio.yaml

Istio-ren instalazioa klusterrean amaitu da! Itxaron lek guztiak izen-eremuan arte istio-system gai izango da Running edo Completedbeheko komandoa exekutatuz:

$ kubectl get pods -n istio-system

Orain prest gaude hurrengo atalera jarraitzeko, non aplikazioa planteatu eta exekutatzeko.

Sentimenduen Analisi Aplikazioen Arkitektura

Erabil dezagun lehen aipatutako honetan erabiltzen den Sentiment Analysis mikrozerbitzuaren aplikazioaren adibidea Kubernetes-en aurkezpen artikulua. Istioren aukerak praktikan erakusteko aski konplexua da.

Aplikazioa lau mikrozerbitzuk osatzen dute:

  1. Zerbitzua SA-Frontend, Reactjs-en frontend aplikazioa balio duena;
  2. Zerbitzua SA Web App, Sentimenduen Analisirako kontsultak zerbitzatzen dituena;
  3. Zerbitzua SA Logikaberak egiten duena sentimenduen analisia;
  4. Zerbitzua SA Iritzia, erabiltzaileen iritzia jasotzen duena, egindako analisiaren zehaztasunari buruz.

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia

Diagrama honetan, zerbitzuez gain, Ingress Controller ere ikusten dugu, Kubernetesen sarrerako eskaerak dagozkien zerbitzuetara bideratzen dituena. Istio-k antzeko kontzeptu bat erabiltzen du Ingress Gateway-ren zati gisa, eta horren xehetasunak jarraituko dira.

Istioko proxy batekin aplikazio bat martxan jartzea

Artikuluan aipatutako eragiketa gehiago lortzeko, klonatu zure biltegia istio-maisu. Kubernetes eta Istiorako aplikazioa eta manifestuak ditu.

Alboko karroak sartzea

Txertaketa egin daiteke automatikoki edo eskuz. Alboko ontziak automatikoki txertatzeko, etiketa ezarri behar duzu izenen espazioan istio-injection=enabled, komando honen bidez egiten dena:

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

Orain izen-espazio lehenetsian zabalduko den pod bakoitza (default) bere sidecar edukiontzia lortuko du. Hori egiaztatzeko, inplementatu dezagun proba-aplikazio bat biltegiaren erro-direktoriora joanez [istio-mastery] eta hurrengo komandoa exekutatu:

$ 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

Zerbitzuak zabaldu ondoren, egiaztatu ontziek bi edukiontzi dituztela (zerbitzuarekin eta bere sidecarrekin) komandoa exekutatuz. kubectl get pods eta zutabearen azpian dagoela ziurtatuz READY zehaztutako balioa 2/2, bi edukiontziak martxan daudela sinbolizatuz:

$ 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

Ikusmen hau itxura du:

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
Envoy proxy ontzietako batean

Orain aplikazioa martxan dagoela, sarrerako trafikoa aplikazioan sartzen utzi behar dugu.

Ingress Gateway

Hori lortzeko praktikarik onena (klusterean trafikoa baimendu) bidezkoa da Ingress Gateway Istio-n, klusterraren "ertzean" kokatuta dagoena eta Istio-ren funtzioak gaitzeko aukera ematen dizu, hala nola bideraketa, karga orekatzea, segurtasuna eta sarrerako trafikoaren jarraipena.

Ingress Gateway osagaia eta kanpora birbidaltzen duen zerbitzua klusterrean instalatu ziren Istio instalazioan. Zerbitzu baten kanpoko IP helbidea jakiteko, exekutatu:

$ 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

IP hau erabiliz aplikaziora sartzen jarraituko dugu (KANPOKO IP bezala aipatuko dut), beraz, erosotasunerako, balioa aldagai batean idatziko dugu:

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

Orain arakatzaile baten bidez IP honetara sartzen saiatzen bazara, Zerbitzua erabilgarri ez dagoen errorea jasoko duzu, zeren lehenespenez, Istio-k sarrerako trafiko guztia blokeatzen duGateway bat definitu arte.

Gateway baliabidea

Gateway Kubernetes-en CRD (Personalizatutako Baliabideen Definizioa) bat da, Istio kluster batean instalatu ondoren definitua eta sarrerako trafikoa baimendu nahi dugun portuak, protokoloak eta ostalariak zehazteko gaitasuna ahalbidetzen duena.

Gure kasuan, HTTP trafikoa baimendu nahi dugu 80 atakan ostalari guztientzat. Arazoa ondoko definizioarekin gauzatzen da (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:
- "*"

Konfigurazio honek ez du azalpenik behar hautatzailea izan ezik istio: ingressgateway. Hautatzaile honekin, konfigurazioa zein Ingress Gatewayri aplikatu behar diogun zehaztu dezakegu. Gure kasuan, Istio-n lehenespenez instalatuta zegoen Ingress Gateway kontrolatzailea da.

Konfigurazioa komando honi deituz aplikatzen da:

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

Atebideak orain 80 atakarako sarbidea ahalbidetzen du, baina ez du ideiarik nondik bideratu eskaerak. Horretarako beharko duzu Zerbitzu birtualak.

Zerbitzu birtualaren baliabidea

Zerbitzu birtualak Ingress Gateway-ri esaten dio nola bideratu kluster barruan onartzen diren eskaerak.

http-gateway bidez gure aplikaziorako eskaerak sa-frontend, sa-web-app eta sa-feedback zerbitzuetara bidali behar dira:

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
VirtualServices-ekin konfiguratu beharreko ibilbideak

Kontuan izan SA-Frontend-era bidali beharreko eskaerak:

  • Bat-etortze zehatza bidean / SA-Frontend-era bidali behar da index.html lortzeko;
  • Aurrizkia duten bideak /static/* SA-Frontend-era bidali behar da frontend-ean erabiltzen diren fitxategi estatikoak lortzeko, hala nola CSS eta JavaScript;
  • Adierazpen erregulararekin bat datozen bideak '^.*.(ico|png|jpg)$', SA-Frontend-era bidali behar da, izan ere Hauek dira orrialdean agertzen diren irudiak.

Inplementazioa hurrengo konfigurazioarekin lortzen da (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

puntu garrantzitsua:

  1. Zerbitzu Birtual honek iristen diren eskaerei egiten die erreferentzia http-atebidea;
  2. Π’ destination eskaerak zein zerbitzura bidaltzen diren definitzen du.

Kontuan izan: goiko konfigurazioa fitxategi batean gordetzen da sa-virtualservice-external.yaml, SA-WebApp eta SA-Feedback-era bideratzeko ezarpenak ere baditu, baina laburtu egin da hemen artikuluan laburtzeko.

Aplikatu VirtualService deituz:


Kontuan izan: Istio baliabideak aplikatzen ditugunean, Kubernetes API Zerbitzariak Istio Kontrol Planak jasotzen duen gertaera bat abiarazten du, eta, horren ostean, konfigurazio berria pod bakoitzaren Envoy proxietan aplikatzen da. Eta Ingress Gateway kontrolagailua Kontrol Planoan konfiguratutako beste Envoy bat dela dirudi. Honek guztiak honela ikusten du diagraman:

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
Istio-IngressGateway konfigurazioa eskaera bideratzeko

Sentimenduen analisia eskuragarri dago orain http://{EXTERNAL-IP}/. Ez kezkatu Ez aurkitu egoera lortzen baduzu: batzuetan, pixka bat gehiago behar da konfigurazioa indarrean jartzeko eta Envoy cacheak eguneratzeko.

Jarraitu aurretik, jolastu pixka bat aplikazioarekin trafikoa sortzeko (Bere presentzia beharrezkoa da ondorengo ekintzetan argitasuna lortzeko - gutxi gorabehera.).

Kiali: behagarritasuna

Kiali administratzaile interfazera iristeko, exekutatu komando hau:


...eta irekia http://localhost:20001/admin/admin gisa saioa hasita. Hemen ezaugarri erabilgarriak aurkituko dituzu, adibidez, Istio osagaien konfigurazioa egiaztatzeko, sareko eskaerak atzematen jasotako informazioaren zerbitzuak ikusteko, "Nor ari da norekin harremanetan jartzen?", "Zerbitzuaren zein bertsio jasaten ari den galderen erantzunak lortzeko". porrotak?” eta abar. Oro har, arakatu Kiali-ren aukerak Grafana-rekin metrikak bistaratzen hasi aurretik.

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia

Grafana: metrikaren bistaratzea

Istio-n bildutako neurketak Prometheus-en amaitzen dira eta Grafanarekin bistaratzen dira. Grafanako administratzaile interfazera iristeko, exekutatu beheko komandoa eta ireki http://localhost:3000/:


Menuan klik eginez Hasiera goiko ezkerrean eta hautatu Istio Zerbitzuaren Arbela goiko ezkerreko izkinan, hasi zerbitzuarekin sa-web-appbildutako neurketak ikusteko:

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia

Hemen emanaldi huts eta guztiz aspergarri baten zain gaude - zuzendaritzak ez du inoiz hau onartuko. Sortu dezagun karga txiki bat komando honekin:


Orain askoz grafiko politagoak ditugu, eta horiez gain, monitorizaziorako Prometheus eta metrikak bistaratzeko Grafana tresna zoragarriak, errendimendua, osasun egoera, zerbitzuen hobekuntza/degradazioa denboran zehar ezagutzeko aukera emango digutenak.

Azkenik, ikus dezagun zerbitzuetan eskaeraren trazamendua.

Jaeger: trazadura

Trazadura beharko dugu, zenbat eta zerbitzu gehiago izan, orduan eta zailagoa delako porrotaren arrazoira iristea. Ikus dezagun beheko irudiko kasu sinple bat:

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
Ausazko huts egindako eskaera baten adibide tipikoa

Eskaera dator, erortzen da - zein da arrazoia? Lehen zerbitzua? Edo bigarrena? Bietan salbuespenak daude - ikus ditzagun bakoitzaren erregistroak. Zenbat aldiz harrapatu duzu zure burua hau egiten? Gure lana software detektibeen antza du garatzaileak baino...

Mikrozerbitzuetan oso hedatuta dagoen arazoa da eta banatutako trazatze-sistemek konpontzen dute, zeinetan zerbitzuek goiburu esklusibo bat pasatzen diote elkarri, eta ondoren informazio hori trazatze sistemara birbideratzen da, non eskaeraren datuekin alderatzen den. Hona hemen ilustrazio bat:

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
TraceId eskaera identifikatzeko erabiltzen da

Istio-k Jaeger Tracer erabiltzen du, saltzailetik independentea den OpenTracing API markoa ezartzen duena. Jaeger erabiltzailearen interfazera atzi dezakezu komando honekin:


Orain joan http://localhost:16686/ eta hautatu zerbitzu bat sa-web-app. Zerbitzua goitibeherako menuan agertzen ez bada, erakutsi/sortu jarduera orrialdean eta eguneratu interfazea. Horren ondoren egin klik botoian Bilatu arrastoak, azken arrastoak erakutsiko dituena - hautatu edozein - aztarna guztien informazio zehatza agertuko da:

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia

Aztarna honek erakusten du:

  1. Eskaera sartzen da istio-ingressgateway (zerbitzuetako batekin lehenengo interakzioa da, eta Trace ID bat sortzen da eskaerarako), eta ondoren atebideak zerbitzura bidaltzen du eskaera. sa-web-app.
  2. Zerbitzuan sa-web-app eskaera Envoy sidecar-ak jasotzen du, tartean "ume" bat sortzen da (horregatik ikusten dugu arrastoetan) eta edukiontzira birbideratzen da sa-web-app. (span - Jaeger-en lan-unitate logiko bat, izena, operazioaren hasiera-ordua eta iraupena dituena. Tarteak habiaratu eta ordenatu daitezke. Tarteen grafiko azikliko zuzendu batek arrasto bat osatzen du. - gutxi gorabehera. itzul.)
  3. Hemen eskaera metodoaren bidez prozesatzen da sentimenduAnalisia. Aztarna horiek dagoeneko aplikazioak sortzen ditu, hau da. kode aldaketak eskatzen zituzten.
  4. Une honetatik aurrera, POST eskaera bat hasten da sa-logikoa. Bertatik bidali behar da traza IDa sa-web-app.
  5. ...

Kontuan izan: 4. urratsean, aplikazioak Istio-k sortutako goiburuak ikusi beharko lituzke eta ondorengo eskaerei pasatu, beheko irudian ikusten den moduan:

Itzuli mikrozerbitzuetara Istio-rekin. 1. zatia
(A) Goiburuaren birbidaltzea Istioren ardura da; (B) Zerbitzuak goiburuen arduradunak dira

Istiok egiten du lanaren zatirik handiena sarrerako eskaeren goiburuak sortzen ditu, tarte berriak sortzen ditu alboko arreta bakoitzean eta birbidaltzen ditu. Hala ere, zerbitzuen barruan goiburuekin landu gabe, eskaeraren arrastoaren bide osoa galduko da.

Goiburu hauek kontuan hartu behar dira (birbidali):


Zeregin sinplea da, baina ezartzea errazteko, dagoeneko badago liburutegi asko - adibidez, sa-web-app zerbitzuan, RestTemplate bezeroak goiburu hauek birbidaltzen ditu Jaeger eta OpenTracing liburutegiak gehitzen badituzu. bere menpekotasunak.

Kontuan izan Sentiment Analysis aplikazioak Flask, Spring eta ASP.NET Core-en inplementazioak erakusten dituela.

Orain argi dagoenez zer ateratzen ari garen kutxatik (edo ia kutxatik ateratzen ari garen), ikus ditzagun bideratze-ematea, sareko trafikoaren kudeaketa, segurtasuna eta abar!

Ohar. itzul.: irakur ezazu horri buruz Rinor Maloku-ko Istio-ri buruzko materialen hurrengo zatian, eta horien itzulpenak gure blogean izango dira etorkizun hurbilean. UPDATE (Martxoak 14): Bigarren zatia dagoeneko argitaratua.

PS itzultzailetik

Irakurri ere gure blogean:

Iturria: www.habr.com