Rov qab mus rau microservices nrog Istio. Ntu 1

Rov qab mus rau microservices nrog Istio. Ntu 1

Nco tseg. txhais.: Cov kev pabcuam meshes tau dhau los ua lub ntsiab lus kub hauv cov txheej txheem niaj hnub no rau kev siv tom qab microservice architecture. Thaum Istio tuaj yeem nyob ntawm radar ntawm ntau DevOps engineers, nws yog ib yam khoom tshiab uas, thaum nyuaj ntawm cov yam ntxwv nws muab, tuaj yeem siv sijhawm ntau los paub. Tus kws tshaj lij German Rinor Maloku, uas yog tus saib xyuas huab cua rau cov neeg siv khoom loj ntawm lub tuam txhab kev sib txuas lus Orange Networks, tau sau cov ntaub ntawv zoo heev uas tso cai rau koj mus rau Istio sai thiab tob tob. Nws pib nws zaj dab neeg nrog Istio tuaj yeem ua li cas thiab koj tuaj yeem pom sai sai ntawm koj lub qhov muag.

Istio - Qhib Source-project, tsim los ntawm kev koom tes nrog pab pawg los ntawm Google, IBM thiab Lyft. Nws daws qhov nyuaj uas tshwm sim hauv daim ntawv thov raws li microservices, piv txwv li, xws li:

  • tswj kev khiav tsheb: timeouts, retry, load balancing;
  • Kev ruaj ntseg: end user authentication thiab tso cai;
  • kev soj ntsuam: tracing, saib xyuas, kaw.

Tag nrho cov ntawm lawv tuaj yeem daws tau ntawm daim ntawv thov, tab sis tom qab ntawd koj cov kev pabcuam yuav tsis yog "micro". Txhua qhov kev siv zog ntxiv los daws cov teeb meem no yog pov tseg ntawm tuam txhab peev txheej uas tuaj yeem siv ncaj qha rau kev lag luam tus nqi. Xav txog ib qho piv txwv:

Tus Thawj Saib Xyuas Haujlwm: Nws siv sijhawm ntev npaum li cas txhawm rau ntxiv cov lus tawm tswv yim?
Tus tsim tawm: Ob sprints.

MP: Dab tsi?.. Nws yog CRUD xwb!
R: Ua CRUD yog qhov yooj yim ntawm txoj haujlwm, tab sis peb tseem yuav tsum tau lees paub thiab tso cai rau cov neeg siv thiab cov kev pabcuam. Txij li thaum lub network tsis muaj kev ntseeg siab, koj yuav tsum tau ua raws li kev thov rov ua dua, nrog rau Circuit Court breaker qauv hauv cov neeg siv khoom. Tsis tas li ntawd, kom paub tseeb tias tag nrho cov system tsis tsoo, timeouts thiab tej taub hau (Saib tom qab hauv tsab xov xwm kom paub meej ntxiv ntawm ob tus qauv hais.), thiab txhawm rau txheeb xyuas cov teeb meem, saib xyuas, taug qab, […]

MP: Huag, cia li muab cov yeeb yam no tso rau hauv Cov Khoom Pabcuam tom qab ntawd.

Kuv xav tias lub tswv yim yog qhov tseeb: tus nqi ntawm cov kauj ruam thiab kev siv zog yuav tsum tau ntxiv rau ib qho kev pabcuam loj heev. Hauv tsab xov xwm no, peb yuav saib yuav ua li cas Istio tshem tawm tag nrho cov kev nyuaj uas tau hais los saum toj no (tsis yog tsom los ntawm kev lag luam logic) los ntawm cov kev pabcuam.

Rov qab mus rau microservices nrog Istio. Ntu 1

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Kab lus xav tias koj muaj kev paub ua haujlwm ntawm Kubernetes. Txwv tsis pub, kuv xav kom nyeem Kuv qhov kev taw qhia rau Kubernetes thiab tsuas yog tom qab ntawd txuas ntxiv nyeem cov ntaub ntawv no.

Qhov kev xav

Hauv lub ntiaj teb uas tsis muaj Istio, ib qho kev pabcuam ua rau kev thov ncaj qha rau lwm tus, thiab yog tias tsis ua haujlwm, cov kev pabcuam yuav tsum tau ua nws tus kheej: ua ib qho kev sim tshiab, muab sijhawm rau lub sijhawm, qhib Circuit Court breaker, thiab lwm yam.

