Bi Istio re vegerin ser mîkroxizmetan. Beş 1

Bi Istio re vegerin ser mîkroxizmetan. Beş 1

Not. werger.: Tûrên karûbar bê guman di binesaziya nûjen de ji bo serîlêdanên li pey mîmariya mîkroxizmetê bûne çareseriyek têkildar. Digel ku Istio dibe ku li ser devê gelek endezyarên DevOps be, ew hilberek nû ye ku her çend di warê kapasîteyên ku ew peyda dike de berfireh be jî, dibe ku ji bo naskirina demek girîng hewce bike. Endezyarê Alman Rinor Maloku, ku berpirsiyarê hesabkirina ewr e ji bo xerîdarên mezin li pargîdaniya têlefonê ya Orange Networks, rêzek materyalên hêja nivîsandiye ku dihêle hûn zû û kûr li Istio bigerin. Ew çîroka xwe bi tiştê ku Istio bi gelemperî dikare bike û hûn çawa dikarin zû bi çavên xwe bibînin dest pê dike.

Istio - Projeyek Çavkaniya Vekirî bi hevkariya tîmên Google, IBM û Lyft ve hatî pêşve xistin. Ew tevliheviyên ku di serîlêdanên li ser bingeha mîkroservisan de derdikevin çareser dike, wek:

  • Rêveberiya Trafîkê: demankirin, dubarekirin, hevsengkirina barkirinê;
  • Ewlekariyê: Nasname û destûrnameya bikarhênerê dawî;
  • Çavdêrîbûn: şopandin, şopandin, tomarkirin.

Vana hemî dikarin di asta serîlêdanê de werin çareser kirin, lê piştî wê dê karûbarên we êdî "mikro" nebin. Hemî hewildana zêde ya ji bo çareserkirina van pirsgirêkan windakirina çavkaniyên pargîdaniyê ye ku dikare rasterast ji bo nirxa karsaziyê were bikar anîn. Ka em li mînakekê binêrin:

Rêvebirê Projeyê: Ji bo zêdekirina taybetmendiyek nerînek çiqas dem digire?
Pêşvebir: Du sprint.

Parlamenter: Çi?.. Bi tenê ÇAV e!
R: Kirina CRUD beşek hêsan e, lê dîsa jî pêdivî ye ku em bikarhêner û karûbaran rast bikin û destûr bidin. Ji ber ku torê nebawer e, hûn ê hewce bikin ku daxwazên dubare bicîh bikin, û her weha pattern breaker circuit di xerîdaran de. Di heman demê de, ji bo ku hûn pê ewle bibin ku tevahiya pergalê têk naçe, hûn ê hewceyê deman û wextan bin bulkheads (ji bo hûrguliyên bêtir li ser her du şêwazên navborî, li paşê di gotarê de binêre - nêzîkê werger.), û ji bo tespîtkirina pirsgirêkan, şopandin, şopandin, […]

MP: Oh, wê hingê em tenê vê taybetmendiyê têxin karûbarê Hilberê.

Ez difikirim ku fikir zelal e: hêjmara gav û hewildana ku ji bo lê zêdekirina karûbarek hewce ye pir e. Di vê gotarê de, em ê binihêrin ka Istio çawa hemî tevliheviya ku li jor hatî behs kirin (ku ne armanc e ku meriv mantiqa karsaziyê be) ji karûbaran derxîne.

Bi Istio re vegerin ser mîkroxizmetan. Beş 1

bingotin: Ev gotar texmîn dike ku we zanîna xebatê ya Kubernetes heye. Wekî din, ez xwendinê pêşniyar dikim danasîna min a Kubernetes û tenê piştî wê xwendina vê materyalê bidomînin.

Istio idea

Di cîhanek bêyî Istio de, karûbarek rasterast ji yekî din re daxwaz dike, û di bûyera têkçûn de, pêdivî ye ku karûbar wê bixwe bi rê ve bibe: hewildanek nû bike, demek peyda bike, şkesteyek veke, hwd.

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
Trafîka torê li Kubernetes

