Nota. transl.: Il-malji tas-servizz definittivament saru soluzzjoni rilevanti fl-infrastruttura moderna għall-applikazzjonijiet li jsegwu l-arkitettura tal-mikroservizz. Filwaqt li Istio jista 'jkun fuq fomm ħafna inġiniera DevOps, huwa prodott pjuttost ġdid li, filwaqt li huwa komprensiv f'termini tal-kapaċitajiet li jipprovdi, jista' jeħtieġ ammont sinifikanti ta 'żmien biex wieħed jiffamiljarizza ruħu miegħu. L-inġinier Ġermaniż Rinor Maloku, li huwa responsabbli għall-cloud computing għal klijenti kbar fil-kumpanija tat-telekomunikazzjoni Orange Networks, kiteb serje mill-isbaħ ta 'materjali li jippermettulek tgħaddas malajr u fil-fond f'Istio. Jibda l-istorja tiegħu b’dak li jista’ jagħmel Istio b’mod ġenerali u kif tista’ malajr taraha b’għajnejk.
Istio — Proġett Open Source żviluppat b'kollaborazzjoni ma' timijiet minn Google, IBM u Lyft. Issolvi l-kumplessitajiet li jinqalgħu fl-applikazzjonijiet ibbażati fuq mikroservizzi, bħal:
sigurtà: awtentikazzjoni u awtorizzazzjoni tal-utent finali;
Osservabbiltà: traċċar, monitoraġġ, illoggjar.
Dawn kollha jistgħu jiġu solvuti fil-livell tal-applikazzjoni, iżda wara s-servizzi tiegħek ma jibqgħux "mikro". L-isforz żejjed kollu biex issolvi dawn il-problemi huwa ħela ta 'riżorsi tal-kumpanija li jistgħu jintużaw direttament għall-valur tan-negozju. Ejja nħarsu lejn eżempju:
Maniġer tal-Proġett: Kemm iddum biex iżżid karatteristika ta' feedback?
Żviluppatur: Żewġ sprints.
MP: X'?.. Huwa biss GĦADD!
R: Li tagħmel CRUD hija l-parti faċli, iżda għad għandna bżonn nawtentikaw u nawtorizzaw l-utenti u s-servizzi. Peress li n-netwerk mhuwiex affidabbli, ser ikollok bżonn timplimenta talbiet ripetuti, kif ukoll mudell ta 'circuit breaker fil-klijenti. Ukoll, biex tiżgura li s-sistema kollha ma tiġġarrafx, ser ikollok bżonn timeouts u paratiji(għal aktar dettalji dwar iż-żewġ mudelli imsemmija, ara aktar tard fl-artiklu - trad. approx.), u sabiex jinstabu problemi, monitoraġġ, traċċar, […]
MP: Oh, allura ejja biss daħħal din il-karatteristika fis-servizz tal-Prodott.
Naħseb li l-idea hija ċara: l-ammont ta 'passi u sforz meħtieġ biex jiżdied servizz wieħed huwa enormi. F'dan l-artikolu, ser inħarsu lejn kif Istio tneħħi l-kumplessità kollha msemmija hawn fuq (li mhix maħsuba li tkun loġika tan-negozju) mis-servizzi.
Innota: Dan l-artikolu jassumi li għandek għarfien tax-xogħol ta' Kubernetes. Inkella, nirrakkomanda qari l-introduzzjoni tiegħi għal Kubernetes u wara biss kompli aqra dan il-materjal.
Istio idea
F’dinja mingħajr Istio, servizz wieħed jagħmel talbiet diretti lil ieħor, u f’każ ta’ falliment, is-servizz irid jieħu ħsiebu hu stess: jagħmel tentattiv ġdid, jipprovdi timeout, jiftaħ circuit breaker, eċċ.
Traffiku tan-netwerk f'Kubernetes
Istio joffri soluzzjoni speċjalizzata, kompletament separata mis-servizzi u li taħdem billi tinterferixxi mal-komunikazzjoni tan-netwerk. U għalhekk timplimenta:
tolleranza għall-ħsarat: Ibbażat fuq il-kodiċi tal-istatus fir-rispons, jifhem jekk it-talba fallietx u terġa' tesegwixxiha.
It-tnedija tal-Kanarji: jirridirezzjona biss perċentwal fiss ta' talbiet lejn il-verżjoni l-ġdida tas-servizz.
Monitoraġġ u metriċi: Kemm dam biex is-servizz iwieġeb?
Traċċar u Osservabbiltà: Iżżid headers speċjali għal kull talba u traċċahom madwar il-cluster.
sigurtà: Jiġbor it-token JWT, jawtentika u jawtorizza lill-utenti.
Dawn huma biss ftit mill-possibbiltajiet (verament ftit biss!) Li jqanqluk. Issa ejja ngħaddu fid-dettalji tekniċi!
Istio arkitettura
Istio jinterċetta t-traffiku kollu tan-netwerk u japplika sett ta 'regoli għalih, billi jdaħħal prokura intelliġenti fil-forma ta' kontenitur sidecar f'kull pod. Prokuri li jattivaw il-kapaċitajiet kollha jiffurmaw a Ajru tad-Data, u jistgħu jiġu kkonfigurati b'mod dinamiku bl-użu Pjan ta 'Kontroll.
Ajru tad-Data
Prokuri mdaħħla fil-miżwed jippermettu lil Istio biex tissodisfa faċilment ir-rekwiżiti li għandna bżonn. Pereżempju, ejja niċċekkjaw il-funzjonijiet mill-ġdid u tal-interruttur.
Kif jiġu implimentati mill-ġdid tentattivi u circuit breaking f'Envoy
Fil-qosor:
mibgħut (Qed nitkellmu dwar prokura li tinsab f'kontenitur sidecar, li huwa mqassam bħala prodott separat - madwar. trad.) jibgħat talba lill-ewwel istanza tas-servizz B u jonqos.
It-talba tonqos u tintbagħat lura lill-prokuratur li sejħilha.
Dan jiftaħ Circuit Breaker u jsejjaħ is-servizz li jmiss għal talbiet sussegwenti. (2)
Dan ifisser li m'għandekx għalfejn tuża librerija oħra Retry, m'għandekx għalfejn tagħmel l-implimentazzjoni tiegħek ta' Circuit Breaking u Service Discovery fil-lingwa ta 'programmar X, Y jew Z. Dan kollu u ħafna aktar huwa disponibbli barra mill-kaxxa. f'Istio u ma teħtieġx ebda bidliet fil-kodiċi.
Kbir! Issa forsi trid tmur fuq vjaġġ ma’ Istio, imma għad għandek xi dubji, mistoqsijiet miftuħa. Jekk din hija soluzzjoni universali għall-okkażjonijiet kollha fil-ħajja, allura għandek suspett naturali: wara kollox, is-soluzzjonijiet kollha bħal dawn fir-realtà jirriżultaw li mhumiex adattati għal kwalunkwe każ.
U fl-aħħar tistaqsi: "Huwa customizable?"
Issa int lest għall-vjaġġ bil-baħar, ejja niffamiljarizzaw ruħhom mal-Pjan ta 'Kontroll.
Pjan ta 'Kontroll
Tikkonsisti fi tliet komponenti: Pilota, Mixer и Citadel, li jaħdmu flimkien biex jiġu kkonfigurati l-Mibgħuta biex iwasslu t-traffiku, jinfurzaw il-politiki, u jiġbru data tat-telemetrija. Skematikament kollox jidher bħal dan:
Interazzjoni tal-Pjan ta' Kontroll mal-Pjan tad-Data
Mibgħuta (jiġifieri pjan tad-dejta) huma kkonfigurati bl-użu Kubernetes CRD (Definizzjonijiet tar-Riżorsi Doganali) definiti minn Istio u maħsuba speċifikament għal dan il-għan. Dak li jfisser għalik huwa li jidhru li huma biss riżors ieħor f'Kubernetes b'sintassi familjari. Ladarba tinħoloq, din ir-riżorsa tinġabar mill-ajruplan tal-kontroll u tiġi applikata lill-Mibgħuta.
Relazzjoni ta' servizzi lil Istio
Iddeskrivejna r-relazzjoni ta' Istio mas-servizzi, iżda mhux bil-maqlub: is-servizzi kif jirrelataw ma' Istio?
Biex inkun onest, is-servizzi huma konxji tal-preżenza ta' Istio daqskemm huma l-ħut tal-ilma meta jistaqsu lilhom infushom, "X'inhu l-ilma xorta waħda?"
Għalhekk, tista 'tieħu cluster ta' ħidma u wara li tuża l-komponenti Istio, is-servizzi li jinsabu fih se jkomplu jaħdmu, u wara li tneħħi dawn il-komponenti, kollox jerġa 'jkun tajjeb. Huwa ċar li f'dan il-każ inti titlef il-kapaċitajiet ipprovduti minn Istio.
Biżżejjed teorija - ejja npoġġu dan l-għarfien fil-prattika!
Istio fil-prattika
Istio jeħtieġ cluster Kubernetes b'mill-inqas 4 vCPUs u 8 GB ta 'RAM disponibbli. Biex twaqqaf malajr cluster u ssegwi l-istruzzjonijiet mill-artiklu, nirrakkomanda li tuża Google Cloud Platform, li toffri utenti ġodda b'xejn $300.
Wara li ħoloq cluster u kkonfigurat l-aċċess għal Kubernetes permezz tal-utilità tal-console, tista 'tinstalla Istio permezz tal-maniġer tal-pakkett Helm.
Installazzjoni tat-tmun
Installa l-klijent Helm fuq il-kompjuter tiegħek, kif deskritt fi dokumentazzjoni uffiċjali. Aħna se nużaw dan biex niġġeneraw mudelli għall-installazzjoni ta 'Istio fit-taqsima li jmiss.
Installazzjoni Istio
Niżżel ir-riżorsi Istio minn aħħar rilaxx(il-link tal-awtur oriġinali għall-verżjoni 1.0.5 nbidlet għal dik attwali, jiġifieri 1.0.6 - approx. trad.), estratti l-kontenut f'direttorju wieħed, li minn issa 'l quddiem se nsejjaħ [istio-resources].
Biex tidentifika faċilment ir-riżorsi Istio, oħloq namespace fil-cluster K8s istio-system:
$ kubectl create namespace istio-system
Imla l-installazzjoni billi tmur fid-direttorju [istio-resources] u tmexxi l-kmand:
Dan il-kmand joħroġ il-komponenti ewlenin ta 'Istio għal fajl istio.yaml. Aħna mmodifikajna l-mudell standard biex jixirqu lilna nfusna, billi speċifikaw il-parametri li ġejjin:
global.mtls.enabled installat fi false(jiġifieri l-awtentikazzjoni mTLS hija diżattivata - madwar)biex tissimplifika l-proċess tad-dating tagħna;
tracing.enabled jinkludi t-traċċar tat-talbiet bl-użu ta' Jaeger;
kiali.enabled jinstalla Kiali fi cluster biex jivviżwalizza s-servizzi u t-traffiku;
grafana.enabled jinstalla Grafana biex jivviżwalizza l-metriċi miġbura.
Ejja nużaw ir-riżorsi ġenerati bil-kmand:
$ kubectl apply -f istio.yaml
L-installazzjoni ta 'Istio fuq il-cluster hija kompluta! Stenna sakemm il-miżwed kollha jkunu fl-ispazju tal-isem istio-system se tkun kapaċi Running jew Completedbilli tmexxi l-kmand hawn taħt:
$ kubectl get pods -n istio-system
Issa aħna lesti li nkomplu fit-taqsima li jmiss, fejn se ndaħħlu l-applikazzjoni u taħdem.
Ejja nużaw l-eżempju tal-applikazzjoni tal-mikroservizz tal-Analiżi tas-Sentiment użata fl-imsemmi diġà Artiklu ta' introduzzjoni għal Kubernetes. Huwa kumpless biżżejjed biex juri l-kapaċitajiet ta 'Istio fil-prattika.
L-applikazzjoni tikkonsisti f'erba' mikroservizzi:
Servizz SA-Frontend, li jservi l-frontend ta 'applikazzjoni Reactjs;
Servizz SA-WebApp, li jservi mistoqsijiet dwar l-Analiżi tas-Sentiment;
Servizz SA-Feedback, li tirċievi feedback mill-utenti dwar l-eżattezza tal-analiżi.
F'din id-dijagramma, minbarra s-servizzi, naraw ukoll il-Kontrollur tad-Dħul, li f'Kubernetes iwassal it-talbiet deħlin għas-servizzi xierqa. Istio juża kunċett simili fi ħdan Ingress Gateway tiegħu, aktar dettalji dwaru se jsegwu.
Tmexxi applikazzjoni bi prokura minn Istio
Għal aktar operazzjonijiet imsemmija fl-artikolu, kklona r-repożitorju tiegħek istio-ħakma. Fiha l-applikazzjoni u l-manifesti għal Kubernetes u Istio.
Daħħal sidecars
L-inserzjoni tista 'ssir awtomatikament jew bl-idejn. Biex awtomatikament daħħal kontenituri sidecar, ser ikollok bżonn li tissettja tikketta għall-ispazju tal-isem istio-injection=enabled, li jsir bil-kmand li ġej:
Issa kull pod li se jiġi skjerat fl-ispazju tal-isem default (default) se tirċievi l-kontenitur sidecar tagħha. Biex tivverifika dan, ejja niskjeraw l-applikazzjoni tat-test billi tmur fid-direttorju tal-għeruq tar-repożitorju [istio-mastery] u tmexxi l-kmand li ġej:
$ 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
Wara li wżajt is-servizzi, ejja niċċekkjaw li l-imżiewed għandhom żewġ kontenituri (bis-servizz innifsu u s-sidecar tiegħu) billi tħaddem il-kmand kubectl get pods u tiżgura li taħt il-kolonna READY valur speċifikat 2/2, li jissimbolizzaw li ż-żewġ kontenituri qed jaħdmu:
$ 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
Viżwalment jidher bħal dan:
Prokura mibgħuta f'wieħed mill-imżiewed
Issa li l-applikazzjoni tkun qed taħdem, ser ikollna nħallu t-traffiku li jkun dieħel jidħol fl-applikazzjoni.
Ingress Gateway
L-aħjar prattika biex jinkiseb dan (jippermetti t-traffiku fil-cluster) hija permezz Ingress Gateway f'Istio, li jinsab fit-"tarf" tar-raggruppament u jippermettilek li tippermetti karatteristiċi ta 'Istio bħal rotta, ibbilanċjar tat-tagħbija, sigurtà u monitoraġġ għat-traffiku li jkun dieħel.
Il-komponent Ingress Gateway u s-servizz li jgħaddih esternament ġew installati fil-cluster waqt l-installazzjoni Istio. Biex issir taf l-indirizz IP estern tas-servizz, mexxi:
$ 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
Se nkomplu naċċessaw l-applikazzjoni billi nużaw din l-IP (se nirreferi għaliha bħala ESTERNI-IP), għalhekk għall-konvenjenza se nikteb il-valur f'varjabbli:
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
Jekk tipprova taċċessa din l-IP permezz ta' browser issa, tirċievi żball Servizz Mhux Disponibbli, għaliex b'mod awtomatiku Istio jimblokka t-traffiku kollu li jkun dieħel, Gateway għadu ma ġiex definit.
Riżorsa Gateway
Gateway huwa CRD (Custom Resource Definition) f'Kubernetes, definit wara l-installazzjoni ta' Istio fil-cluster u li jippermetti l-abbiltà li tispeċifika l-portijiet, il-protokoll u l-hosts li għalihom irridu nippermettu t-traffiku deħlin.
Fil-każ tagħna, irridu nippermettu traffiku HTTP fuq il-port 80 għall-hosts kollha. Il-kompitu huwa implimentat bid-definizzjoni li ġejja (http-gateway.yaml):
Din il-konfigurazzjoni ma teħtieġ l-ebda spjegazzjoni ħlief għas-selettur istio: ingressgateway. B'dan is-selettur nistgħu nispeċifikaw għal liema Ingress Gateway napplikaw il-konfigurazzjoni għalih. Fil-każ tagħna, dan huwa l-kontrollur Ingress Gateway, li kien installat awtomatikament f'Istio.
Il-konfigurazzjoni tiġi applikata billi ssejjaħ il-kmand li ġej:
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created
Il-portal issa jippermetti l-aċċess għall-port 80, iżda m'għandu l-ebda idea ta 'minn imexxi t-talbiet. Għal dan ser ikollok bżonn Servizzi Virtwali.
Riżors VirtualService
Il-VirtualService jgħid lill-Ingress Gateway kif id-direzzjoni tat-talbiet li huma permessi fi ħdan il-cluster.
It-talbiet lill-applikazzjoni tagħna li jiġu permezz ta' http-gateway għandhom jintbagħtu lis-servizzi sa-frontend, sa-web-app u sa-feedback:
Rotot li jeħtieġ li jiġu kkonfigurati ma VirtualServices
Ejja nħarsu lejn it-talbiet li għandhom jintbagħtu lil SA-Frontend:
Taqbila eżatta tul it-triq / għandha tintbagħat lil SA-Frontend biex tikseb index.html;
Mogħdijiet prefissati /static/* għandhom jintbagħtu lil SA-Frontend biex jirċievu fajls statiċi użati fil-frontend, bħal CSS u JavaScript;
Mogħdijiet imqabbla b'espressjoni regolari '^.*.(ico|png|jpg)$', għandhom jintbagħtu lil SA-Frontend, għaliex Dawn huma l-istampi murija fuq il-paġna.
Этот 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
… и откройте http://localhost:20001/, залогинившись под admin/admin. Здесь вы найдете множество полезных возможностей, например, для проверки конфигурации компонентов Istio, визуализации сервисов по информации, собранной при перехвате сетевых запросов, получения ответов на вопросы «Кто к кому обращается?», «У какой версии сервиса возникают сбои?» и т.п. В общем, изучите возможности Kiali перед тем, как двигаться дальше — к визуализации метрик с Grafana.
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, чтобы посмотреть на собранные метрики:
Здесь нас ждёт пустое и совершенно скучное представление — руководство никогда такое не одобрит. Давайте же создадим небольшую нагрузку следующей командой:
$ 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
Теперь зайдите на http://localhost:16686/ и выберите сервис sa-web-app. Если сервис не показан в выпадающем меню — проявите/сгенерируйте активность на странице и обновите интерфейс. После этого нажмите на кнопку Find Traces, которая покажет самые последние трейсы — выберите любой — покажется детализированная информация по всем трейсам:
Этот трейс показывает:
Запрос приходит в istio-ingressgateway (это первое взаимодействие с одним из сервисов, и для запроса генерируется Trace ID), после чего шлюз направляет запрос в сервис sa-web-app.
В сервисе sa-web-app запрос подхватывается Envoy sidecar'ом, создаётся «ребёнок» в span'е (поэтому мы видим его в трейсах) и перенаправляется в контейнер sa-web-app. (Span — логическая единица работы в Jaeger, имеющая название, время начало операции и её продолжительность. Span'ы могут быть вложенными и упорядоченными. Ориентированный ациклический граф из span'ов образует trace. — прим. перев.)
Здесь запрос обрабатывается методом sentimentAnalysis. Эти трейсы уже сгенерированы приложением, т.е. для них потребовались изменения в коде.
С этого момента инициируется POST-запрос в sa-logic. Trace ID должен быть проброшен из sa-web-app.
…
Примечание: На 4 шаге приложение должно увидеть заголовки, сгенерированные Istio, и передать их в последующие запросы, как показано на изображении ниже:
(A) За проброс заголовков отвечает Istio; (B) За заголовки отвечают сервисы
Istio делает основную работу, т.к. генерирует заголовки для входящих запросов, создаёт новые span'ы в каждом sidecare'е и пробрасывает их. Однако без работы с заголовками внутри сервисов полный путь трассировки запроса будет утерян.
Необходимо учитывать (пробрасывать) следующие заголовки:
Это несложная задача, однако для упрощения её реализации уже существует множество библиотек — например, в сервисе sa-web-app клиент RestTemplate пробрасывает эти заголовки, если просто добавить библиотеки Jaeger и OpenTracing в его зависимости.
Заметьте, что приложение Sentiment Analysis демонстрирует реализации на Flask, Spring и ASP.NET Core.
Теперь, когда стало ясно, что мы получаем из коробки (или почти «из коробки»), рассмотрим вопросы тонко настраиваемой маршрутизации, управления сетевым трафиком, безопасности и т.п.!
Прим. перев.: об этом читайте в следующей части материалов по Istio от Rinor Maloku, переводы которых последуют в нашем блоге в ближайшее время. UPDATE (14 марта): Вторая часть уже опубликована.
Dan is-Servizz Virtwali jirreferi għal talbiet li jiġu http-gateway;
В destination Is-servizz li lejh jintbagħtu t-talbiet huwa determinat.
Innota: Il-konfigurazzjoni ta' hawn fuq hija maħżuna f'fajl sa-virtualservice-external.yaml, li fih ukoll settings għar-routing f'SA-WebApp u SA-Feedback, iżda tqassar hawn fl-artiklu għall-qosor.
Ejja napplikaw VirtualService billi ċċempel:
Innota: Meta nikkunsmaw ir-riżorsi Istio, is-Server API Kubernetes joħloq avveniment li jiġi riċevut mill-Pjan ta 'Kontroll Istio, u wara dan il-konfigurazzjoni l-ġdida tiġi applikata għall-prokuri tal-Envoy ta' kull pod. U l-kontrollur tal-Ingress Gateway jidher li huwa Mibgħut ieħor konfigurat fil-Pjan ta 'Kontroll. Dan kollu jidher bħal dan fid-dijagramma:
Applikazzjoni Analiżi Sentiment issa hija disponibbli fuq http://{EXTERNAL-IP}/. Tinkwetax jekk ikollok status Mhux misjub: Xi drabi tieħu ftit itwal biex il-konfigurazzjoni tidħol fis-seħħ u l-caches tal-Envoy biex jaġġornaw.
Qabel ma tipproċedi, ilgħab ftit bl-app biex tiġġenera t-traffiku. (il-preżenza tagħha hija meħtieġa għaċ-ċarezza f'azzjonijiet sussegwenti - madwar trad.).
Kiali: osservabilità
Biex tasal għall-interface amministrattiva Kiali, mexxi l-kmand li ġej:
... u miftuħa http://localhost:20001/, tidħol bħala admin/admin. Hawnhekk issib ħafna karatteristiċi utli, pereżempju, biex tiċċekkja l-konfigurazzjoni tal-komponenti Istio, tivisualizza s-servizzi billi tuża informazzjoni miġbura mill-interċettazzjoni tat-talbiet tan-netwerk, tikseb tweġibiet għall-mistoqsijiet "Min qed jikkuntattja lil min?", "Liema verżjoni tas-servizz qed tesperjenza. fallimenti?” u l-bqija. B'mod ġenerali, esplora l-kapaċitajiet ta 'Kalii qabel ma tgħaddi għall-viżwalizzazzjoni tal-metriċi ma' Grafana.
Grafana: viżwalizzazzjoni metrika
Il-metriċi miġbura f'Istio jidħlu fi Prometheus u jiġu viżwalizzati ma' Grafana. Biex tasal għall-interface amministrattiva Grafana, mexxi l-kmand hawn taħt u mbagħad iftaħ http://localhost:3000/:
Ikklikkja fuq il-menu home fuq ix-xellug u l-għażla Istio Service Dashboard fir-rokna tax-xellug ta 'fuq, ibda bis-servizz sa-web-appbiex tħares lejn il-metriċi miġbura:
Dak li jistenniena hawn huwa prestazzjoni vojta u kompletament boring - il-maniġment qatt mhu se japprova dan. Ejja noħolqu tagħbija żgħira bil-kmand li ġej:
Issa għandna graffs ferm isbaħ, u minbarra dawn, għodod mill-isbaħ Prometheus għall-monitoraġġ u Grafana għall-viżwalizzazzjoni tal-metriċi li jippermettulna nitgħallmu dwar il-prestazzjoni, is-saħħa, titjib / degradazzjoni fis-servizzi maż-żmien.
Fl-aħħarnett, ejja nħarsu lejn it-talbiet tat-traċċar fis-servizzi.
Jaeger: traċċar
Ikollna bżonn it-traċċar għax aktar ma jkollna servizzi, iktar ikun diffiċli li naslu għall-kawża tal-falliment. Ejja nħarsu lejn każ sempliċi mill-istampa hawn taħt:
Eżempju tipiku ta' talba falluta każwali
It-talba tiġi, taqa - x'inhi r-raġuni? L-ewwel servizz? Jew it-tieni waħda? Hemm eċċezzjonijiet fit-tnejn - ejja nħarsu lejn ir-zkuk ta 'kull wieħed. Kemm-il darba qbadt lilek innifsek tagħmel dan? Ix-xogħol tagħna huwa aktar bħal ditektifs tas-softwer milli żviluppaturi...
Din hija problema komuni fil-mikroservizzi u tissolva permezz ta 'sistemi ta' traċċar distribwiti, li fihom is-servizzi jgħaddu header uniku lil xulxin, u wara din l-informazzjoni tintbagħat lis-sistema ta 'traċċar, fejn titqabbel mad-dejta tat-talba. Hawn illustrazzjoni:
TraceId jintuża biex jidentifika t-talba
Istio juża Jaeger Tracer, li jimplimenta l-qafas tal-API OpenTracing indipendenti mill-bejjiegħ. Tista' taċċessa l-interface tal-utent Jaeger bil-kmand li ġej:
Issa mur http://localhost:16686/ u agħżel servizz sa-web-app. Jekk is-servizz ma jintwerax fil-menu drop-down, uri/iġġenera attività fuq il-paġna u aġġorna l-interface. Wara dan, ikklikkja fuq il-buttuna Sib Traċċi, li se turi l-aħħar traċċi - agħżel kwalunkwe - se tidher informazzjoni dettaljata dwar it-traċċi kollha:
Din it-traċċa turi:
It-talba tidħol istio-ingressgateway (din hija l-ewwel interazzjoni ma 'wieħed mis-servizzi, u Trace ID tiġi ġġenerata għat-talba), wara li l-gateway jibgħat it-talba lis-servizz sa-web-app.
Fis-servizz sa-web-app it-talba tinġabar mis-sidecar tal-Envoy, tinħoloq "tifel" fil-medda (għalhekk narawha fit-traċċi) u ridiretta lejn il-kontenitur sa-web-app. (Span - unità loġika tax-xogħol f'Jaeger, li għandha isem, il-ħin tal-bidu tal-operazzjoni u t-tul tagħha. Spans jistgħu jiġu nested u ordnati. Grafika aċiklika diretta ta 'firxiet tifforma traċċa. — madwar. trad.)
Hawnhekk it-talba tiġi pproċessata bil-metodu sentimentAnaliżi. Dawn it-traċċi diġà huma ġġenerati mill-applikazzjoni, i.e. kienu jeħtieġu bidliet fil-kodiċi.
Minn dan il-mument 'il quddiem, tinbeda talba POST fi sa-loġika. Traċċa ID trid tintbagħat minn sa-web-app.
...
Innota: Fil-pass 4, l-applikazzjoni għandha tara l-intestaturi ġġenerati minn Istio u tgħaddihom għal talbiet sussegwenti kif muri fl-immaġni hawn taħt:
(A) Istio huwa responsabbli biex jibgħat headers; (B) Is-servizzi huma responsabbli għall-headers
Istio jagħmel ħafna mix-xogħol għax... jiġġenera headers għal talbiet deħlin, joħloq medda ġdida f'kull sidecare u jgħaddihom. Madankollu, mingħajr ma taħdem ma 'headers ġewwa s-servizzi, il-mogħdija sħiħa tat-traċċa tat-talba tintilef.
Għandhom jitqiesu l-intestaturi li ġejjin:
Din mhix kompitu diffiċli, iżda biex tissimplifika l-implimentazzjoni tagħha diġà hemm ħafna libreriji - pereżempju, fis-servizz sa-web-app, il-klijent RestTemplate jgħaddi dawn l-intestaturi jekk sempliċement iżżid il-libreriji Jaeger u OpenTracing ma' il-vizzji tiegħu.
Innota li l-applikazzjoni tal-Analiżi tas-Sentiment turi implimentazzjonijiet f'Flask, Spring, u ASP.NET Core.
Issa li huwa ċar dak li noħorġu mill-kaxxa (jew kważi barra mill-kaxxa), ejja nħarsu lejn ir-rotot irfinat, il-ġestjoni tat-traffiku tan-netwerk, is-sigurtà, eċċ.!
Nota. transl.: Aqra dwar dan fil-parti li jmiss tal-materjali dwar Istio minn Rinor Maloku, it-traduzzjonijiet tagħhom se jsegwu fuq il-blog tagħna fil-futur qarib. UPDATE (14 ta' Marzu): It-tieni parti diġà ġie ppubblikat.