Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1

Fanamarihana. transl.: Tena lasa vahaolana manan-danja amin'ny fotodrafitrasa maoderina ho an'ny fampiharana manaraka ny maritrano microservice ny meshes. Na dia mety ho eo am-bavan'ny injeniera DevOps maro aza i Istio, dia vokatra vaovao ihany izy io izay, na dia feno aza ny fahaiza-manao omeny, dia mety mitaky fotoana be hahafantarana azy. Ny injeniera alemΓ  Rinor Maloku, izay tompon'andraikitra amin'ny informatika rahona ho an'ny mpanjifa lehibe ao amin'ny orinasam-pifandraisan-davitra Orange Networks, dia nanoratra andiana fitaovana mahafinaritra izay ahafahanao mitsoraka haingana sy lalina ao amin'ny Istio. Manomboka ny tantarany amin'ny zavatra azon'i Istio atao amin'ny ankapobeny sy ny fomba ahafahanao mahita izany haingana amin'ny masonao.

Istio β€” Tetikasa Open Source novolavolaina niarahana tamin'ireo ekipa avy amin'ny Google, IBM ary Lyft. Izy io dia mamaha ny fahasarotana miseho amin'ny fampiharana mifototra amin'ny microservices, toy ny:

  • Fitantanana ny fifamoivoizana: fe-potoana, andrana indray, fampifandanjana entana;
  • fiarovana: fanamarinana sy fanomezan-dΓ lana ho an'ny mpampiasa farany;
  • Observability: fanaraha-maso, fanaraha-maso, fametahana.

Ireo rehetra ireo dia azo voavaha amin'ny ambaratonga fampiharana, fa aorian'izay dia tsy ho "micro" intsony ny serivisy. Ny ezaka fanampiny rehetra hamahana ireo olana ireo dia fandaniam-bolan'ny orinasa izay azo ampiasaina mivantana amin'ny sandan'ny orinasa. Andeha isika hijery ohatra iray:

Project Manager: Mandra-pahoviana no ilaina ny manampy endri-javatra fanehoan-kevitra?
Mpamorona: Sprint roa.

Solombavambahoaka: Inona ?.. CRUD fotsiny io an!
R: Ny fanaovana CRUD no ampahany mora, saingy mbola mila manamarina sy manome alalana ireo mpampiasa sy serivisy isika. Koa satria tsy azo ianteherana ny tambajotra, dia mila manatanteraka fangatahana miverimberina ianao, ary koa fomba fiatoana fitetezam-paritra amin'ny mpanjifa. Ary koa, mba hahazoana antoka fa ny rafitra manontolo dia tsy hianjera, dia mila fotoana sy bigheads (raha mila fanazavana fanampiny momba ireo lamina voalaza ireo dia jereo any aoriana ao amin'ny lahatsoratra - eo ho eo amin'ny dikanteny), ary mba hahitana olana, fanaraha-maso, fanaraha-maso, […]

MP: Oh, ndao ary ampidiro ao amin'ny serivisy vokatra ity endri-javatra ity.

Heveriko fa mazava ny hevitra: ny habetsaky ny dingana sy ny ezaka ilaina mba hanampiana serivisy iray dia goavana. Amin'ity lahatsoratra ity dia hojerentsika ny fomba hanesorana ny fahasarotana rehetra voalaza etsy ambony (izay tsy natao ho lojika fandraharahana) amin'ny serivisy i Istio.

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1

fanamarihana: Ity lahatsoratra ity dia mihevitra fa manana fahalalana momba ny Kubernetes ianao. Raha tsy izany dia manoro hevitra ny hamaky aho ny teny fampidirana an'i Kubernetes ary aorian'izay dia tohizo ny famakiana ity lahatsoratra ity.

Istio hevitra

Ao amin'ny tontolo tsy misy Istio, ny serivisy iray dia manao fangatahana mivantana amin'ny iray hafa, ary raha sendra misy tsy fahombiazana dia tsy maintsy miatrika izany ny serivisy: manao andrana vaovao, manome fe-potoana, manokatra fiatoana, sns.

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
Ny fifamoivoizana amin'ny tambajotra ao Kubernetes