Istio çareseriyek pispor pêşkêşî dike, ku bi tevahî ji karûbaran veqetandî ye û bi tevlihevkirina pêwendiya torê dixebite. Û bi vî awayî pêk tîne:

  • tolerans xelet: Li ser bingeha koda statûyê ya di bersivê de, ew fam dike ka daxwaz biserneket an na û wê ji nû ve pêk tîne.
  • rollouts Canary: Tenê rêjeyek diyarkirî ya daxwazan beralî dike guhertoya nû ya karûbarê.
  • Çavdêrî û metrics: Çend dem derbas bû bo bersivdana xizmetê?
  • Şopandin û Çavdêrî: Sernivîsên taybetî li her daxwazekê zêde dike û wan li seranserê komê dişopîne.
  • Ewlekariyê: Tokena JWT digire, bikarhêneran nas dike û destûr dide.

Vana tenê çend ji îmkanan in (bi rastî jî çend hindik!) ku we bixapînin. Naha em werin nav hûrguliyên teknîkî!

mîmariya Îstio

Istio hemî seyrûsefera torê dişoxilîne û komek rêzik li ser wê bicîh tîne, proxyek jîr di forma konteynerek kêlekê de li her podê dixe. Proxyên ku hemî kapasîteyên çalak dikin a Plana Daneyên, û ew dikarin bi karanîna dînamîkî werin mîheng kirin Balafira kontrolê.

Plana Daneyên

Pêşniyarên ku di nav potan de têne danîn dihêle Istio bi hêsanî hewcedariyên ku em hewce ne bicîh bîne. Mînakî, werin em fonksiyonên ji nû ve ceribandinê û vekêşana çerxê kontrol bikin.

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
Çawa dubarekirin û şikandina dorpêçê di Envoy de têne bicîh kirin

Nîqaş:

  1. Nûnerê (Em li ser proxyek ku di konteynerek kêlekê de ye, ku wekî tê belav kirin diaxivin hilberek cuda - nêzîkî. werger.) daxwazek ji servîsa B ya yekem re dişîne û têk diçe.
  2. Nûnerê Sidecar dîsa hewl dide (ji nû ve biceribîne). (1)
  3. Daxwaz bi têkçûyîna nûnerê ku jê re tê gotin tê vegerandin.
  4. Ev Circuit Breaker vedike û ji bo daxwazên paşîn gazî karûbarê din dike. (2)

Ev tê wê wateyê ku hûn ne hewce ne ku hûn pirtûkxaneyek din biceribîne bikar bînin, ne hewce ye ku hûn bi zimanê bernamenûsê X, Y an Z-ya X, Y an Z-yê bicîhkirina Circuit Breaking û Vedîtina Xizmetê ya xwe bi xwe bikin. Hemî ev û hêj bêtir li derveyî qutiyê peyda dibin. li Istio û hewce nake na guhertinên di kodê de.

Ecêb! Naha dibe ku hûn bixwazin bi Istio re biçin seyahetê, lê dîsa jî hin gumanên we hene, pirsên vekirî. Ger ev çareseriyek gerdûnî ye ji bo hemî rewşên jiyanê, wê hingê gumanek weya xwezayî heye: her tiştî, hemî çareseriyên weha di rastiyê de ji bo her rewşê neguncav dibin.

Û di dawiyê de hûn dipirsin: "Ma ew xwerû ye?"

Naha hûn ji bo sefera deryayê amade ne, werin em bi Balafira Kontrolê re nas bikin.

Balafira kontrolê

Ew ji sê beşan pêk tê: Pîlot, Navhevxistok и kelha, yên ku bi hev re dixebitin ku Şandiyan mîheng bikin da ku rêwîtiyê rêve bibin, polîtîkayan bicîh bînin û daneyên telemetrîyê berhev bikin. Ji hêla şematîkî ve hemî weha xuya dike:

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
Têkiliya Balafira Kontrolê bi Plana Daneyê re

