Balik sa microservices kauban si Istio. Bahin 1

Balik sa microservices kauban si Istio. Bahin 1

Nota. transl.: Ang mga service meshes siguradong nahimong mainit nga hilisgutan sa imprastraktura karon alang sa mga aplikasyon nga nagsunod sa arkitektura sa microservice. Samtang ang Istio mahimong naa sa radar sa daghang mga inhenyero sa DevOps, kini usa ka medyo bag-ong produkto nga, bisan kung komplikado sa mga termino sa mga bahin nga gihatag niini, mahimo’g magkinahanglan daghang oras aron mahibal-an. Ang German nga inhenyero nga si Rinor Maloku, nga nagdumala sa cloud computing alang sa dagkong mga kliyente sa kompanya sa telekomunikasyon nga Orange Networks, nagsulat og usa ka nindot nga serye sa mga materyales nga nagtugot kanimo sa dali ug lawom nga pag-dive sa Istio. Gisugdan niya ang iyang istorya kung unsa ang mahimo ni Istio ug kung giunsa nimo kini dali nga makita sa imong kaugalingon nga mga mata.

Istio - Open Source-proyekto, naugmad sa kolaborasyon sa mga team gikan sa Google, IBM ug Lyft. Gisulbad niini ang mga pagkakomplikado nga mitungha sa mga aplikasyon base sa mga microservice, pananglitan, sama sa:

  • pagdumala sa trapiko: mga timeout, pagsulay pag-usab, pagbalanse sa load;
  • Kasegurohan: end user authentication ug pagtugot;
  • obserbasyon: pagsubay, pagmonitor, pag-log.

Ang tanan niini mahimong masulbad sa lebel sa aplikasyon, bisan pa pagkahuman niana ang imong mga serbisyo dili na "micro". Ang tanan nga dugang nga paningkamot aron masulbad kini nga mga problema usa ka pag-usik sa mga kapanguhaan sa kompanya nga mahimong magamit direkta alang sa kantidad sa negosyo. Tagda ang usa ka pananglitan:

Project Manager: Unsa ka dugay ang pagdugang sa usa ka bahin sa feedback?
Developer: Duha ka sprint.

MP: Unsa?.. CRUD ra!
R: Ang pagbuhat sa CRUD mao ang sayon ​​nga bahin sa buluhaton, apan kinahanglan gihapon namo nga pamatud-an ug tugotan ang mga tiggamit ug mga serbisyo. Tungod kay ang network dili kasaligan, kinahanglan nimo nga ipatuman ang gibalikbalik nga mga hangyo, ingon man usab pattern sa circuit breaker sa mga kliyente. Usab, aron masiguro nga ang tibuuk nga sistema wala mag-crash, mga timeout ug mga bulto (Tan-awa sa ulahi sa artikulo alang sa dugang nga mga detalye sa duha nga gihisgutan nga mga sumbanan.), ug aron mahibal-an ang mga problema, pag-monitor, pagsubay, […]

MP: Oh, ato lang ibutang ni nga feature sa Product service unya.

Sa akong hunahuna ang ideya klaro: ang kantidad sa mga lakang ug paningkamot nga gikinahanglan aron makadugang usa ka serbisyo dako kaayo. Niini nga artikulo, atong tan-awon kung giunsa pagtangtang ni Istio ang tanan nga pagkakomplikado nga gihisgutan sa ibabaw (wala gipunting sa lohika sa negosyo) gikan sa mga serbisyo.

Balik sa microservices kauban si Istio. Bahin 1

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ang artikulo nagtuo nga ikaw adunay kahibalo sa pagtrabaho sa Kubernetes. Kung dili, girekomenda nako ang pagbasa akong introduction sa Kubernetes ug dayon ipadayon ang pagbasa niini nga materyal.

Istio nga ideya

Sa usa ka kalibutan nga walay Istio, ang usa ka serbisyo naghimo og direkta nga mga hangyo ngadto sa lain, ug sa kaso sa kapakyasan, ang serbisyo kinahanglan nga modumala niini sa iyang kaugalingon: paghimo og bag-ong pagsulay, paghatag og timeout, pag-abli sa usa ka circuit breaker, ug uban pa.