Rov qab mus rau microservices nrog Istio. Ntu 1
Network tsheb khiav hauv Kubernetes

Istio, ntawm qhov tod tes, muab cov kev daws teeb meem tshwj xeeb uas cais tawm ntawm cov kev pabcuam thiab kev ua haujlwm los ntawm kev cuam tshuam nrog kev sib tham hauv network. Thiab yog li nws siv:

  • txhaum cai: raws li txoj cai raws li txoj cai hauv cov lus teb, nws nkag siab yog tias qhov kev thov ua tsis tiav thiab rov xa nws dua.
  • Canary Rollouts: redirects tsuas yog ib feem pua ​​​​taag ntawm kev thov mus rau qhov kev pabcuam tshiab.
  • Saib xyuas thiab Metrics: Nws siv sijhawm ntev npaum li cas rau qhov kev pabcuam teb?
  • Tracing thiab observability: Ntxiv cov headers tshwj xeeb rau txhua qhov kev thov thiab taug qab lawv hla cov pawg.
  • Kev ruaj ntseg: Retrieves JWT token, authenticates thiab tso cai rau cov neeg siv.

Cov no tsuas yog qee qhov ua tau (tsuas yog ob peb yam!) kom txaus siab rau koj. Tam sim no cia peb dhia mus rau hauv cov ntsiab lus technical!

Kev tsim vaj tsev

Istio cuam tshuam tag nrho cov tsheb khiav hauv lub network thiab siv cov txheej txheem rau nws, ntxig lub npe ntse hauv daim ntawv ntawm lub thawv sab hauv rau hauv txhua lub pod. Proxies uas qhib txhua qhov muaj peev xwm tsim tau a Lub dav hlau Data, thiab lawv tuaj yeem hloov kho dynamically nrog Tswj lub dav hlau.

Lub dav hlau Data

Cov proxies tso rau hauv cov pods ua rau nws yooj yim rau Istio kom tau raws li peb xav tau. Piv txwv li, cia peb tshawb xyuas qhov kev rov ua dua thiab kev ua haujlwm ntawm Circuit Court breaker.

Rov qab mus rau microservices nrog Istio. Ntu 1
Yuav ua li cas retry thiab Circuit Court breaking yog siv nyob rau hauv Envoy

Mus saib lub ntsab lug:

  1. Envoy (peb tab tom tham txog ib lub npe nyob rau hauv lub thawv sidecar, uas yog muab faib thiab yuav ua li cas cais cov khoom - kwv yees. txhais.) xa ib daim ntawv thov mus rau thawj qhov kev pabcuam B thiab ua tsis tiav.
  2. Envoy Sidecar tab tom sim dua (rov sim dua). (1)
  3. Qhov kev thov ua tsis tiav raug xa rov qab mus rau lub npe hu ua nws.
  4. Qhov no qhib Circuit Breaker thiab hu rau cov kev pabcuam tom ntej rau kev thov tom ntej. (2)

Qhov no txhais tau hais tias koj tsis tas yuav siv lub tsev qiv ntawv Retry tom ntej, koj tsis tas yuav ua koj tus kheej siv Circuit Breaking thiab Service Discovery hauv X, Y lossis Z programming lus. lub thawv hauv Istio thiab tsis xav tau tsis muaj code hloov.

Zoo heev! Tam sim no koj tuaj yeem xav mus ncig nrog Istio, tab sis tseem muaj qee qhov tsis ntseeg, qhib cov lus nug. Yog tias qhov no yog kev daws teeb meem thoob ntiaj teb rau txhua lub sijhawm hauv lub neej, tom qab ntawd koj muaj kev xav tsis thoob: tom qab tag nrho, tag nrho cov kev daws teeb meem no yog qhov tseeb tsis haum rau txhua qhov xwm txheej.

Thiab thaum kawg koj nug: "Puas yog customizable?"

Tam sim no koj npaj txhij rau kev caij nkoj hauv hiav txwv - thiab cia peb paub txog Kev Tswj Dav Hlau.

Tswj lub dav hlau

Nws muaj peb yam: tsav, Tov khoom ΠΈ Citadel, uas ua ke teeb tsa Envoys rau txoj kev khiav tsheb, siv cov cai, thiab sau cov ntaub ntawv telemetry. Schematically, txhua yam zoo li no:

Rov qab mus rau microservices nrog Istio. Ntu 1
Kev sib cuam tshuam ntawm Kev Tswj Dav Hlau nrog Cov Ntaub Ntawv Dav Hlau

Envoys (piv txwv li cov ntaub ntawv dav hlau) tau teeb tsa nrog Kubernetes CRD (Cov Kev Pabcuam Kev Cai) txhais los ntawm Istio thiab tsim tshwj xeeb rau lub hom phiaj no. Qhov no txhais tau li cas rau koj yog tias lawv tsuas yog lwm cov peev txheej hauv Kubernetes nrog cov lus qhia paub. Thaum tsim, cov peev txheej no yuav raug khaws los ntawm lub dav hlau tswj thiab siv rau Envoys.

Kev sib raug zoo ntawm kev pabcuam rau Istio

Peb tau piav qhia txog Istio txoj kev sib raug zoo rau cov kev pabcuam, tab sis tsis yog lwm txoj hauv kev: cov kev pabcuam cuam tshuam li cas rau Istio?

Yuav kom ncaj ncees, cov kev pabcuam paub txog qhov muaj Istio thiab cov ntses paub txog dej, thaum lawv nug lawv tus kheej: "Dab tsi yog dej?".

Rov qab mus rau microservices nrog Istio. Ntu 1
Piv txwv Victoria Dimitrakopoulos: Koj nyiam dej li cas? - Dab tsi yog dej?

Yog li, koj tuaj yeem nqa ib pawg ua haujlwm thiab tom qab siv Istio Cheebtsam, cov kev pabcuam hauv nws yuav ua haujlwm ntxiv, thiab tom qab tshem cov khoom no, txhua yam yuav zoo dua. Nws yog tseeb hais tias nyob rau hauv cov ntaub ntawv no koj yuav poob lub cib fim muab los ntawm Istio.

Txoj kev xav txaus - cia peb muab qhov kev paub no rau hauv kev xyaum!

Istio hauv kev xyaum

Istio xav kom Kubernetes pawg nrog tsawg kawg 4 vCPUs thiab 8 GB ntawm RAM muaj. Txhawm rau kom ceev cov pawg thiab ua raws li cov lus qhia los ntawm tsab xov xwm, Kuv pom zoo kom siv Google Cloud Platform, uas muaj cov neeg siv tshiab pub dawb $300.

Tom qab tsim cov pawg thiab teeb tsa kev nkag mus rau Kubernetes los ntawm kev siv hluav taws xob console, koj tuaj yeem nruab Istio los ntawm tus thawj tswj hwm pob Helm.

Helm Installation

Nruab tus neeg siv Helm ntawm koj lub computer raws li tau piav qhia hauv cov ntaub ntawv raug cai. Peb yuav siv nws los tsim cov qauv rau kev txhim kho Istio hauv ntu tom ntej.

Kev teeb tsa

Download Istio cov peev txheej los ntawm tso tawm tshiab (tus thawj tus kws sau ntawv txuas mus rau version 1.0.5 tau hloov mus rau qhov tam sim no, piv txwv li 1.0.6 - kwv yees transl.), rho tawm cov ntsiab lus rau ib daim ntawv teev npe, uas kuv yuav xa mus rau [istio-resources].

Txhawm rau txheeb xyuas yooj yim ntawm Istio cov peev txheej, tsim lub npe chaw hauv K8s pawg istio-system:

$ kubectl create namespace istio-system

Ua kom tiav qhov kev teeb tsa los ntawm kev mus rau hauv phau ntawv teev npe [istio-resources] thiab khiav cov lus txib:

$ 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

Cov lus txib no yuav tso tawm cov khoom tseem ceeb ntawm Istio mus rau ib cov ntaub ntawv istio.yaml. Peb tau hloov kho tus qauv qauv rau peb tus kheej los ntawm kev qhia txog cov hauv qab no:

  • global.mtls.enabled ntsia hauv false (i.e. mTLS authentication yog neeg xiam - kwv yees li.)kom yooj yim rau peb txoj kev sib tham;
  • tracing.enabled enables thov tracing nrog Jaeger;
  • kiali.enabled nruab Kiali rau hauv ib pawg kom pom cov kev pabcuam thiab kev khiav tsheb;
  • grafana.enabled nruab Grafana kom pom cov metrics sau.

Siv cov peev txheej generated nrog cov lus txib:

$ kubectl apply -f istio.yaml

Kev teeb tsa Istio hauv pawg ua tiav! Tos kom txog thaum tag nrho cov pods nyob rau hauv lub namespace istio-system yuav muaj peev xwm Running los yog Completedlos ntawm kev khiav cov lus txib hauv qab no:

$ kubectl get pods -n istio-system

Tam sim no peb npaj mus txuas ntxiv mus rau ntu tom ntej, qhov twg peb yuav tsa thiab khiav daim ntawv thov.

Sentiment Analysis Application Architecture

Cia peb siv tus piv txwv ntawm Sentiment Analysis microservice daim ntawv thov siv nyob rau hauv uas twb tau hais lawm Kab lus taw qhia rau Kubernetes. Nws yog qhov nyuaj txaus los qhia qhov ua tau ntawm Istio hauv kev xyaum.

Daim ntawv thov muaj plaub microservices:

  1. kev pab cuam SA-Front, uas ua haujlwm rau pem hauv ntej-kawg daim ntawv thov ntawm Reactjs;
  2. kev pab cuam SA Web App, uas ua haujlwm rau Sentiment Analysis queries;
  3. kev pab cuam SA Logicuas ua nws tus kheej kev xav tsom xam;
  4. kev pab cuam SA Cov Lus Qhia, uas tau txais kev tawm tswv yim los ntawm cov neeg siv ntawm qhov tseeb ntawm qhov kev tshuaj ntsuam tau ua.

Rov qab mus rau microservices nrog Istio. Ntu 1

Hauv daim duab no, ntxiv rau cov kev pabcuam, peb kuj pom Ingress Controller, uas nyob rau hauv Kubernetes cov kev thov nkag mus rau cov kev pabcuam sib raug. Istio siv lub tswv yim zoo ib yam li ib feem ntawm Ingress Gateway, cov ntsiab lus ntawm qhov yuav ua raws.

Tua tawm daim ntawv thov nrog lub npe los ntawm Istio

Rau kev ua haujlwm ntxiv uas tau hais hauv tsab xov xwm, clone koj lub chaw cia khoom kev txawj ntse. Nws muaj cov ntawv thov thiab tshwm sim rau Kubernetes thiab Istio.

Ntxig sidecars

Insertion tuaj yeem ua tau cia li tau los yog manually. Txhawm rau muab tso rau sab hauv lub thawv, koj yuav tsum teeb tsa daim ntawv lo rau lub namespace istio-injection=enabled, uas yog ua los ntawm cov lus txib hauv qab no:

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

Tam sim no txhua lub pod uas yuav muab tso rau hauv lub neej ntawd namespace (default) yuav tau txais nws lub thawv sidecar. Txhawm rau txheeb xyuas qhov no, cia peb xa daim ntawv thov xeem los ntawm kev mus rau hauv cov npe hauv paus ntawm qhov chaw khaws cia [istio-mastery] thiab khiav cov lus txib hauv qab no:

$ 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

Tom qab xa cov kev pabcuam, xyuas tias cov pods muaj ob lub thawv (nrog rau kev pabcuam nws tus kheej thiab nws lub tsheb) los ntawm kev khiav cov lus txib kubectl get pods thiab xyuas kom meej tias nyob rau hauv kab READY tus nqi teev 2/2, symbolizing tias ob lub thawv tau khiav:

$ 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

Visually nws zoo li no:

Rov qab mus rau microservices nrog Istio. Ntu 1
Envoy proxy nyob rau hauv ib qho ntawm cov pods

Tam sim no hais tias daim ntawv thov tau nce thiab khiav, peb yuav tsum tso cai nkag mus nkag rau hauv daim ntawv thov.

Ingress Rooj vag

Qhov kev coj ua zoo tshaj plaws kom ua tiav qhov no (cia kev khiav tsheb hauv pawg) yog dhau los Ingress Rooj vag hauv Istio, uas nyob ntawm "ntug" ntawm pawg thiab tso cai rau koj los pab Istio cov yam ntxwv xws li kev taug kev, thauj khoom sib npaug, kev ruaj ntseg, thiab kev saib xyuas cov tsheb tuaj.

Ingress Gateway tivthaiv thiab cov kev pabcuam uas xa mus rau sab nraud tau teeb tsa ntawm pawg thaum lub sijhawm Istio installation. Txhawm rau kom paub qhov chaw nyob IP sab nraud ntawm qhov kev pabcuam, khiav:

$ 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

Peb yuav txuas ntxiv nkag mus rau daim ntawv thov siv tus IP no (Kuv yuav xa mus rau nws li EXTERNAL-IP), yog li kom yooj yim, peb yuav sau tus nqi rau qhov sib txawv:

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

Yog tias koj sim nkag mus rau IP no los ntawm qhov browser tam sim no, koj yuav tau txais Kev Pabcuam Tsis Muaj Kev Ua Haujlwm, vim los ntawm lub neej ntawd Istio thaiv tag nrho cov tsheb khiavkom txog thaum lub rooj vag yog txhais.

Gateway kev pab

Gateway yog CRD (Kev Cai Kev Cai Txhais Lus) hauv Kubernetes, txhais tau tias tom qab txhim kho Istio hauv pawg thiab ua kom muaj peev xwm txheeb xyuas cov chaw nres nkoj, raws tu qauv, thiab cov tswv tsev uas peb xav tso cai nkag mus.

Hauv peb qhov xwm txheej, peb xav tso cai HTTP tsheb khiav ntawm chaw nres nkoj 80 rau txhua tus tswv. Qhov teeb meem yog pom tau los ntawm cov ntsiab lus hauv qab no (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:
- "*"

Qhov kev teeb tsa no yuav tsum tsis muaj kev piav qhia tshwj tsis yog rau tus xaiv istio: ingressgateway. Nrog tus xaiv no, peb tuaj yeem qhia meej qhov twg Ingress Gateway los siv qhov kev teeb tsa rau. Hauv peb cov ntaub ntawv, qhov no yog Ingress Gateway maub los, uas tau teeb tsa los ntawm lub neej ntawd hauv Istio.

Lub configuration yog siv los ntawm kev hu rau cov lus txib hauv qab no:

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

Lub rooj vag tam sim no tso cai nkag mus rau qhov chaw nres nkoj 80 tab sis tsis muaj lub tswv yim tias yuav taug txoj kev thov mus rau qhov twg. Rau qhov no koj yuav xav tau Kev Pabcuam Virtual.

Kev pabcuam Virtual

Lub VirtualService qhia rau Ingress Gateway yuav ua li cas rau txoj kev thov uas tau tso cai nyob rau hauv pawg.

Kev thov rau peb daim ntawv thov los ntawm http-gateway yuav tsum raug xa mus rau sa-frontend, sa-web-app thiab sa-feedback cov kev pabcuam:

Rov qab mus rau microservices nrog Istio. Ntu 1
Cov kev mus rau configured nrog VirtualServices

Xav txog cov lus thov uas yuav tsum tau xa mus rau SA-Frontend:

  • Muaj kev sib tw ntawm txoj kev / yuav tsum xa mus rau SA-Frontend kom tau index.html;
  • Paths nrog prefix /static/* yuav tsum tau xa mus rau SA-Frontend kom tau txais cov ntaub ntawv zoo li qub siv nyob rau hauv pem hauv ntej, xws li CSS thiab JavaScript;
  • Txoj kev sib piv cov lus tsis tu ncua '^.*.(ico|png|jpg)$', yuav tsum xa mus rau SA-Frontend, vim Cov no yog cov duab tso rau ntawm nplooj ntawv.

Kev siv yog ua tiav los ntawm kev teeb tsa hauv qab no (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

Cov ntsiab lus tseem ceeb:

  1. Qhov VirtualService no hais txog kev thov los ntawm http-gateway;
  2. Π’ destination txhais cov kev pabcuam uas cov lus thov raug xa mus.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Cov kev teeb tsa saum toj no yog khaws cia hauv cov ntaub ntawv sa-virtualservice-external.yaml, uas tseem muaj cov chaw rau routing rau SA-WebApp thiab SA-Feedback, tab sis tau luv luv ntawm no nyob rau hauv tsab xov xwm rau brevity.

Thov VirtualService los ntawm kev hu rau:


ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Thaum peb siv Istio cov peev txheej, Kubernetes API Server hluav taws xob ib qho xwm txheej uas Istio Control Plane tau txais, thiab tom qab ntawd, qhov kev teeb tsa tshiab tau siv rau txhua lub pod's Envoy proxy. Thiab Ingress Gateway maub los zoo li yog lwm tus Envoy teeb tsa hauv Kev Tswj Dav Hlau. Tag nrho cov no zoo li qhov no hauv daim duab:

Rov qab mus rau microservices nrog Istio. Ntu 1
Istio-IngressGateway configuration rau kev thov routing

Sentiment Analysis yog tam sim no muaj nyob rau http://{EXTERNAL-IP}/. Tsis txhob txhawj yog tias koj tsis pom qhov xwm txheej: qee zaum nws yuav siv sij hawm ntev me ntsis rau kev teeb tsa kom muaj txiaj ntsig thiab rau Envoy caches hloov tshiab.

Ua ntej pib, ua si nrog daim ntawv thov rau me ntsis los tsim kev khiav tsheb. (nws lub xub ntiag yog tsim nyog rau kev pom tseeb hauv kev ua tom ntej - kwv yees li.).

Kiali: Observability

Txhawm rau nkag mus rau Kiali admin interface, khiav cov lus txib hauv qab no:


…thiab qhib http://localhost:20001/los ntawm kev nkag mus rau hauv raws li admin/admin. Ntawm no koj yuav pom ntau yam muaj txiaj ntsig zoo, piv txwv li, txhawm rau txheeb xyuas qhov teeb tsa ntawm Istio cov khoom siv, pom cov kev pabcuam los ntawm cov ntaub ntawv sau los ntawm kev cuam tshuam cov kev thov hauv lub network, tau txais cov lus teb rau cov lus nug "Leej twg yog tus hu rau leej twg?", "Qhov kev pabcuam twg tau ntsib. ua tsis tiav?” thiab lwm yam. Feem ntau, tshawb txog qhov muaj peev xwm ntawm Kiali ua ntej mus rau qhov pom kev ntsuas nrog Grafana.

Rov qab mus rau microservices nrog Istio. Ntu 1

Grafana: visualization ntawm metrics

Cov kev ntsuas tau sau hauv Istio xaus rau hauv Prometheus thiab pom nrog Grafana. Txhawm rau nkag mus rau Grafana admin interface, khiav cov lus txib hauv qab no, tom qab ntawd qhib http://localhost:3000/:


Los ntawm txhaj rau ntawm daim ntawv qhia zaub mov Tsev sab laug thiab xaiv Istio Service Dashboard nyob rau sab laug ces kaum, pib nrog kev pab sa-web-appmus saib cov metrics sau:

Rov qab mus rau microservices nrog Istio. Ntu 1

Ntawm no peb tab tom tos qhov kev ua haujlwm khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob. Cia peb tsim ib qho me me load nrog cov lus txib hauv qab no:


Tam sim no peb muaj ntau cov duab zoo nkauj, thiab ntxiv rau lawv, cov cuab yeej zoo Prometheus rau kev saib xyuas thiab Grafana rau kev pom kev ntsuas, uas yuav ua rau peb kawm txog kev ua tau zoo, kev noj qab haus huv, kev txhim kho / kev puas tsuaj hauv cov kev pabcuam raws sijhawm.

Thaum kawg, cia peb saib ntawm kev thov tracing hauv cov kev pabcuam.

Jaeger: taug kev

Peb yuav xav tau kev taug qab, vim tias peb muaj kev pabcuam ntau dua, nws nyuaj rau kev nkag mus rau qhov ua rau tsis ua haujlwm. Cia peb saib ib rooj plaub yooj yim ntawm daim duab hauv qab no:

Rov qab mus rau microservices nrog Istio. Ntu 1
Ib qho piv txwv ntawm qhov kev thov ua tsis tiav random

Thov tuaj, ntog - yog vim li cas? Thawj qhov kev pabcuam? Los yog thib ob? Muaj kev zam nyob rau hauv ob qho tib si - cia saib cov cav ntawm txhua tus. Ntev npaum li cas koj tau ntes koj tus kheej ua qhov no? Peb txoj hauj lwm yog zoo li software detective tshaj developers…

Qhov no yog ib qho teeb meem thoob plaws hauv microservices thiab tau daws los ntawm kev faib cov tracing systems, uas cov kev pab cuam kis tau tus cim header rau ib leeg, tom qab uas cov ntaub ntawv no yog redirected rau lub tracing system, qhov twg nws yog muab piv nrog cov ntaub ntawv thov. Nov yog ib qho piv txwv:

Rov qab mus rau microservices nrog Istio. Ntu 1
TraceId yog siv los txheeb xyuas qhov kev thov

Istio siv Jaeger Tracer, uas siv cov neeg muag khoom ywj pheej OpenTracing API lub hauv paus. Koj tuaj yeem nkag mus rau Jaeger tus neeg siv interface nrog cov lus txib hauv qab no:


Tam sim no mus rau http://localhost:16686/ thiab xaiv ib qho kev pabcuam sa-web-app. Yog tias qhov kev pabcuam tsis pom nyob rau hauv cov ntawv qhia zaub mov, qhia / tsim cov haujlwm ntawm nplooj ntawv thiab hloov kho lub interface. Tom qab ntawd nyem rau ntawm lub pob Nrhiav cov kab, uas yuav qhia cov kab dhau los tsis ntev los no - xaiv ib qho - cov ncauj lus kom ntxaws ntawm txhua kab yuav tshwm sim:

Rov qab mus rau microservices nrog Istio. Ntu 1

Cov kab no qhia tau tias:

  1. Qhov kev thov tuaj rau hauv istio-ingressgateway (qhov no yog thawj zaug kev cuam tshuam nrog ib qho ntawm cov kev pabcuam, thiab Trace ID yog tsim rau qhov kev thov), tom qab ntawd lub rooj vag xa cov lus thov mus rau qhov kev pabcuam sa-web-app.
  2. Hauv kev pabcuam sa-web-app qhov kev thov raug khaws los ntawm Envoy sidecar, ib tug "me nyuam" yog tsim nyob rau hauv lub ncua (yog vim li cas peb pom nws nyob rau hauv ib tug kab) thiab redirected rau lub thawv sa-web-app. (Span - ib chav tsev ntawm kev ua haujlwm hauv Jaeger, muaj lub npe, lub sijhawm pib ntawm kev ua haujlwm thiab nws lub sijhawm. Spans tuaj yeem ua zes thiab xaj. Ib daim duab qhia acyclic ntawm spans ua ib txoj kab. - kwv yees. txhais.)
  3. Ntawm no qhov kev thov raug ua tiav los ntawm txoj kev kev xav Analysis. Cov kab no twb tsim los ntawm daim ntawv thov, i.e. lawv yuav tsum tau hloov code.
  4. Txij lub sijhawm no, qhov kev thov POST tau pib hauv sa-logic. Tus ID nkag mus yuav tsum tau xa los ntawm sa-web-app.
  5. ...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Hauv kauj ruam 4, daim ntawv thov yuav tsum pom cov headers tsim los ntawm Istio thiab dhau lawv mus rau kev thov tom ntej, raws li qhia hauv daim duab hauv qab no:

Rov qab mus rau microservices nrog Istio. Ntu 1
(A) Header forwarding yog lub luag haujlwm ntawm Istio; (B) Cov kev pab cuam yog lub luag haujlwm rau cov headers

Istio ua haujlwm ntau vim tsim cov headers rau cov lus thov tuaj, tsim cov spans tshiab hauv txhua qhov kev saib xyuas thiab xa mus rau lawv. Txawm li cas los xij, yog tias tsis ua haujlwm nrog cov headers hauv cov kev pabcuam, tag nrho cov kev thov taug qab yuav ploj mus.

Cov headers hauv qab no yuav tsum tau txiav txim siab (xa mus):


Qhov no yog ib txoj hauj lwm yooj yim, tab sis kom yooj yim rau nws qhov kev siv, muaj lawm ntau lub tsev qiv ntawv - Piv txwv li, hauv sa-web-app kev pabcuam, RestTemplate tus neeg siv khoom xa mus rau cov headers yog tias koj tsuas ntxiv cov tsev qiv ntawv Jaeger thiab OpenTracing rau nws dependencies.

Nco ntsoov tias daim ntawv thov Kev Ntsuas Kev Ntsuas pom pom kev siv hauv Flask, Spring, thiab ASP.NET Core.

Tam sim no nws yog qhov tseeb tias peb tab tom tawm ntawm lub thawv (lossis yuav luag tawm ntawm lub thawv), cia peb saib cov kev hloov kho kom zoo, kev tswj xyuas tsheb khiav hauv network, kev ruaj ntseg, thiab ntau ntxiv!

Nco tseg. txhais.: nyeem txog qhov no hauv ntu txuas ntxiv ntawm cov ntaub ntawv ntawm Istio los ntawm Rinor Maloku, cov kev txhais lus uas yuav ua raws li peb cov blog yav tom ntej. Hloov tshiab (Lub Peb Hlis 14): Qhov thib ob twb luam tawm lawm.

PS los ntawm tus txhais lus

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com