Nûnerên (ango balafira daneyê) bi karanîna têne mîheng kirin Kubernetes CRD (Pênaseyên Çavkaniya Xwerû) ku ji hêla Istio ve hatî destnîşankirin û bi taybetî ji bo vê armancê hatî armanc kirin. Wateya vê ji we re ev e ku ew di Kubernetes-ê de bi hevoksaziyek nas tenê çavkaniyek din xuya dikin. Piştî ku were afirandin, dê ev çavkanî ji hêla balafira kontrolê ve were hildan û li Envoys were sepandin.

Têkiliya karûbarên bi Istio re

Me têkiliya Istio bi karûbaran re diyar kir, lê ne berevajî: karûbar çawa bi Istio re têkildar in?

Bi rastî, karûbar bi qasî masî ji avê hay ji hebûna Istio ne dema ku ew ji xwe dipirsin, "Av çi ye jî?"

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
Xirabkirin Victoria Dimitrakopoulos: - Tu ji avê çawa hez dikî? - Jixwe av çi ye?

Bi vî rengî, hûn dikarin komek xebatkar bigirin û piştî bicîhkirina pêkhateyên Istio, karûbarên ku tê de cih digirin dê berdewam bikin, û piştî rakirina van hêmanan, dê her tişt dîsa baş be. Eşkere ye ku di vê rewşê de hûn ê kapasîteyên ku ji hêla Istio ve hatî peyda kirin winda bikin.

Teorî bes e - em vê zanînê bixin pratîkê!

Istio di pratîkê de

Istio hewceyê komek Kubernetes bi kêmî ve 4 vCPU û 8 GB RAM heye. Ji bo ku zû komeke saz bikin û rêwerzên gotarê bişopînin, ez pêşniyar dikim ku hûn Platforma Google Cloud bikar bînin, ku bikarhênerên nû pêşkêşî dike. belaş $ 300.

Piştî afirandina komek û mîhengkirina gihîştina Kubernetes bi navgîniya kargêriya konsolê, hûn dikarin Istio bi navgîniya rêveberê pakêtê Helm saz bikin.

Sazkirina Helm

Muwekîlê Helm li ser komputera xwe saz bikin, wekî ku di nav de hatî destnîşan kirin belgeyên fermî. Em ê vê yekê bikar bînin da ku di beşa pêş de ji bo sazkirina Istio şablonan çêbikin.

Sazkirina Istio

Çavkaniyên Istio ji dakêşin serbestberdana dawî (Girêdana nivîskarê orîjînal bi guhertoya 1.0.5-ê re guhertiye ya niha, ango 1.0.6 - bi qasî werger.), naverokê derxe nav yek pelrêça, ku ez ê ji vir pê ve bang bikim [istio-resources].

Ji bo ku bi hêsanî çavkaniyên Istio nas bikin, navek navek di koma K8s de biafirînin istio-system:

$ kubectl create namespace istio-system

Sazkirinê bi çûna pelrêçê temam bikin [istio-resources] û fermanê dimeşîne:

$ 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

Ev ferman dê hêmanên sereke yên Istio li pelek derxe istio.yaml. Me qalibê standard guhert da ku li gorî xwe be, pîvanên jêrîn diyar kirin:

  • global.mtls.enabled tê sazkirin false (ango erêkirina mTLS neçalak e - bi qasî.)ji bo hêsankirina pêvajoya dating me;
  • tracing.enabled bi karanîna Jaeger şopandina daxwazê ​​vedihewîne;
  • kiali.enabled Kiali di komekê de saz dike da ku karûbar û trafîkê xuya bike;
  • grafana.enabled Grafana saz dike da ku metrîkên berhevkirî xuya bike.

Ka em çavkaniyên hilberandî bi fermanê bikar bînin:

$ kubectl apply -f istio.yaml