Balik sa microservices kauban si Istio. Bahin 1
Ang trapiko sa network sa Kubernetes

Ang Istio, sa laing bahin, nagtanyag usa ka espesyal nga solusyon nga hingpit nga bulag sa mga serbisyo ug gimbuhaton pinaagi sa pagpanghilabot sa interaksyon sa network. Ug sa ingon kini nagpatuman:

  • pagtugot sa sayop: base sa status code sa tubag, nakasabut kini kung napakyas ang hangyo ug isumite kini pag-usab.
  • Canary Rollouts: nag-redirect lang ug fixed nga porsyento sa mga hangyo ngadto sa bag-ong bersyon sa serbisyo.
  • Pag-monitor ug Sukatan: unsa kadugay ang pagtubag sa serbisyo?
  • Pagsubay ug pag-obserbar: Nagdugang ug espesyal nga mga ulohan sa matag hangyo ug gisubay kini sa tibuok cluster.
  • Kasegurohan: Nagkuha ug JWT token, nagpamatuod ug nag-awtorisar sa mga tiggamit.

Pipila lang kini sa mga posibilidad (pipila ra gyud!) aron ma-intriga ka. Karon atong susihon ang teknikal nga mga detalye!

Arkitektura

Gipugngan ni Istio ang tanan nga trapiko sa network ug gipadapat ang usa ka hugpong sa mga lagda niini, nga nagsal-ot sa usa ka maalamon nga proxy sa porma sa usa ka sulud sa sidecar sa matag pod. Ang mga proxy nga nagpalihok sa tanan nga mga posibilidad nagporma a data eroplano, ug sila mahimong dinamikong ipasibo sa Kontrola nga eroplano.

data eroplano

Ang mga proxy nga gisulod sa pods nagtugot kang Istio nga daling makab-ot ang mga kinahanglanon nga atong gikinahanglan. Pananglitan, atong susihon ang mga pagsulay pag-usab ug mga gimbuhaton sa circuit breaker.

Balik sa microservices kauban si Istio. Bahin 1
Giunsa ang pag-usab ug pagsira sa sirkito gipatuman sa Envoy

Sa pagtingub:

  1. sinugo (naghisgot kami bahin sa usa ka proxy nga nahimutang sa usa ka sudlanan sa sidecar, nga giapod-apod ug kung giunsa lahi nga produkto - gibanabana. transl.) nagpadala ug hangyo sa unang higayon sa serbisyo B ug napakyas.
  2. Gisulayan na usab ni Envoy Sidecar (sulayi pag-usab). (1)
  3. Ang napakyas nga hangyo ibalik sa proxy nga nagtawag niini.
  4. Kini moabli sa Circuit Breaker ug motawag sa sunod nga serbisyo alang sa sunod nga mga hangyo. (2)

Kini nagpasabot nga dili nimo kinahanglan nga gamiton ang sunod nga Retry library, dili nimo kinahanglan nga maghimo sa imong kaugalingon nga pagpatuman sa Circuit Breaking ug Service Discovery sa X, Y o Z programming language. Kining tanan ug uban pa anaa sa gawas sa kahon sa Istio ug wala magkinahanglan dili pagbag-o sa code.

Nindot! Karon tingali gusto nimo nga mobiyahe kauban si Istio, apan adunay mga pagduhaduha, bukas nga mga pangutana. Kung kini usa ka unibersal nga solusyon alang sa tanan nga mga okasyon sa kinabuhi, nan ikaw adunay usa ka lehitimong pagduda: pagkahuman, ang tanan nga ingon nga mga solusyon sa tinuud dili angay alang sa bisan unsang kaso.

Ug sa katapusan mangutana ka: "Napasibo ba kini?"

Karon andam ka na alang sa usa ka paglawig sa dagat - ug pamilyar kita sa Control Plane.

Kontrola nga eroplano

Kini naglangkob sa tulo ka mga sangkap: Pilot, mixer ΠΈ palacio, nga dungan nga nag-configure sa mga Envoy aron sa pagruta sa trapiko, paggamit sa mga palisiya, ug pagkolekta sa datos sa telemetry. Sa eskematiko, kining tanan ingon niini:

Balik sa microservices kauban si Istio. Bahin 1
Interaksyon sa Control Plane sa Data Plane

Ang mga envoy (ie data plane) gi-configure sa Kubernetes CRD (Custom Resource Definition) nga gihubit ni Istio ug espesipikong gidisenyo alang niini nga katuyoan. Unsa ang gipasabut niini kanimo mao nga sila usa ra ka kapanguhaan sa Kubernetes nga adunay pamilyar nga syntax. Kung nahimo na, kini nga kapanguhaan kuhaon sa control plane ug magamit sa mga Envoy.

Relasyon sa mga serbisyo ngadto sa Istio

Among gihulagway ang relasyon ni Istio sa mga serbisyo, apan dili sa laing paagi: unsa may kalabotan sa mga serbisyo sa Istio?

Sa tinuud, ang mga serbisyo nahibal-an bahin sa presensya sa Istio ingon man ang mga isda nahibal-an bahin sa tubig, kung gipangutana nila ang ilang kaugalingon: "Unsa man ang tubig?".

Balik sa microservices kauban si Istio. Bahin 1
Ilustrasyon Victoria Dimitrakopoulos: Unsa imong gusto sa tubig? - Unsa man ang tubig?

Sa ingon, mahimo nimong makuha ang usa ka kumpol nga nagtrabaho ug pagkahuman sa pag-deploy sa mga sangkap sa Istio, ang mga serbisyo niini magpadayon sa pagtrabaho, ug pagkahuman makuha kini nga mga sangkap, ang tanan mamaayo pag-usab. Klaro nga sa kini nga kaso mawad-an ka sa mga oportunidad nga gihatag ni Istio.

Igo na nga teorya - atong ibutang kini nga kahibalo sa praktis!

Istio sa praktis

Ang Istio nanginahanglan usa ka Kubernetes cluster nga adunay labing menos 4 vCPUs ug 8 GB sa RAM nga magamit. Aron dali nga mapataas ang cluster ug sundon ang mga panudlo gikan sa artikulo, girekomenda nako ang paggamit sa Google Cloud Platform, nga nagtanyag mga bag-ong tiggamit libre nga $300.

Human sa paghimo sa cluster ug pag-set up sa access sa Kubernetes pinaagi sa console utility, mahimo nimong i-install ang Istio pinaagi sa Helm package manager.

Pag-instalar sa Helm

I-install ang kliyente sa Helm sa imong kompyuter sama sa gihulagway sa opisyal nga dokumentasyon. Among gamiton kini aron makamugna og mga templates alang sa pag-instalar sa Istio sa sunod nga seksyon.

Pag-instalar

Pag-download sa mga kapanguhaan sa Istio gikan sa pinakabag-o nga pagpagawas (ang link sa orihinal nga tagsulat sa bersyon 1.0.5 giusab ngadto sa kasamtangan, i.e. 1.0.6 - gibanabana nga transl.), kuhaa ang mga sulod sa usa ka direktoryo, nga akong ipasabut nga [istio-resources].

Alang sa dali nga pag-ila sa mga kapanguhaan sa Istio, paghimo og namespace sa K8s cluster istio-system:

$ kubectl create namespace istio-system

Kompletoha ang pag-instalar pinaagi sa pag-navigate sa direktoryo [istio-resources] ug pagpadagan sa sugo:

$ 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

Kini nga sugo magpagawas sa mga importanteng sangkap sa Istio ngadto sa usa ka file istio.yaml. Gibag-o namo ang standard template para sa among kaugalingon pinaagi sa pagtino sa mosunod nga mga parameter:

  • global.mtls.enabled gibutang sa false (i.e. ang mTLS authentication gi-disable - gibanabana nga transl.)sa pagpayano sa atong proseso sa pagpakigdeyt;
  • tracing.enabled makapahimo sa pagsubay sa hangyo uban sa Jaeger;
  • kiali.enabled i-install ang Kiali sa usa ka cluster aron mahanduraw ang mga serbisyo ug trapiko;
  • grafana.enabled nag-install sa Grafana aron mahanduraw ang mga nakolekta nga sukatan.

Ibutang ang namugna nga mga kapanguhaan uban ang sugo:

$ kubectl apply -f istio.yaml

Ang pag-instalar sa Istio sa cluster kompleto na! Paghulat hangtod ang tanan nga mga pod sa namespace istio-system makahimo Running o Completedpinaagi sa pagpadagan sa sugo sa ubos:

$ kubectl get pods -n istio-system

Andam na kami sa pagpadayon sa sunod nga seksyon, diin among ipataas ug ipadagan ang aplikasyon.

Arkitektura sa Aplikasyon sa Pag-analisa sa Sentimento

Atong gamiton ang pananglitan sa Sentiment Analysis microservice nga aplikasyon nga gigamit sa nahisgutan na Pasiuna nga artikulo sa Kubernetes. Kini igo nga komplikado aron ipakita ang mga posibilidad sa Istio sa praktis.

Ang aplikasyon naglangkob sa upat ka microservices:

  1. nga pag-alagad SA-Frontend, nga nagsilbi sa front-end nga aplikasyon sa Reactjs;
  2. nga pag-alagad SA WebApp, nga nag-alagad sa mga pangutana sa Pag-analisa sa Sentiment;
  3. nga pag-alagad SA Logicnga nagabuhat sa iyang kaugalingon pagtuki sa sentimento;
  4. nga pag-alagad SA Feedback, nga nakadawat og feedback gikan sa mga tiggamit sa katukma sa pagtuki nga gihimo.

Balik sa microservices kauban si Istio. Bahin 1

Niini nga diagram, dugang sa mga serbisyo, makita usab namo ang Ingress Controller, nga sa Kubernetes nag-ruta sa umaabot nga mga hangyo ngadto sa katugbang nga mga serbisyo. Gigamit ni Istio ang susamang konsepto isip bahin sa Ingress Gateway, ang mga detalye niini mosunod.

Paglansad sa usa ka aplikasyon nga adunay proxy gikan sa Istio

Alang sa dugang nga mga operasyon nga gihisgutan sa artikulo, i-clone ang imong repository istio-mastery. Naglangkob kini sa aplikasyon ug mga pagpakita alang sa Kubernetes ug Istio.

Pagsulod sa mga sidecar

Mahimo ang pagsal-ot awtomatiko o pinaagi sa kamot. Aron awtomatikong isulod ang mga sudlanan sa sidecar, kinahanglan nimo nga ibutang ang label sa namespace istio-injection=enabled, nga gihimo pinaagi sa mosunod nga sugo:

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

Karon ang matag pod nga i-deploy sa default namespace (default) makakuha sa iyang sidecar nga sudlanan. Aron mapamatud-an kini, magbutang kita usa ka aplikasyon sa pagsulay pinaagi sa pag-adto sa direktoryo sa ugat sa repository [istio-mastery] ug pagpadagan sa mosunod nga sugo:

$ 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

Sa pag-deploy sa mga serbisyo, susiha nga ang mga pod adunay duha ka sudlanan matag usa (uban ang serbisyo mismo ug ang sidecar niini) pinaagi sa pagpadagan sa command kubectl get pods ug pagsiguro nga ubos sa kolum READY bili nga gitakda 2/2, nagsimbolo nga ang duha ka sudlanan nagdagan:

$ 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

Biswal kini tan-awon sama niini:

Balik sa microservices kauban si Istio. Bahin 1
Envoy proxy sa usa sa mga pod

Karon nga ang aplikasyon nagdagan ug nagdagan, kinahanglan naton tugutan ang umaabot nga trapiko nga mosulod sa aplikasyon.

Ingress Gateway

Ang labing kaayo nga praktis aron makab-ot kini (tugoti ang trapiko sa cluster) mao ang pinaagi Ingress Gateway sa Istio, nga nahimutang sa "gilid" sa cluster ug nagtugot kanimo sa pagpagana sa mga feature sa Istio sama sa routing, load balancing, seguridad, ug pagmonitor sa umaabot nga trapiko.

Ang sangkap sa Ingress Gateway ug ang serbisyo nga nagpasa niini sa gawas na-install sa cluster sa panahon sa pag-instalar sa Istio. Aron mahibal-an ang eksternal nga IP address sa usa ka serbisyo, pagdagan:

$ 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

Magpadayon kami sa pag-access sa aplikasyon gamit kini nga IP (gitawag ko kini nga EXTERNAL-IP), busa alang sa kasayon, among isulat ang kantidad sa usa ka variable:

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

Kung sulayan nimo nga ma-access kini nga IP pinaagi sa usa ka browser karon, makakuha ka usa ka sayup nga Serbisyo nga Dili Magamit, tungod kay pinaagi sa default gibabagan ni Istio ang tanan nga umaabot nga trapikohangtod ang Gateway gihubit.

Kapanguhaan sa gateway

Ang Gateway usa ka CRD (Custom Resource Definition) sa Kubernetes, nga gihubit human ma-install ang Istio sa usa ka cluster ug makapahimo sa abilidad sa pagtino sa mga pantalan, protocol, ug mga host diin gusto namong tugutan ang umaabot nga trapiko.

Sa among kaso, gusto namong tugutan ang trapiko sa HTTP sa port 80 para sa tanang mga host. Ang problema naamgohan pinaagi sa mosunod nga kahulugan (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:
- "*"

Kini nga configuration wala magkinahanglan og katin-awan gawas sa tigpili istio: ingressgateway. Uban niini nga tigpili, atong matino kung asa nga Ingress Gateway i-apply ang configuration. Sa among kaso, kini ang Ingress Gateway controller, nga gi-install nga default sa Istio.

Ang pagsumpo gipadapat pinaagi sa pagtawag sa mosunod nga sugo:

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

Gitugotan na karon sa ganghaan ang pag-access sa port 80 apan wala’y ideya kung asa i-ruta ang mga hangyo. Alang niini kinahanglan nimo Mga Serbisyo nga Virtual.

Resource sa Virtual nga Serbisyo

Gisultihan sa VirtualService ang Ingress Gateway kung giunsa ang ruta sa mga hangyo nga gitugotan sa sulod sa cluster.

Ang mga hangyo sa among aplikasyon nga moabut pinaagi sa http-gateway kinahanglang ipadala sa sa-frontend, sa-web-app ug sa-feedback nga mga serbisyo:

Balik sa microservices kauban si Istio. Bahin 1
Mga ruta nga i-configure gamit ang VirtualServices

Hunahunaa ang mga hangyo nga kinahanglan ipadala sa SA-Frontend:

  • Eksaktong tugma sa dalan / kinahanglan ipadala sa SA-Frontend aron makuha ang index.html;
  • Mga dalan nga adunay prefix /static/* kinahanglan ipadala sa SA-Frontend aron makakuha og static nga mga file nga gigamit sa frontend, sama sa CSS ug JavaScript;
  • Mga dalan nga katumbas sa regular nga ekspresyon '^.*.(ico|png|jpg)$', kinahanglan ipadala sa SA-Frontend, tungod kay Kini ang mga litrato nga gipakita sa panid.

Ang pagpatuman makab-ot pinaagi sa mosunod nga configuration (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

Hinungdanong mga punto:

  1. Kini nga VirtualService nagtumong sa mga hangyo nga moabut http-ganghaan;
  2. Π’ destination naghubit sa serbisyo diin ang mga hangyo gipadala.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ang configuration sa ibabaw gitipigan sa usa ka file sa-virtualservice-external.yaml, nga adunay usab mga setting alang sa pagruta sa SA-WebApp ug SA-Feedback, apan gipamub-an dinhi sa artikulo alang sa kadali.

Pag-apply sa VirtualService pinaagi sa pagtawag:


ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Kung atong gamiton ang mga kapanguhaan sa Istio, ang Kubernetes API Server mopabuto sa usa ka panghitabo nga madawat sa Istio Control Plane, ug human niana, ang bag-ong configuration i-apply sa matag pod nga Envoy proxies. Ug ang Ingress Gateway controller makita nga lain nga Envoy nga gi-configure sa Control Plane. Tanan kini ingon niini sa diagram:

Balik sa microservices kauban si Istio. Bahin 1
Istio-IngressGateway configuration alang sa hangyo routing

Anaa na karon ang Pagtuki sa Sentiment sa http://{EXTERNAL-IP}/. Ayaw kabalaka kung makuha nimo ang status nga Not Found: usahay mas dugay pa para mu-epekto ang configuration ug ma-update ang Envoy caches.

Sa dili pa magpadayon, pagdula uban ang aplikasyon sa gamay aron makamugna og trapiko. (ang presensya niini gikinahanglan alang sa katin-aw sa sunod nga mga aksyon - gibanabana nga transl.).

Kiali: obserbasyon

Aron makaadto sa Kiali admin interface, padagana ang mosunod nga sugo:


...ug abli http://localhost:20001/pinaagi sa pag-log in isip admin/admin. Dinhi makit-an nimo ang daghang mapuslanon nga mga bahin, pananglitan, aron masusi ang pagsumpo sa mga sangkap sa Istio, mahanduraw ang mga serbisyo gikan sa kasayuran nga nakolekta pinaagi sa pag-intercept sa mga hangyo sa network, pagkuha mga tubag sa mga pangutana nga "Kinsa ang nagkontak kang kinsa?", "Unsa nga bersyon sa serbisyo ang nasinati. mga kapakyasan?” ug uban pa. Sa kinatibuk-an, susiha ang mga posibilidad sa Kiali sa dili pa magpadayon sa paghanduraw sa mga sukatan gamit ang Grafana.

Balik sa microservices kauban si Istio. Bahin 1

Grafana: visualization sa metrics

Ang mga sukatan nga nakolekta sa Istio matapos sa Prometheus ug makita sa Grafana. Aron makaadto sa Grafana admin interface, padagana ang command sa ubos, dayon ablihi http://localhost:3000/:


Pinaagi sa pag-klik sa menu Home ibabaw sa wala ug pilia Istio Service Dashboard sa ibabaw nga wala nga suok, magsugod sa serbisyo sa-web-apppara tan-awon ang mga nakolekta nga metrics:

Balik sa microservices kauban si Istio. Bahin 1

Dinhi kami naghulat alang sa usa ka walay sulod ug hingpit nga makalaay nga pasundayag - ang pagdumala dili gayud mouyon niini. Maghimo kita og gamay nga load gamit ang mosunod nga sugo:


Karon kami adunay daghang labi ka matahum nga mga graph, ug dugang sa kanila, ang mga katingad-an nga himan nga Prometheus alang sa pag-monitor ug Grafana alang sa paghanduraw sa mga sukatan, nga magtugot kanamo nga mahibal-an ang bahin sa pasundayag, kahimtang sa kahimsog, pag-uswag / pagkadaot sa mga serbisyo sa paglabay sa panahon.

Sa katapusan, atong tan-awon ang pagsubay sa hangyo sa mga serbisyo.

Jaeger: pagsubay

Kinahanglan namon ang pagsubay, tungod kay ang daghang mga serbisyo nga among naa, labi ka lisud nga makuha ang hinungdan sa kapakyasan. Atong tan-awon ang usa ka yano nga kaso gikan sa litrato sa ubos:

Balik sa microservices kauban si Istio. Bahin 1
Kasagaran nga pananglitan sa usa ka random nga napakyas nga hangyo

Ang hangyo moabut, nahulog - unsa ang rason? Unang serbisyo? O ikaduha? Adunay mga eksepsiyon sa duha - atong tan-awon ang mga troso sa matag usa. Kapila nimo nasakpan ang imong kaugalingon nga nagbuhat niini? Ang among trabaho sama sa mga software detective kaysa mga developer…

Kini usa ka kaylap nga problema sa mga microservice ug nasulbad pinaagi sa gipang-apod-apod nga mga sistema sa pagsubay, diin ang mga serbisyo nagpasa sa usa ka talagsaon nga header sa usag usa, pagkahuman kini nga kasayuran gi-redirect sa sistema sa pagsubay, diin kini gitandi sa datos sa hangyo. Ania ang usa ka ilustrasyon:

Balik sa microservices kauban si Istio. Bahin 1
Ang TraceId gigamit sa pag-ila sa hangyo

Gigamit ni Istio ang Jaeger Tracer, nga nagpatuman sa usa ka balangkas sa OpenTracing API nga independente sa vendor. Mahimo nimong ma-access ang user interface sa Jaeger gamit ang mosunod nga sugo:


Karon adto sa http://localhost:16686/ ug pagpili og serbisyo sa-web-app. Kung ang serbisyo wala gipakita sa dropdown menu, ipakita/himoa ang kalihokan sa panid ug i-update ang interface. Pagkahuman i-klik ang buton Pangitag mga timailhan, nga magpakita sa pinakabag-o nga mga pagsubay - pilia ang bisan unsa - ang detalyado nga impormasyon sa tanang mga pagsubay makita:

Balik sa microservices kauban si Istio. Bahin 1

Kini nga pagsubay nagpakita:

  1. Misulod ang hangyo istio-ingressgateway (kini ang una nga interaksyon sa usa sa mga serbisyo, ug usa ka Trace ID ang gihimo alang sa hangyo), pagkahuman ipadala sa gateway ang hangyo sa serbisyo sa-web-app.
  2. Sa serbisyo sa-web-app ang hangyo gikuha sa Envoy sidecar, usa ka "bata" ang gihimo sa span (mao nga nakita namon kini sa mga pagsubay) ug gi-redirect sa sudlanan sa-web-app. (gitas-on sa - usa ka lohikal nga yunit sa trabaho sa Jaeger, adunay usa ka ngalan, ang oras sa pagsugod sa operasyon ug ang gidugayon niini. Ang mga spans mahimong magsalag ug mag-order. Ang gitumong nga acyclic graph sa mga span nagporma og usa ka pagsubay. - gibanabana. transl.)
  3. Dinhi ang hangyo giproseso pinaagi sa pamaagi sentimentAnalysis. Kini nga mga pagsubay nahimo na sa aplikasyon, i.e. nanginahanglan sila mga pagbag-o sa code.
  4. Gikan niining higayona, usa ka hangyo sa POST ang gisugdan sa sa-logic. Kinahanglang ipadala ang Trace ID gikan sa sa-web-app.
  5. ...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Sa lakang 4, ang aplikasyon kinahanglan nga makakita sa mga ulohan nga gihimo ni Istio ug ipasa kini sa sunod nga mga hangyo, ingon sa gipakita sa imahe sa ubos:

Balik sa microservices kauban si Istio. Bahin 1
(A) Ang pagpasa sa ulohan mao ang responsibilidad ni Istio; (B) Ang mga serbisyo maoy responsable sa mga ulohan

Istio ang kadaghanan sa trabaho tungod kay nagmugna og mga ulohan alang sa umaabot nga mga hangyo, nagmugna og bag-ong mga span sa matag sidecare ug gipasa kini. Bisan pa, kung wala’y pagtrabaho kauban ang mga ulohan sa sulod sa mga serbisyo, ang tibuuk nga agianan sa pagsubay sa hangyo mawala.

Ang mosunod nga mga ulohan kinahanglang tagdon (ipasa):


Kini usa ka yano nga buluhaton, apan aron mapayano ang pagpatuman niini, naa na daghang librarya - pananglitan, sa serbisyo sa sa-web-app, ang kliyente sa RestTemplate nagpasa niini nga mga ulohan kung imong idugang ang mga librarya sa Jaeger ug OpenTracing sa mga dependency niini.

Timan-i nga ang aplikasyon sa Sentiment Analysis nagpakita sa mga pagpatuman sa Flask, Spring, ug ASP.NET Core.

Karon nga klaro na kung unsa ang atong makuha gikan sa kahon (o hapit wala sa kahon), atong tan-awon ang maayo nga pag-ruta, pagdumala sa trapiko sa network, seguridad, ug uban pa!

Nota. transl.: basaha ang bahin niini sa sunod nga bahin sa mga materyal sa Istio ni Rinor Maloku, ang mga paghubad niini mosunod sa among blog sa umaabot nga panahon. UPDATE (Marso 14th): Ikaduhang bahin namantala na.

PS gikan sa tighubad

Basaha usab sa among blog:

Source: www.habr.com