Terug na mikrodienste met Istio. Deel 1

Terug na mikrodienste met Istio. Deel 1

Let wel. vertaal.: Diensnetwerke het beslis 'n warm onderwerp geword in vandag se infrastruktuur vir toepassings wat mikrodiensargitektuur volg. Alhoewel Istio dalk op die radar van baie DevOps-ingenieurs is, is dit 'n taamlik nuwe produk wat, hoewel kompleks in terme van kenmerke wat dit bied, 'n aansienlike hoeveelheid tyd kan neem om te leer ken. Die Duitse ingenieur Rinor Maloku, wat in beheer is van wolkrekenaars vir groot kliΓ«nte by die telekommunikasiemaatskappy Orange Networks, het 'n wonderlike reeks materiaal geskryf wat jou toelaat om vinnig en diep in Istio te duik. Hy begin sy storie met wat Istio kan doen en hoe jy dit vinnig met jou eie oΓ« kan sien.

Istio β€” Open Source-projek, ontwikkel in samewerking met spanne van Google, IBM en Lyft. Dit los die kompleksiteite op wat ontstaan ​​in toepassings gebaseer op mikrodienste, byvoorbeeld, soos:

  • verkeersbestuur: timeouts, herprobasies, laaibalansering;
  • sekuriteit: eindgebruiker-verifikasie en magtiging;
  • waarneembaarheid: opsporing, monitering, logging.

Almal van hulle kan op toepassingsvlak opgelos word, maar daarna sal u dienste nie meer "mikro" wees nie. Al die ekstra moeite om hierdie kwessies aan te spreek is 'n vermorsing van maatskappyhulpbronne wat direk vir besigheidswaarde gebruik kan word. Oorweeg 'n voorbeeld:

Projekbestuurder: Hoe lank neem dit om 'n terugvoerfunksie by te voeg?
Ontwikkelaar: Twee naellope.

MP: Wat?.. Dis net CRUD!
R: Om CRUD te doen is die maklike deel van die taak, maar ons moet steeds gebruikers en dienste verifieer en magtig. Aangesien die netwerk onbetroubaar is, sal jy herhaalde versoeke moet implementeer, asook stroombreker patroon in kliΓ«nte. Ook, om seker te maak dat die hele stelsel nie ineenstort nie, time-outs en schotten (Sien later in die artikel vir meer besonderhede oor beide genoemde patrone.), en om probleme op te spoor, monitering, opsporing, […]

MP: O, laat ons dan net hierdie kenmerk in die produkdiens plaas.

Ek dink die idee is duidelik: die hoeveelheid stappe en moeite wat nodig is om 'n enkele diens by te voeg, is groot. In hierdie artikel sal ons kyk hoe Istio al die kompleksiteit wat hierbo genoem word (nie geteiken deur besigheidslogika nie) van dienste verwyder.

Terug na mikrodienste met Istio. Deel 1

Let daarop: Die artikel veronderstel dat jy werkende kennis van Kubernetes het. Andersins beveel ek aan om te lees my inleiding tot Kubernetes en dan eers voort om hierdie materiaal te lees.

Istio idee

In 'n wΓͺreld sonder Istio rig een diens direkte versoeke aan 'n ander, en in geval van mislukking moet die diens dit self hanteer: maak 'n nuwe poging, maak voorsiening vir 'n time-out, maak 'n stroombreker oop, ens.

Terug na mikrodienste met Istio. Deel 1
Netwerkverkeer in Kubernetes

Istio, aan die ander kant, bied 'n gespesialiseerde oplossing wat heeltemal apart is van dienste en funksies deur met netwerkinteraksie in te meng. En so implementeer dit:

  • fout verdraagsaamheid: gebaseer op die statuskode in die antwoord, verstaan ​​dit of die versoek misluk het en dien dit weer in.
  • Kanarie-uitrol: herlei slegs 'n vaste persentasie versoeke na die nuwe weergawe van die diens.
  • Monitering en Metrieke: hoe lank het dit geneem vir die diens om te reageer?
  • Naspeuring en waarneembaarheid: Voeg spesiale opskrifte by elke versoek en spoor dit oor die groepie na.
  • sekuriteit: Haal 'n JWT-token op, verifieer en magtig gebruikers.

Hierdie is net 'n paar van die moontlikhede (regtig net 'n paar!) om jou te intrigeer. Kom ons duik nou in die tegniese besonderhede!

Argitektuur

Istio onderskep alle netwerkverkeer en pas 'n stel reΓ«ls daarop toe, en plaas 'n slim proxy in die vorm van 'n syspanhouer in elke peul. Gevolmagtigdes wat alle moontlikhede aktiveer, vorm a Data Vliegtuig, en hulle kan dinamies aangepas word met Beheervliegtuig.

Data Vliegtuig

Die gevolmagtigdes wat in die peule geplaas word, stel Istio in staat om maklik die vereistes te bereik wat ons benodig. Kom ons kyk byvoorbeeld na die herprobasies en stroombrekerfunksies.

Terug na mikrodienste met Istio. Deel 1
Hoe herprobasies en stroomonderbreking in Envoy geΓ―mplementeer word

Opsomming:

  1. gesant (Ons praat van 'n instaanbediener wat in 'n syspanhouer geleΓ« is, wat versprei word en hoe aparte produk - ongeveer. vertaal.) stuur 'n versoek na die eerste instansie van diens B en misluk.
  2. Envoy Sidecar probeer weer (weer probeer). (1)
  3. Die mislukte versoek word teruggestuur na die gevolmagtigde wat dit geroep het.
  4. Dit maak die stroombreker oop en roep die volgende diens vir daaropvolgende versoeke. (2)

Dit beteken dat jy nie die volgende Herprobeer-biblioteek hoef te gebruik nie, jy hoef nie jou eie implementering van Circuit Breaking and Service Discovery in die X-, Y- of Z-programmeertaal te maak nie. Dit alles en meer is beskikbaar uit die boks in Istio en vereis nie geen kode verander.

Puik! Nou wil jy dalk saam met Istio op reis gaan, maar daar is nog twyfel, oop vrae. As dit 'n universele oplossing is vir alle geleenthede in die lewe, dan het jy 'n regmatige vermoede: al sulke oplossings is immers in werklikheid nie geskik vir enige geval nie.

En uiteindelik vra jy: "Is dit aanpasbaar?"

Nou is jy gereed vir 'n seereis – en kom ons maak kennis met Control Plane.

Beheervliegtuig

Dit bestaan ​​uit drie komponente: Pilot, Mixer ΠΈ Citadel, wat saam Gesante konfigureer om verkeer te stuur, beleide toe te pas en telemetriedata in te samel. Skematies lyk dit alles so:

Terug na mikrodienste met Istio. Deel 1
Interaksie van beheervlak met datavlak

Gesante (d.w.s. datavlak) is gekonfigureer met Kubernetes CRD (Custom Resource Definitions) gedefinieer deur Istio en spesifiek ontwerp vir hierdie doel. Wat dit vir jou beteken, is dat dit net nog 'n hulpbron in Kubernetes is met 'n bekende sintaksis. Sodra dit geskep is, sal hierdie hulpbron deur die beheervliegtuig opgetel word en op Gesante toegepas word.

Verhouding van dienste aan Istio

Ons het Istio se verhouding tot dienste beskryf, maar nie andersom nie: hoe hou dienste verband met Istio?

Om eerlik te wees, dienste weet van die teenwoordigheid van Istio sowel as visse weet van water, wanneer hulle hulself afvra: "Wat is water in elk geval?".

Terug na mikrodienste met Istio. Deel 1
illustrasie Victoria Dimitrakopoulos: Hoe hou jy van die water? - Wat is water in elk geval?

U kan dus 'n werkende groepering neem en nadat u die Istio-komponente ontplooi het, sal die dienste daarin aanhou werk, en nadat u hierdie komponente verwyder het, sal alles weer reg wees. Dit is duidelik dat u in hierdie geval die geleenthede wat Istio bied, sal verloor.

Genoeg teorie – kom ons sit hierdie kennis in die praktyk!

Istio in die praktyk

Istio benodig 'n Kubernetes-kluster met ten minste 4 vCPU's en 8 GB RAM beskikbaar. Om die groep vinnig te verhoog en die instruksies uit die artikel te volg, beveel ek aan om die Google Wolk-platform te gebruik, wat nuwe gebruikers bied gratis $300.

Nadat u die groepering geskep het en toegang tot Kubernetes deur die konsolehulpmiddel opgestel het, kan u Istio installeer deur die Helm-pakketbestuurder.

Roer installasie

Installeer die Helm-kliΓ«nt op jou rekenaar soos beskryf in amptelike dokumentasie. Ons sal dit gebruik om sjablone te genereer vir die installering van Istio in die volgende afdeling.

Installasie

Laai Istio-hulpbronne af van nuutste vrystelling (die oorspronklike skrywer se skakel na weergawe 1.0.5 is verander na die huidige een, d.w.s. 1.0.6 - ongeveer transl.), onttrek die inhoud na 'n enkele gids, waarna ek sal verwys as [istio-resources].

Vir maklike identifikasie van Istio-hulpbronne, skep 'n naamruimte in die K8s-groepering istio-system:

$ kubectl create namespace istio-system

Voltooi die installasie deur na die gids te navigeer [istio-resources] en voer die opdrag uit:

$ 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

Hierdie opdrag sal die sleutelkomponente van Istio na 'n lΓͺer uitvoer istio.yaml. Ons het die standaard sjabloon vir onsself gewysig deur die volgende parameters te spesifiseer:

  • global.mtls.enabled geΓ―nstalleer in false (m.a.w. mTLS-verifikasie is gedeaktiveer - ongeveer transl.)om ons dating proses te vereenvoudig;
  • tracing.enabled maak versoekopsporing met Jaeger moontlik;
  • kiali.enabled installeer Kiali in 'n groepering om dienste en verkeer te visualiseer;
  • grafana.enabled installeer Grafana om die versamelde statistieke te visualiseer.

Pas die gegenereerde hulpbronne toe met die opdrag:

$ kubectl apply -f istio.yaml

Installasie van Istio in die cluster is voltooi! Wag totdat alle peule in die naamruimte is istio-system sal in staat wees om Running of Completeddeur die opdrag hieronder uit te voer:

$ kubectl get pods -n istio-system

Ons is nou gereed om voort te gaan na die volgende afdeling, waar ons die toepassing sal verhoog en uitvoer.

Sentimentanalise Toepassingsargitektuur

Kom ons gebruik die voorbeeld van die Sentiment Analysis-mikrodienstoepassing wat in die reeds genoemde gebruik is Inleidingsartikel tot Kubernetes. Dit is kompleks genoeg om die moontlikhede van Istio in die praktyk te wys.

Die toepassing bestaan ​​uit vier mikrodienste:

  1. Service SA-Frontend, wat die front-end-toepassing op Reactjs bedien;
  2. Service SA WebApp, wat Sentimentanalise-navrae bedien;
  3. Service SA Logikawat homself verrig sentiment analise;
  4. Service SA Terugvoer, wat terugvoer van gebruikers ontvang oor die akkuraatheid van die analise wat uitgevoer is.

Terug na mikrodienste met Istio. Deel 1

In hierdie diagram sien ons, benewens dienste, ook die ingangbeheerder, wat in Kubernetes inkomende versoeke na die ooreenstemmende dienste stuur. Istio gebruik 'n soortgelyke konsep as deel van die Ingress Gateway, waarvan besonderhede sal volg.

Begin 'n toepassing met 'n proxy van Istio

Vir verdere bewerkings wat in die artikel genoem word, kloon u bewaarplek istio-meesterskap. Dit bevat die toepassing en manifeste vir Kubernetes en Istio.

Syspan insit

Invoeging kan gemaak word outomaties of hand. Om syspanhouers outomaties in te voeg, moet jy die etiket op die naamruimte stel istio-injection=enabled, wat gedoen word deur die volgende opdrag:

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

Nou is elke pod wat in die verstek naamruimte (default) sal sy syspanhouer kry. Om dit te verifieer, laat ons 'n toetstoepassing ontplooi deur na die wortelgids van die bewaarplek te gaan [istio-mastery] en voer die volgende opdrag uit:

$ 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

Nadat u die dienste ontplooi het, maak seker dat die peule twee houers het (met die diens self en sy syspan) deur die opdrag uit te voer kubectl get pods en maak seker dat onder die kolom READY waarde gespesifiseer 2/2, wat simboliseer dat beide houers loop:

$ 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

Visueel lyk dit so:

Terug na mikrodienste met Istio. Deel 1
Gesant volmag in een van die peule

Noudat die toepassing aan die gang is, moet ons toelaat dat inkomende verkeer die toepassing binnegaan.

Ingangpoort

Die beste praktyk om dit te bereik (laat verkeer in die groep toe) is via Ingangpoort in Istio, wat aan die "rand" van die groep geleΓ« is en jou toelaat om Istio-kenmerke soos roetering, vragbalansering, sekuriteit en monitering vir inkomende verkeer te aktiveer.

Die Ingress Gateway-komponent en die diens wat dit na buite stuur, is tydens die Istio-installasie op die groep geΓ―nstalleer. Om die eksterne IP-adres van 'n diens uit te vind, hardloop:

$ 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

Ons sal voortgaan om toegang tot die toepassing te kry met hierdie IP (ek sal daarna verwys as EXTERNAL-IP), so gerieflikheidshalwe sal ons die waarde na 'n veranderlike skryf:

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

As jy nou probeer om toegang tot hierdie IP deur 'n blaaier te kry, sal jy 'n Service Unavailable-fout kry, want by verstek blokkeer Istio alle inkomende verkeertotdat Gateway gedefinieer is.

Gateway hulpbron

Gateway is 'n CRD (Custom Resource Definition) in Kubernetes, gedefinieer nadat Istio in 'n cluster geΓ―nstalleer is en die vermoΓ« moontlik maak om poorte, protokol en gashere te spesifiseer waarvoor ons inkomende verkeer wil toelaat.

In ons geval wil ons HTTP-verkeer op poort 80 vir alle gashere toelaat. Die probleem word deur die volgende definisie besef (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:
- "*"

Hierdie konfigurasie het geen verduideliking nodig nie, behalwe vir die kieser istio: ingressgateway. Met hierdie kieser kan ons spesifiseer op watter Ingress Gateway die konfigurasie moet toegepas word. In ons geval is dit die Ingress Gateway-beheerder, wat by verstek in Istio geΓ―nstalleer is.

Die konfigurasie word toegepas deur die volgende opdrag te roep:

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

Die poort laat nou toegang tot poort 80 toe, maar het geen idee waarheen om die versoeke te stuur nie. Hiervoor sal jy nodig hΓͺ Virtuele dienste.

Virtuele dienshulpbron

Die VirtualService vertel die Ingress Gateway hoe om versoeke te stuur wat binne die groep toegelaat word.

Versoeke na ons aansoek wat deur die http-gateway kom, moet na die sa-frontend, sa-web-app en sa-terugvoerdienste gestuur word:

Terug na mikrodienste met Istio. Deel 1
Roetes wat met VirtualServices gekonfigureer moet word

Oorweeg die versoeke wat aan SA-Frontend gestuur moet word:

  • Presiese passing langs die pad / moet na SA-Frontend gestuur word om index.html te kry;
  • Paadjies met 'n voorvoegsel /static/* moet na SA-Frontend gestuur word om statiese lΓͺers wat in die frontend gebruik word, soos CSS en JavaScript te kry;
  • Paadjies wat ooreenstem met die gereelde uitdrukking '^.*.(ico|png|jpg)$', moet aan SA-Frontend gestuur word, want Dit is die prente wat op die bladsy vertoon word.

Die implementering word bereik deur die volgende konfigurasie (sa-virtuele diens-ekstern.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

Belangrike punte:

  1. Hierdie virtuele diens verwys na versoeke wat deurkom http-poort;
  2. Π’ destination definieer die diens waarna die versoeke gestuur word.

Let daarop: Die konfigurasie hierbo word in 'n lΓͺer gestoor sa-virtualservice-external.yaml, wat ook instellings bevat vir roetering na SA-WebApp en SA-Terugvoer, maar is kortliks hier in die artikel verkort.

Pas VirtualService toe deur te skakel:


Let daarop: Wanneer ons Istio-hulpbronne toepas, vuur die Kubernetes API-bediener 'n gebeurtenis af wat die Istio-beheervliegtuig ontvang, en daarna word die nuwe konfigurasie op elke pod se Envoy-instaanbediener toegepas. En die Ingress Gateway-beheerder blyk nog 'n gesant te wees wat in die beheervlak gekonfigureer is. Dit alles lyk soos volg in die diagram:

Terug na mikrodienste met Istio. Deel 1
Istio-IngressGateway-konfigurasie vir versoekroetering

Sentimentanalise is nou beskikbaar op http://{EXTERNAL-IP}/. Moenie bekommerd wees as jy Nie Gevind-status kry nie: soms neem dit 'n bietjie langer vir die konfigurasie om in werking te tree en vir die Envoy-geheue om op te dateer.

Voordat u voortgaan, speel 'n bietjie met die toepassing om verkeer te genereer. (die teenwoordigheid daarvan is nodig vir duidelikheid in daaropvolgende aksies - ongeveer vertaal.).

Kiali: waarneembaarheid

Voer die volgende opdrag uit om by die Kiali-administrasie-koppelvlak te kom:


…en oop http://localhost:20001/deur aan te meld as admin/admin. Hier sal jy baie nuttige kenmerke vind, byvoorbeeld om die opstelling van Istio-komponente na te gaan, dienste te visualiseer uit inligting wat ingesamel is deur netwerkversoeke te onderskep, antwoorde te kry op die vrae "Wie kontak wie?", "Watter weergawe van die diens ervaar mislukkings?” en so aan. Oor die algemeen, verken die moontlikhede van Kiali voordat u verder gaan met die visualisering van metrieke met Grafana.

Terug na mikrodienste met Istio. Deel 1

Grafana: visualisering van metrieke

Die maatstawwe wat in Istio versamel word, beland in Prometheus en word met Grafana gevisualiseer. Om by die Grafana-administrasie-koppelvlak te kom, voer die opdrag hieronder uit en maak dan oop http://localhost:3000/:


Deur op die spyskaart te klik What is This links bo en kies Istio Service Dashboard in die boonste linkerhoek, begin met diens sa-web-appom die versamelde maatstawwe te sien:

Terug na mikrodienste met Istio. Deel 1

Hier wag ons vir 'n leΓ« en heeltemal vervelige optrede – die bestuur sal dit nooit goedkeur nie. Kom ons skep 'n klein vrag met die volgende opdrag:


Nou het ons baie mooier grafieke, en bykomend tot hulle, die wonderlike instrumente Prometheus vir monitering en Grafana vir die visualisering van statistieke, wat ons in staat sal stel om te leer oor prestasie, gesondheidstatus, verbeterings / agteruitgang in dienste met verloop van tyd.

Laastens, kom ons kyk na versoekopsporing in dienste.

Jaeger: opspoor

Ons sal opsporing nodig hΓͺ, want hoe meer dienste ons het, hoe moeiliker is dit om by die oorsaak van die mislukking uit te kom. Kom ons kyk na 'n eenvoudige geval uit die prentjie hieronder:

Terug na mikrodienste met Istio. Deel 1
Tipiese voorbeeld van 'n ewekansige mislukte versoek

Versoek kom, val - wat is die rede? Eerste diens? Of tweede? Daar is uitsonderings in beide - kom ons kyk na die logs van elkeen. Hoe gereeld het jy jouself al gevang om dit te doen? Ons werk is meer soos sagteware-speurders as ontwikkelaars ...

Dit is 'n wydverspreide probleem in mikrodienste en word opgelos deur verspreide opsporingstelsels, waarin dienste 'n unieke kop aan mekaar deurgee, waarna hierdie inligting na die opsporingstelsel herlei word, waar dit met die versoekdata vergelyk word. Hier is 'n illustrasie:

Terug na mikrodienste met Istio. Deel 1
TraceId word gebruik om die versoek te identifiseer

Istio gebruik Jaeger Tracer, wat 'n verskaffer-onafhanklike OpenTracing API-raamwerk implementeer. U kan toegang tot die Jaeger-gebruikerskoppelvlak verkry met die volgende opdrag:


Gaan nou na http://localhost:16686/ en kies 'n diens sa-web-app. As die diens nie in die aftreklys gewys word nie, wys/genereer aktiwiteit op die bladsy en werk die koppelvlak op. Klik daarna op die knoppie Soek spore, wat die mees onlangse spore sal wys - kies enige - gedetailleerde inligting oor alle spore sal verskyn:

Terug na mikrodienste met Istio. Deel 1

Hierdie spoor toon:

  1. Die versoek kom in istio-ingangpoort (dit is die eerste interaksie met een van die dienste, en 'n Trace ID word vir die versoek gegenereer), waarna die poort die versoek na die diens stuur sa-web-app.
  2. In diens sa-web-app die versoek word deur die Gesant-syspan opgetel, 'n "kind" word in die span geskep (dis hoekom ons dit in spore sien) en herlei word na die houer sa-web-app. (span - 'n logiese eenheid van werk in Jaeger, met 'n naam, die begintyd van die operasie en die duur daarvan. Spanninge kan genesteer en bestel word. 'n Gerigte asikliese grafiek van streke vorm 'n spoor. - ongeveer. vertaal.)
  3. Hier word die versoek volgens die metode verwerk sentimentontleding. Hierdie spore word reeds deur die toepassing gegenereer, d.w.s. hulle het kodeveranderings vereis.
  4. Vanaf hierdie oomblik word 'n POST-versoek geΓ―nisieer in sa-logika. Spoor ID moet aangestuur word vanaf sa-web-app.
  5. ...

Let daarop: In stap 4 moet die toepassing die opskrifte sien wat deur Istio gegenereer is en dit aan daaropvolgende versoeke deurgee, soos in die prent hieronder getoon:

Terug na mikrodienste met Istio. Deel 1
(A) Kopaanstuur is die verantwoordelikheid van Istio; (B) Dienste is verantwoordelik vir opskrifte

Istio doen die grootste deel van die werk omdat genereer opskrifte vir inkomende versoeke, skep nuwe spanne in elke sysorg en stuur dit aan. Sonder om met opskrifte binne dienste te werk, sal die volle versoekspoorpad egter verlore gaan.

Die volgende opskrifte moet oorweeg word (aanstuur):


Dit is 'n eenvoudige taak, maar om die implementering daarvan te vereenvoudig, is daar reeds baie biblioteke - byvoorbeeld, in die sa-web-app-diens, stuur die RestTemplate-kliΓ«nt hierdie opskrifte aan as jy bloot die Jaeger- en OpenTracing-biblioteke byvoeg sy afhanklikhede.

Let daarop dat die Sentiment Analysis-toepassing implementerings in Flask, Spring en ASP.NET Core demonstreer.

Noudat dit duidelik is wat ons uit die boks kry (of amper uit die boks), kom ons kyk na fyn ingestelde roetering, netwerkverkeerbestuur, sekuriteit en meer!

Let wel. vertaal.: lees daaroor in die volgende deel van materiaal op Istio van Rinor Maloku, waarvan die vertalings in die nabye toekoms in ons blog sal volg. UPDATE (14 Maart): Tweede deel reeds gepubliseer.

PS van vertaler

Lees ook op ons blog:

Bron: will.com