Sazkirina Istio li ser komê qediya! Li bendê bin heya ku hemî pod di nav qada navan de bin istio-system dê bikaribe Running an Completedbi xebitandina fermana jêrîn:

$ kubectl get pods -n istio-system

Naha em amade ne ku di beşa pêş de berdewam bikin, ku em ê serlêdanê bikin û bixebitin.

Mîmariya sepana Analîza Hestiyê

Werin em mînaka serîlêdana mîkroxizmeta Analîza Sentimentê ya ku di ya ku berê hatî destnîşan kirin de bikar bînin Gotara danasînê ya Kubernetes. Ew têra xwe tevlihev e ku meriv kapasîteyên Istio di pratîkê de nîşan bide.

Serlêdan ji çar mîkro-servîsan pêk tê:

  1. xizmeta SA-Eniya, ku pêşiyê serîlêdana Reactjs re xizmet dike;
  2. xizmeta SA-WebApp, ku pirsên Analîza Hestiyê xizmetê dike;
  3. xizmeta SA-Logic, ku xwe pêk tîne analîza hest;
  4. xizmeta SA-Fêdback, ku ji bikarhêneran di derbarê rastbûna analîzê de bersivê distîne.

Bi Istio re vegerin ser mîkroxizmetan. Beş 1

Di vê diagramê de, ji bilî karûbaran, em di heman demê de Kontrolkera Ingressê jî dibînin, ku di Kubernetes de daxwazên gihîştî berbi karûbarên guncan ve dişîne. Istio di hundurê xweya Ingress Gateway-ê de têgehek wekhev bikar tîne, ku bêtir hûrguliyên ku dê li pey wê werin.

Bi proxy ji Istio serîlêdanek dimeşîne

Ji bo operasyonên din ên ku di gotarê de hatine destnîşan kirin, depoya xwe klon bikin istio-serwerî. Ew ji bo Kubernetes û Istio serîlêdan û diyar dike.

Têxistina kêlekan

Insert dikare were kirin otomatîk an bi destan. Ji bo ku hûn bixweber têxin konteynerên kêlekê, hûn ê hewce bikin ku etîketek li cîhê navan saz bikin istio-injection=enabled, ku bi fermana jêrîn pêk tê:

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

Naha her podek ku dê di cîhê navên xwerû de were bicîh kirin (default) dê konteynera xwe ya kêlekê bistîne. Ji bo verastkirina vê, bila em serîlêdana ceribandinê bi çûna pelrêça root ya depoyê bi cih bikin [istio-mastery] û fermana jêrîn dimeşîne:

$ 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

Piştî ku karûbaran bi cih kirin, em bi xebitandina fermanê kontrol bikin ka pod du konteynir hene (bi karûbarê xwe û kêleka wê re) kubectl get pods û piştrast dikin ku di bin stûnê de READY nirxê diyar kirin 2/2, nîşan dide ku her du konteynir dimeşin:

$ 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

Bi dîtbarî wiha xuya dike:

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
Nûnerê nûnerê di yek ji pods

Naha ku serîlêdan dest pê kiriye û dimeşe, em ê hewce bikin ku rê bidin ku seyrûsefera hatinî bikeve serîlêdanê.

Ingress Gateway

Pratîka çêtirîn ku meriv vê yekê bi dest bixe (destûrê bide seyrûsefera komê) bi rê ve ye Ingress Gateway li Istio, ku li "qiraxa" komê ye û dihêle hûn taybetmendiyên Istio yên wekî rêkirin, hevsengkirina barkirinê, ewlehî û çavdêrîkirina seyrûsefera hatinê çalak bikin.

Parçeya Ingress Gateway û karûbarê ku wê ji derve dişîne di dema sazkirina Istio de di komê de hatine saz kirin. Ji bo ku hûn navnîşana IP-ya derveyî ya karûbarê fêr bibin, bişopînin:

$ 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

Em ê bi karanîna vê IP-ê bigihîjin serîlêdanê (ez ê wekî EXTERNAL-IP binav bikim), ji ber vê yekê ji bo rehetiyê em ê nirxê di guhêrbarek de binivîsin:

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

