
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 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 (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.

bingotin: Ev gotar texmîn dike ku we zanîna xebatê ya Kubernetes heye. Wekî din, ez xwendinê pêşniyar dikim û 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.

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.

Çawa dubarekirin û şikandina dorpêçê di Envoy de têne bicîh kirin
Nîqaş:
- Nûnerê (Em li ser proxyek ku di konteynerek kêlekê de ye, ku wekî tê belav kirin diaxivin - nêzîkî. werger.) daxwazek ji servîsa B ya yekem re dişîne û têk diçe.
- Nûnerê Sidecar dîsa hewl dide (ji nû ve biceribîne). (1)
- Daxwaz bi têkçûyîna nûnerê ku jê re tê gotin tê vegerandin.
- 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:

Têkiliya Balafira Kontrolê bi Plana Daneyê re
Nûnerên (ango balafira daneyê) bi karanîna têne mîheng kirin (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î?"

Xirabkirin : - 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. .
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 . 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 (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.enabledtê sazkirinfalse(ango erêkirina mTLS neçalak e - bi qasî.)ji bo hêsankirina pêvajoya dating me; -
tracing.enabledbi karanîna Jaeger şopandina daxwazê vedihewîne; -
kiali.enabledKiali di komekê de saz dike da ku karûbar û trafîkê xuya bike; -
grafana.enabledGrafana 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 . 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ê:
- xizmeta SA-Eniya, ku pêşiyê serîlêdana Reactjs re xizmet dike;
- xizmeta SA-WebApp, ku pirsên Analîza Hestiyê xizmetê dike;
- xizmeta SA-Logic, ku xwe pêk tîne ;
- xizmeta SA-Fêdback, ku ji bikarhêneran di derbarê rastbûna analîzê de bersivê distîne.

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 . 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:

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ê ():
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:

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ê ():
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) Важные моменты:Примечание: Конфигурация выше хранится в файле
- Этот VirtualService относится к запросам, приходящим через http-gateway;
- В
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-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… и откройте , залогинившись под admin/admin. Здесь вы найдете множество полезных возможностей, например, для проверки конфигурации компонентов Istio, визуализации сервисов по информации, собранной при перехвате сетевых запросов, получения ответов на вопросы «Кто к кому обращается?», «У какой версии сервиса возникают сбои?» и т.п. В общем, изучите возможности Kiali перед тем, как двигаться дальше — к визуализации метрик с Grafana.
Grafana: визуализация метрик
Собранные в Istio метрики попадают в Prometheus и визуализируются с Grafana. Чтобы попасть в административный интерфейс Grafana, выполните команду ниже, после чего откройте :
$ 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, чтобы посмотреть на собранные метрики:
Здесь нас ждёт пустое и совершенно скучное представление — руководство никогда такое не одобрит. Давайте же создадим небольшую нагрузку следующей командой:
$ 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 : трассировка
Трассировка нам потребуется, потому что чем больше у нас сервисов, тем сложнее добраться до причины сбоя. Посмотрим на простой случай из картинки ниже:
Типовой пример случайного неудачного запросаЗапрос приходит, падает — в чём же причина? Первый сервис? Или второй? Исключения есть в обоих — давайте посмотрим на логи каждого. Как часто вы ловили себя за таким занятием? Наша работа больше похожа на детективов программного обеспечения, а не разработчиков…
Это широко распространённая проблема в микросервисах и решается она распределёнными системами трассировки, в которых сервисы передают друг другу уникальный заголовок, после чего эта информация перенаправляется в систему трассировки, где она сопоставляется с данными запроса. Вот иллюстрация:
Для идентификации запроса используется 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Теперь зайдите на и выберите сервис sa-web-app. Если сервис не показан в выпадающем меню — проявите/сгенерируйте активность на странице и обновите интерфейс. После этого нажмите на кнопку Find Traces, которая покажет самые последние трейсы — выберите любой — покажется детализированная информация по всем трейсам:
Этот трейс показывает:
- Запрос приходит в istio-ingressgateway (это первое взаимодействие с одним из сервисов, и для запроса генерируется Trace ID), после чего шлюз направляет запрос в сервис sa-web-app.
- В сервисе sa-web-app запрос подхватывается Envoy sidecar'ом, создаётся «ребёнок» в span'е (поэтому мы видим его в трейсах) и перенаправляется в контейнер sa-web-app. ( — логическая единица работы в Jaeger, имеющая название, время начало операции и её продолжительность. Span'ы могут быть вложенными и упорядоченными. Ориентированный ациклический граф из span'ов образует trace. — прим. перев.)
- Здесь запрос обрабатывается методом sentimentAnalysis. Эти трейсы уже сгенерированы приложением, т.е. для них потребовались изменения в коде.
- С этого момента инициируется POST-запрос в sa-logic. Trace ID должен быть проброшен из sa-web-app.
- …
Примечание: На 4 шаге приложение должно увидеть заголовки, сгенерированные Istio, и передать их в последующие запросы, как показано на изображении ниже:
(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. от переводчика
Читайте также в нашем блоге:
- «Назад к микросервисам вместе с Istio»: , ;
- «»;
- «»;
- «»;
- «».
Источник: habr.com
route:
- destination:
host: sa-frontend # 2
port:
number: 80
Xalên girîng:
- Ev Xizmeta Virtualê behsa daxwazên ku bi rê ve dibin http-dergeh;
- В
destinationXizmeta 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:
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î , 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.
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 :
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:
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:
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:
TraceId ji bo naskirina daxwazê tê bikar anînIstio 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 û 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:
Ev şop nîşan dide:
- 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.
- 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. ( - 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.)
- 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.
- Ji vê gavê û pê ve, daxwazek POST tê destpêkirin sa-mantiq. Nasnameya şopandinê divê ji were şandin sa-web-app.
- ...
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:
(A) Istio ji şandina sernivîsan berpirsiyar e; (B) Karûbar ji sernavan berpirsiyar inIstio 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 - 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. .
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ê): berê hatiye weşandin.
PS ji wergêr
Li ser bloga me jî bixwînin:
- "Bi Istio re vegere servîsên mîkro": , ;
- «»;
- «»;
- «»;
- «".
Source: www.habr.com