Istio dia manolotra vahaolana manokana, misaraka tanteraka amin'ny serivisy ary miasa amin'ny alΓ lan'ny fanelingelenana ny fifandraisana amin'ny tambajotra. Ary toy izany no fampiharana:

  • fandeferana fahadisoana: Mifototra amin'ny fehezan-dalΓ na momba ny sata ao amin'ny valinteny, azony raha tsy nahomby ilay fangatahana ary avereno indray izany.
  • Famoahana Canary: tsy mamindra afa-tsy isan-jaton'ny fangatahana mankany amin'ny kinova vaovaon'ny serivisy.
  • Fanaraha-maso sy metrika: Naharitra hafiriana vao namaly ny serivisy?
  • Tracing sy Observability: Manampy lohapejy manokana amin'ny fangatahana tsirairay ary manara-maso azy ireo manerana ny cluster.
  • fiarovana: Maka JWT token, manamarina ary manome alalana ny mpampiasa.

Santionany amin'ireo fahafaha-manao (tena vitsivitsy ihany!) hanintona anao. Andeha hojerentsika ny antsipiriany ara-teknika!

Istio architecture

Istio dia manakana ny fifamoivoizana amin'ny tambajotra rehetra ary mampihatra fitsipika maromaro amin'izany, mampiditra proxy marani-tsaina amin'ny endrika kaontenera sidecar ao anaty pod tsirairay. Ny proxy izay manetsika ny fahaiza-manao rehetra dia mamorona a Data fiaramanidina, ary azo amboarina amin'ny fomba mavitrika izy ireo amin'ny fampiasana Fiaramanidina fanaraha-maso.

Data fiaramanidina

Ny proxy ampidirina ao anaty pods dia ahafahan'i Istio mahafeno mora foana ny fepetra ilaintsika. Ohatra, andeha hojerentsika ny fiasan'ny retry sy ny fiatoana.

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
Ahoana ny fampiharana ny famerenana sy ny fanapahana ny faritra ao amin'ny Envoy

Raha fintinina:

  1. iraka (miresaka momba ny proxy misy ao anaty kaontenera sidecar isika, izay zaraina ho vokatra misaraka - eo ho eo. transl.) mandefa fangatahana amin'ny serivisy B voalohany ary tsy nahomby.
  2. Manandrana indray ny Envoy Sidecar (andramo indray). (1)
  3. Tsy nahomby ilay fangatahana ary averina amin'ny proxy niantso azy.
  4. Manokatra Circuit Breaker izany ary miantso ny serivisy manaraka ho an'ny fangatahana manaraka. (2)

Midika izany fa tsy mila mampiasa tranomboky Retry hafa ianao, tsy mila manao ny fampiharana anao manokana ny Circuit Breaking and Service Discovery amin'ny fiteny fandaharana X, Y na Z. Izany rehetra izany sy ny maro hafa dia azo alaina ivelan'ny boaty ao Istio ary tsy mitaky misy fiovana eo amin'ny kaody.

Mahafinaritra! Ankehitriny ianao dia mety te handeha amin'ny Istio, saingy mbola manana fisalasalana ianao, fanontaniana misokatra. Raha vahaolana manerantany ho an'ny fotoana rehetra eo amin'ny fiainana izany, dia manana ahiahy voajanahary ianao: raha ny marina, ny vahaolana toy izany raha ny marina dia tsy mety amin'ny tranga rehetra.

Ary farany dia manontany ianao hoe: "Azo atao ve izany?"

Efa vonona amin'ny dia an-dranomasina ianao izao, andao hifankahalala amin'ny fiaramanidina Control.

Fiaramanidina fanaraha-maso

Misy singa telo izy io: Pilot, Mixer ΠΈ Citadel, izay miara-miasa amin'ny fanefena ny Envoys mba hitarika ny fifamoivoizana, hampihatra ny politika, ary hanangona angona telemetry. Schematically dia toy izao manaraka izao:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
Fifandraisana amin'ny fiaramanidina fanaraha-maso amin'ny fiaramanidina data

Ny iraka (izany hoe angon-drakitra) dia namboarina mampiasa Kubernetes CRD (Famaritana loharanon-karena manokana) nofaritan'i Istio ary natao manokana ho an'io tanjona io. Ny dikan'izany aminao dia toa loharano hafa ao amin'ny Kubernetes izy ireo miaraka amin'ny fehezanteny mahazatra. Rehefa noforonina, ity loharano ity dia alain'ny fiaramanidina fanaraha-maso ary ampiharina amin'ny Iraka.

Fifandraisana amin'ny serivisy amin'ny Istio

Nofaritanay ny fifandraisan'i Istio amin'ny serivisy, fa tsy ny mifanohitra amin'izany: ahoana no ifandraisan'ny serivisy amin'i Istio?

Raha ny marina, ny serivisy dia mahafantatra ny fisian'i Istio toy ny trondro an-drano rehefa manontany tena izy ireo hoe: "Inona anefa ny rano?"

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
SARY Victoria Dimitrakopoulos: - Ahoana ny fitiavanao ny rano? - Inona anefa no atao hoe rano?

Noho izany, afaka maka cluster miasa ianao ary aorian'ny fametrahana ny singa Istio dia hanohy hiasa ny serivisy hita ao, ary aorian'ny fanesorana ireo singa ireo dia ho tsara indray ny zava-drehetra. Mazava fa amin'ity tranga ity dia ho very ny fahaiza-manao omen'ny Istio.

Ampy ny teoria - andao hampihatra izany fahalalana izany!

Istio amin'ny fampiharana

Istio dia mitaky kluster Kubernetes manana vCPU 4 farafahakeliny ary RAM 8 GB azo alaina. Mba hananganana cluster haingana sy hanaraka ny torolΓ lana avy amin'ny lahatsoratra, manoro hevitra aho ny hampiasa Google Cloud Platform, izay manolotra mpampiasa vaovao maimaim-poana $300.

Aorian'ny famoronana cluster sy ny fametrahana ny fidirana amin'ny Kubernetes amin'ny alΓ lan'ny fampitaovana fampiononana dia azonao atao ny mametraka Istio amin'ny alΓ lan'ny mpitantana fonosana Helm.

Fametrahana fiarovan-doha

Apetraho amin'ny solosainao ny mpanjifa Helm, araka ny voalaza ao antontan-taratasy ofisialy. Hampiasa izany izahay hamorona modely amin'ny fametrahana Istio amin'ny fizarana manaraka.

Fametrahana Istio

Misintona loharano Istio avy amin'ny famoahana farany (Ny rohin'ny mpanoratra tany am-boalohany mankany amin'ny version 1.0.5 dia novaina ho an'ny ankehitriny, izany hoe 1.0.6 - eo ho eo amin'ny transl.), esory ao anaty lahatahiry iray ny atiny, izay hantsoiko manomboka izao [istio-resources].

Mba hamantarana mora foana ny loharanon'i Istio, mamorona sehatra anarana ao amin'ny cluster K8s istio-system:

$ kubectl create namespace istio-system

Fenoy ny fametrahana amin'ny alΓ lan'ny fandehanana any amin'ny lahatahiry [istio-resources] ary mitantana ny baiko:

$ 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

Ity baiko ity dia hamoaka ireo singa fototra amin'ny Istio amin'ny rakitra istio.yaml. Nanova ny mΓ΄dely manara-penitra izahay mba hifanaraka amin'ny tenanay, ka mamaritra ireto mason-tsivana manaraka ireto:

  • global.mtls.enabled napetraka ao false (izany hoe tsy mandeha ny fanamarinana mTLS - eo ho eo)hanamora ny fizotry ny fiarahantsika;
  • tracing.enabled dia ahitana ny fanaraha-maso ny fangatahana mampiasa Jaeger;
  • kiali.enabled mametraka an'i Kiali ao anatin'ny vondrona iray mba hijery ny serivisy sy ny fifamoivoizana;
  • grafana.enabled mametraka Grafana mba hijery ireo metrika voaangona.

Andao hampiasa ireo loharano novokarina miaraka amin'ny baiko:

$ kubectl apply -f istio.yaml

Vita ny fametrahana ny Istio amin'ny cluster! Andraso mandra-pahatongan'ny pods rehetra ao amin'ny namespace istio-system dia ho afaka Running na Completedamin'ny alΓ lan'ny baiko etsy ambany:

$ kubectl get pods -n istio-system

Ankehitriny isika dia vonona ny hanohy amin'ny fizarana manaraka, izay hanombohantsika ny fampiharana.

Architecture ny fampiharana Fanadihadiana Sentiment

Andao hampiasa ny ohatry ny fampiharana microservice Sentiment Analysis ampiasaina amin'ny efa voalaza Lahatsoratra fampidirana amin'ny Kubernetes. Sarotra be ny mampiseho ny fahaizan'i Istio amin'ny fampiharana.

Ny fampiharana dia misy microservices efatra:

  1. fanompoana SA-Frontend, izay miasa eo anoloana amin'ny fampiharana Reactjs;
  2. fanompoana SA-WebApp, izay manolotra fanontaniana fanadihadiana momba ny fihetseham-po;
  3. fanompoana SA-Lojika, izay manao ny tenany famakafakana fihetseham-po;
  4. fanompoana SA-Feedback, izay mandray fanehoan-kevitra avy amin'ny mpampiasa momba ny fahamarinan'ny fanadihadiana.

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1

Ao amin'ity kisary ity, ankoatry ny serivisy, dia hitantsika ihany koa ny Ingress Controller, izay ao amin'ny Kubernetes dia mandefa ny fangatahana miditra amin'ny serivisy mety. Istio dia mampiasa hevitra mitovy amin'izany ao anatin'ny Ingress Gateway, izay manaraka ny antsipiriany bebe kokoa.

Mandeha fampiharana miaraka amin'ny proxy avy amin'ny Istio

Ho an'ny asa hafa voalaza ao amin'ny lahatsoratra, clone ny repository anao istio-fifehezana. Ahitana ny fampiharana sy fanehoana ho an'ny Kubernetes sy Istio.

Mampiditra sidecars

Azo atao ny fampidirana ho azy na amin'ny tanana. Mba hampidirana ho azy ireo kaontenera sidecar dia mila mametraka etikety amin'ny namespace ianao istio-injection=enabled, izay atao amin'ny baiko manaraka:

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

Ankehitriny ny pod tsirairay izay hapetraka ao amin'ny toerana misy anarana (default) dia hahazo ny kaontenera sidecar. Mba hanamarinana izany, andao hametraka ny fampiharana fitsapana amin'ny alΓ lan'ny fandehanana any amin'ny lahatahiry fototry ny tahiry [istio-mastery] ary mandehana ity baiko manaraka ity:

$ 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

Rehefa avy nametraka ny serivisy, andeha hojerentsika fa manana kaontenera roa ny pods (miaraka amin'ny serivisy sy ny sisiny) amin'ny alΓ lan'ny baiko. kubectl get pods ary manao izay hahazoana antoka fa eo ambanin'ny tsanganana READY sanda voafaritra 2/2, maneho fa samy mandeha ny container:

$ 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

Raha jerena dia toa izao:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
Mpisolo vava amin'ny iray amin'ireo pods

Ankehitriny rehefa mandeha ny fampiharana dia mila mamela ny fifamoivoizana miditra hiditra ao amin'ny fampiharana isika.

Ingress Gateway

Ny fomba tsara indrindra hanatrarana izany (avelao ny fifamoivoizana ao amin'ny cluster) dia ny mandalo Ingress Gateway ao amin'ny Istio, izay hita eo amin'ny "tsisin'ny" cluster ary ahafahanao mamela ny endri-javatra Istio toy ny routing, ny fifandanjana entana, ny fiarovana ary ny fanaraha-maso ny fifamoivoizana miditra.

Ny singa Ingress Gateway sy ny serivisy izay mandefa azy any ivelany dia napetraka tao amin'ny cluster nandritra ny fametrahana Istio. Raha te hahalala ny adiresy IP ivelany an'ny serivisy dia mandehana:

$ 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

Hanohy ny fidirana amin'ny fampiharana amin'ny fampiasana ity IP ity izahay (Antsoiko hoe EXTERNAL-IP izy io), noho izany dia hanoratra ny sanda amin'ny fari-piainana izahay:

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

Raha manandrana miditra amin'ity IP ity ianao amin'ny alΓ lan'ny navigateur izao, dia hahazo serivisy tsy azo ampiasaina ianao, satria amin'ny alΓ lan'ny default Istio dia manakana ny fifamoivoizana miditra rehetra, Tsy mbola voafaritra ny vavahady.

Loharano vavahady

Gateway dia CRD (Custom Resource Definition) ao amin'ny Kubernetes, voafaritra taorian'ny fametrahana an'i Istio ao amin'ny cluster ary mamela ny fahafahana mamaritra ny seranana, protocol ary mpampiantrano izay tiantsika hamela ny fifamoivoizana miditra.

Amin'ity tranga ity, te-hamela ny fifamoivoizana HTTP amin'ny seranan-tsambo 80 ho an'ny mpampiantrano rehetra izahay. Ny asa dia ampiharina amin'ny famaritana manaraka (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:
- "*"

Tsy mila fanazavana io fanefena io afa-tsy ny mpifidy istio: ingressgateway. Amin'ity mpifidy ity dia azontsika atao ny mamaritra hoe iza amin'ny Ingress Gateway hampiharana ny fanitsiana. Amin'ity tranga ity dia ity ny Ingress Gateway controller, izay napetraka amin'ny alΓ lan'ny Istio.

Ny fanamafisana dia ampiharina amin'ny fiantsoana ity baiko manaraka ity:

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

Ny vavahady izao dia mamela ny fidirana amin'ny seranan-tsambo 80, saingy tsy manana hevitra hoe aiza no handefasana fangatahana. Ho an'ity dia mila Serivisy virtoaly.

Loharano VirtualService

Ny VirtualService dia milaza amin'ny Ingress Gateway ny fomba handefasana ireo fangatahana avela ao anatin'ny cluster.

Ny fangatahana amin'ny fangatahanay avy amin'ny vavahady http dia tsy maintsy alefa any amin'ny serivisy sa-frontend, sa-web-app ary sa-feedback:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
Lalana mila amboarina amin'ny VirtualServices

Andeha hojerentsika ny fangatahana tokony halefa any amin'ny SA-Frontend:

  • Mifanaraka tsara eny an-dalana / tokony halefa any amin'ny SA-Frontend mba hahazoana index.html;
  • Lalana voatondro /static/* tsy maintsy alefa any amin'ny SA-Frontend mba handraisana rakitra static ampiasaina amin'ny frontend, toy ny CSS sy JavaScript;
  • Lalana mifanandrify amin'ny fomba fiteny mahazatra '^.*.(ico|png|jpg)$', dia tsy maintsy alefa any amin'ny SA-Frontend, satria Ireo no sary aseho amin'ny pejy.

Ny fampiharana dia tanterahana amin'ny alΓ lan'ny fanamafisana manaraka (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

Hevitra lehibe:

  1. Ity serivisy virtoaly ity dia manondro ny fangatahana tonga http-vavahady;
  2. Π’ destination Ny serivisy handefasana ny fangatahana dia voafaritra.

fanamarihana: Voatahiry ao anaty rakitra ny fandrindrana etsy ambony sa-virtualservice-external.yaml, izay misy ihany koa ny firafitry ny lalana ao amin'ny SA-WebApp sy SA-Feedback, saingy nohafohezina eto amin'ny lahatsoratra ho fohy.

Andao hampihatra VirtualService amin'ny fiantsoana:


fanamarihana: Rehefa mandany ny loharanon'i Istio isika, ny Kubernetes API Server dia mamorona hetsika izay raisin'ny Istio Control Plane, ary aorian'izay dia ampiharina amin'ny solon'ny Envoy tsirairay ny fandrindrana vaovao. Ary ny mpifehy Ingress Gateway dia toa iraka hafa natsangana tao amin'ny Plane Control. Izany rehetra izany dia toy izao ao amin'ny diagram:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
Fikirakirana Istio-IngressGateway ho an'ny fandefasana fangatahana

Ny fampiharana Fanadihadiana Sentiment dia azo alaina ao amin'ny http://{EXTERNAL-IP}/. Aza manahy raha mahazo sata tsy hita ianao: Indraindray dia mila fotoana elaela kokoa vao mihatra ny fanamafisam-peo ary ny cache Envoy dia manavao.

Alohan'ny hanohizana, milalao kely amin'ny fampiharana mba hiteraka fifamoivoizana. (Ilaina ny fisiany mba hanazavana ny hetsika manaraka - eo ho eo amin'ny transl.).

Kiali: azo jerena

Mba hahatongavana any amin'ny interface administrative Kiali dia araho ity baiko manaraka ity:


... ary misokatra http://localhost:20001/, miditra ho admin/admin. Eto ianao dia hahita endri-javatra mahasoa maro, ohatra, hanamarina ny fanamafisana ny singa Istio, alaivo sary an-tsaina ny serivisy mampiasa fampahalalana voaangona avy amin'ny fangatahan'ny tambajotra, mahazo valiny amin'ireo fanontaniana hoe "Iza no mifandray amin'iza?", "Iza no dikan'ny serivisy iainana. tsy fahombiazana?” sy ny sisa. Amin'ny ankapobeny, diniho ny fahaizan'i Kiali alohan'ny hirosoana amin'ny fijerena metrika miaraka amin'i Grafana.

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1

Grafana: metric visualization

Mandeha ao amin'ny Prometheus ireo metrika voaangona ao Istio ary aseho miaraka amin'i Grafana. Mba hahatongavana any amin'ny interface administratif Grafana dia araho ny baiko etsy ambany ary sokafy http://localhost:3000/:


Tsindrio eo amin'ny sakafo Home ambony ankavia sy mifidy Istio Service Dashboard eo amin'ny zoro ambony havia, manomboka amin'ny serivisy sa-web-appraha hijery ireo metrika voaangona:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1

Ny zavatra miandry antsika eto dia fampisehoana poakaty sy mankaleo tanteraka - tsy hankasitraka izany velively ny fitantanana. Andao hamorona entana kely miaraka amin'ity baiko manaraka ity:


Ankehitriny dia manana grafika tsara kokoa isika, ary ho fanampin'izy ireo, fitaovana Prometheus mahafinaritra ho an'ny fanaraha-maso sy Grafana ho an'ny fijerena metrika izay ahafahantsika mianatra momba ny fahombiazana, ny fahasalamana, ny fanatsarana / ny fahasimbana amin'ny serivisy rehefa mandeha ny fotoana.

Farany, andeha hojerentsika ny fangatahana fanaraha-maso amin'ny serivisy.

Jaeger: tracing

Mila fanaraha-maso isika satria arakaraka ny tolotra ananantsika no sarotra kokoa ny manatona ny anton'ny tsy fahombiazana. Andeha hojerentsika ny tranga tsotra avy amin'ny sary etsy ambany:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
Ohatra mahazatra amin'ny fangatahana tsy nahomby

Tonga ny fangatahana, mianjera - inona no antony? Fanompoana voalohany? Sa ilay faharoa? Misy maningana amin'izy roa - andao hojerentsika ny diarin'ny tsirairay. Impiry ianao no tratranao nanao izany? Ny asantsika dia mitovy amin'ny mpitsikilo lozisialy noho ny mpamorona...

Olana mahazatra amin'ny microservices io ary voavaha amin'ny alΓ lan'ny rafitra tracing mizara, izay ahafahan'ny serivisy mifampizara lohapejy tokana, ary avy eo dia alefa any amin'ny rafitra fanaraha-maso izany fampahalalana izany, izay ampitahaina amin'ny angona fangatahana. Ity misy fanoharana iray:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
TraceId dia ampiasaina hamantarana ny fangatahana

Istio dia mampiasa Jaeger Tracer, izay mametraka ny rafitra OpenTracing API tsy miankina amin'ny mpivarotra. Afaka miditra amin'ny mpampiasa Jaeger ianao miaraka amin'ity baiko manaraka ity:


Mandehana izao http://localhost:16686/ ary mifidiana serivisy sa-web-app. Raha tsy hita ao amin'ny menio midina ny serivisy dia asehoy/mamorona hetsika eo amin'ny pejy ary manavao ny interface. Aorian'izay, tsindrio ny bokotra Mitadiava Traces, izay hampiseho ny dian farany - safidio izay rehetra - hiseho ny fampahalalana amin'ny antsipiriany momba ny dian rehetra:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1

Ity soritra ity dia mampiseho:

  1. Tonga ny fangatahana istio-ingressgateway (Ity no fifaneraserana voalohany amin'ny iray amin'ireo tolotra, ary misy ID Trace novokarina ho an'ny fangatahana), ary avy eo ny vavahady dia mandefa ny fangatahana amin'ny serivisy sa-web-app.
  2. Amin'ny fanompoana sa-web-app Ny fangatahana dia noraisin'ny Envoy sidecar, "ankizy" no noforonina tao anatin'ny elanelam-potoana (izany no antony ahitantsika azy amin'ny dian) ary averina mankany amin'ny fitoeran-javatra. sa-web-app. (androm - singa lojika amin'ny asa ao Jaeger, izay manana anarana, fotoana fanombohana ny fandidiana ary ny faharetany. Ny spans dia azo alaina sy alaina. Ny kisarisary acyclic mivantana amin'ny elanelana dia mamorona dian. β€” eo ho eo. transl.)
  3. Eto ny fangatahana dia karakaraina amin'ny fomba sentimentAnalysis. Ireo soritra ireo dia efa novokarin'ny fampiharana, i.e. Nitaky fanovana code izy ireo.
  4. Manomboka izao dia misy fangatahana POST atomboka ao sa-lojika. Tsy maintsy ampitaina avy amin'ny ny kaomandin'ny trace sa-web-app.
  5. ...

fanamarihana: Amin'ny dingana 4, ny fampiharana dia tokony hahita ny lohatenin'ny Istio ary handefa azy ireo amin'ny fangatahana manaraka araka ny aseho amin'ny sary etsy ambany:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 1
(A) Istio no tompon'andraikitra amin'ny fandefasana lohateny; (B) Ny serivisy dia tompon'andraikitra amin'ny lohateny

Istio no manao ny ankamaroan'ny asa satria... mamorona lohapejy ho an'ny fangatahana ho avy, mamorona velarana vaovao amin'ny lafiny tsirairay ary mandefa azy ireo. Na izany aza, raha tsy miasa miaraka amin'ny lohapejy ao anatin'ny serivisy dia ho very ny lalan'ny trace fangatahana feno.

Ireto lohateny manaraka ireto dia tsy maintsy raisina:


Tsy asa sarotra izany, fa ny fanatsorana ny fampiharana azy dia efa misy tranomboky maro - ohatra, amin'ny serivisy sa-web-app, ny mpanjifa RestTemplate dia mandefa ireo lohapejy ireo raha ampidirinao fotsiny ny tranomboky Jaeger sy OpenTracing amin'ny ny fiankinan-dohany.

Mariho fa ny fampiharana ny Sentiment Analysis dia mampiseho fampiharana amin'ny Flask, Spring, ary ASP.NET Core.

Ankehitriny rehefa mazava tsara ny zavatra azonay avy ao anaty boaty (na saika tsy ho ao anaty boaty), andao hojerentsika ny zotra tsara, ny fitantanana ny fifamoivoizana amin'ny tambajotra, ny fiarovana, sns.

Fanamarihana. transl.: Vakio ny momba izany ao amin'ny tapany manaraka amin'ny fitaovana ao amin'ny Istio avy amin'i Rinor Maloku, izay ny fandikana azy dia hanaraka ao amin'ny bilaoginay ato ho ato. UPDATE (14 martsa): Fizarana faharoa efa navoaka.

PS avy amin'ny mpandika teny

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com