Ger hûn niha hewl bidin ku bi riya gerokek xwe bigihînin vê IP-yê, hûn ê xeletiyek Xizmeta Neberdest bistînin, ji ber ku ji hêla xwerû ve Istio hemî seyrûsefera hatinê asteng dike, Gateway hîn nehatiye diyarkirin.

Çavkaniya Gateway

Gateway di Kubernetes de CRD (Pênase Çavkaniya Xwerû) ye, ku piştî sazkirina Istio di komê de hatî destnîşan kirin û şiyana destnîşankirina port, protokol û mêvandarên ku em dixwazin destûr bidin seyrûsefera hatinê destnîşan dike.

Di doza me de, em dixwazin rê bidin seyrûsefera HTTP li porta 80-ê ji bo hemî mêvandaran. Kar bi pênaseya jêrîn pêk tê (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:
- "*"

Ev veavakirin ji bilî hilbijêrê pêdiviya ravekirinê tune istio: ingressgateway. Bi vê hilbijêrê re em dikarin diyar bikin ku ji kîjan Deriyê Ingressê re veavakirinê bicîh tîne. Di doza me de, ev kontrolkera Ingress Gateway e, ku ji hêla xwerû ve li Istio hate saz kirin.

Veavakirin bi bangkirina fermana jêrîn tê sepandin:

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

Dergeh naha destûrê dide gihîştina porta 80-ê, lê nizane ku li ku derê daxwazên rêve bike. Ji bo vê hûn ê hewce bibin Xizmetên Virtual.

Çavkaniya VirtualService

VirtualService ji Ingress Gateway re vedibêje ka meriv çawa daxwazên ku di nav komê de têne destûr kirin rêve dike.

Daxwazên serîlêdana me ya ku ji hêla http-gateway ve têne şandin divê ji karûbarên sa-frontend, sa-web-app û sa-feedback re bêne şandin:

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
Rêwiyên ku divê bi VirtualServices re bêne mîheng kirin

Ka em li daxwazên ku divê ji SA-Frontend re bêne şandin binêrin:

  • Maça rastîn di rê de / divê ji SA-Frontend re were şandin ku index.html;
  • Rêyên pêşgir /static/* Pêdivî ye ku ji SA-Frontend re were şandin da ku pelên statîk ên ku li pêşiyê têne bikar anîn, wekî CSS û JavaScript bistînin;
  • Rêyên ku ji hêla vegotina rêkûpêk ve têne hev kirin '^.*.(ico|png|jpg)$', divê ji SA-Frontend re bê şandin, ji ber Ev wêneyên li ser rûpelê têne xuyang kirin.

Bicîhkirin bi veavakirina jêrîn pêk tê (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.

Примечание: На 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


Xalên girîng:
  1. Ev Xizmeta Virtualê behsa daxwazên ku bi rê ve dibin http-dergeh;
  2. В destination Xizmeta ku daxwaz jê re têne şandin tê destnîşankirin.

bingotin: Veavakirina jorîn di pelê de tê hilanîn sa-virtualservice-external.yaml, ku di heman demê de mîhengên rêvekirinê di SA-WebApp û SA-Feedback de jî vedihewîne, lê li vir di gotarê de ji bo kurtbûnê hatî kurt kirin.

Werin em bi banga VirtualService bicîh bikin:


bingotin: Dema ku em çavkaniyên Istio dixwin, Pêşkêşkara Kubernetes API bûyerek ku ji hêla Balafira Kontrolê ya Istio ve tê wergirtin diafirîne, û piştî wê veavakirina nû li ser proxyên Envoy her pod-ê tê sepandin. Û kontrolkerê Ingress Gateway xuya dike ku Nûnerê din e ku di Balafira Kontrolê de hatî mîheng kirin. Hemî ev di diagramê de wiha xuya dike:

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
Veavakirina Istio-IngressGateway ji bo rêvekirina daxwazê

Serlêdana Analîza Hestê naha li ser heye http://{EXTERNAL-IP}/. Ger hûn statûya Not Found bistînin xem nekin: Carinan piçekî dirêjtir digire ku veavakirin bandor bike û kaşeyên Envoy nûve bike.

Berî ku bidomînin, hinekî bi sepanê re bilîzin da ku seyrûseferê çêbikin. (hebûna wê ji bo zelalbûna çalakiyên paşerojê hewce ye - bi qasî werger.).

Kiali: çavdêrîkirin

Ji bo ku hûn bigihîjin navbeynkariya îdarî ya Kiali, emrê jêrîn bişopînin:


... û vekirî http://localhost:20001/, wekî admin/admin têketinê. Li vir hûn ê gelek taybetmendiyên bikêr bibînin, mînakî, ji bo kontrolkirina veavakirina pêkhateyên Istio, dîtina karûbaran bi karanîna agahdariya ku ji daxwazên torê veqetandî hatî berhev kirin, bersivên pirsên "Kî bi kê re têkilî daynin?", "Kîjan guhertoya karûbarê diceribîne." têkçûn?” wate ya vê çîye. Bi gelemperî, berî ku bi Grafana re metrîkên dîtbarî bikin, kapasîteyên Kiali bigerin.

Bi Istio re vegerin ser mîkroxizmetan. Beş 1

Grafana: dîtbariya metrîkê

Metrîkên ku li Istio têne berhev kirin diçin Prometheus û bi Grafana têne xuyang kirin. Ji bo ku hûn bigihîjin navgîniya îdarî ya Grafana, emrê jêrîn bişopînin û dûv re vekin http://localhost:3000/:


Li ser menuê bitikîne Xane çepê jor û hilbijartin Dashboard Xizmeta Istio li quncika çepê ya jorîn, bi karûbarê dest pê bikin sa-web-appli metrîkên berhevkirî binêre:

Bi Istio re vegerin ser mîkroxizmetan. Beş 1

Ya ku li vir li benda me ye performansek vala û bi tevahî bêzar e - rêveberî dê çu carî vê yekê nepejirîne. Ka em bi fermana jêrîn barek piçûk biafirînin:


Naha grafikên me yên pir xweşiktir hene, û ji bilî wan, amûrên Prometheus yên ecêb ên ji bo çavdêrîkirinê û Grafana ji bo dîtina metrîkan ku dê bihêle ku em bi demê re di derheqê performans, tenduristî, çêtirkirin / xirabûna karûbaran de fêr bibin.

Di dawiyê de, em li ser şopandina daxwazên di karûbaran de binihêrin.

Jaeger: şopandin

Em ê hewceyê şopandinê bin ji ber ku her ku bêtir karûbarên me hebin, ew qas dijwartir e ku meriv bigihîje sedema têkçûnê. Ka em ji wêneya jêrîn li dozek hêsan binêrin:

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
Mînaka tîpîk a daxwaznameyek têkçûyî ya rasthatî

Daxwaz tê, dikeve - sedem çi ye? Xizmeta yekem? An ya duyemîn? Di herduyan de jî îstîsna hene - ka em li têketinên her yekê binêrin. We çend caran xwe bi vî karî girtiye? Karê me ji pêşdebiran bêtir dişibihe detektîfên nermalavê ye...

Ev pirsgirêkek hevpar di mîkroxizmetan de ye û bi pergalên şopandina belavbûyî ve tê çareser kirin, ku tê de karûbar sernavek bêhempa ji hev re derbas dikin, pişt re ev agahdarî ji pergala şopandinê re tê şandin, li wir ew bi daneyên daxwaznameyê re têne berhev kirin. Li vir nîgarek heye:

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
TraceId ji bo naskirina daxwazê ​​tê bikar anîn

Istio Jaeger Tracer bikar tîne, ku çarçoveyek OpenTracing API-ya serbixwe-firotanê bicîh tîne. Hûn dikarin bi fermana jêrîn bigihîjin navrûya bikarhênerê Jaeger:


Niha biçin http://localhost:16686/ û karûbarek hilbijêrin sa-web-app. Ger karûbar di pêşeka dakêşanê de neyê xuyang kirin, li ser rûpelê çalakiyê nîşan bide/biafirîne û pêvekê nûve bike. Piştî wê, li ser bişkojka bikirtînin Şopan bibînin, ku dê şopên herî paşîn nîşan bide - her hilbijêrin - agahdariya berfireh li ser hemî şopan dê xuya bibe:

Bi Istio re vegerin ser mîkroxizmetan. Beş 1

Ev şop nîşan dide:

  1. Daxwaz tê istio-ingressgateway (ev pêwendiya yekem bi yek ji karûbaran re ye, û Nasnameyek Trace ji bo daxwazê ​​tê çêkirin), piştî ku dergeh daxwazê ​​ji karûbarê re dişîne sa-web-app.
  2. Di xizmetê de sa-web-app daxwaz ji hêla karmendê şandî ve tê hilanîn, "zarok" di navberê de tê afirandin (ji ber vê yekê em wê di şopan de dibînin) û ber bi konteynerê ve tê rêve kirin. sa-web-app. (span - Yekîneyek mentiqî ya xebatê li Jaeger, ku nav, dema destpêkirina operasyonê û dema wê heye. Span dikarin hêlîn û rêz kirin. Grafikek asîklîk a rêvekirî ya beşan şopek çêdike. - nêzîkî. werger.)
  3. Li vir daxwaz bi rêbazê tête kirin Analîziya hestan. Van şopan jixwe ji hêla serîlêdanê ve têne çêkirin, ango. ew guhertinên kodê hewce ne.
  4. Ji vê gavê û pê ve, daxwazek POST tê destpêkirin sa-mantiq. Nasnameya şopandinê divê ji were şandin sa-web-app.
  5. ...

bingotin: Di gava 4-an de, pêdivî ye ku serîlêdan sernavên ku ji hêla Istio ve hatî çêkirin bibînin û wan ji daxwazên paşîn re wekî ku di wêneya jêrîn de têne xuyang kirin derbas bike:

Bi Istio re vegerin ser mîkroxizmetan. Beş 1
(A) Istio ji şandina sernivîsan berpirsiyar e; (B) Karûbar ji sernavan berpirsiyar in

Istio piraniya karan dike ji ber ku ... ji bo daxwazên hatinê sernivîsan çêdike, di her lênêrînê de qonaxên nû diafirîne û wan pêş dixe. Lêbelê, bêyî ku bi sernavên hundurê karûbaran re bixebitin, dê riya şopandina daxwaziya tevahî winda bibe.

Divê sernavên jêrîn bêne hesibandin:


Ev ne karekî dijwar e, lê jixwe hêsankirina pêkanîna wê heye gelek pirtûkxane - Mînakî, di karûbarê sa-web-app de, ger hûn tenê pirtûkxaneyên Jaeger û OpenTracing lê zêde bikin, muwekîlê RestTemplate van sernivîsan dişopîne. addictions wî.

Bala xwe bidinê ku sepana Analîza Sentimentê pêkanînên li Flask, Spring, û ASP.NET Core nîşan dide.

Naha ku zelal e ku em çi ji qutikê derdixin (an jî hema ji qutiyê), ka em li rêça birêkûpêk, rêveberiya seyrûsefera torê, ewlehî, hwd. binêrin!

Not. werger.: Li ser vê yekê di beşa paşîn a materyalên li ser Istio de ji Rinor Maloku bixwînin, wergerên ku dê di demek nêzîk de li ser bloga me bişopînin. UPDATE (14ê Adarê): Beşek duyem berê hatiye weşandin.

PS ji wergêr

Li ser bloga me jî bixwînin:

Source: www.habr.com

Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster