Komawa microservices tare da Istio. Kashi na 1

Komawa microservices tare da Istio. Kashi na 1

Lura. fassara: Ƙungiyoyin sabis ɗin tabbas sun zama batu mai zafi a cikin abubuwan more rayuwa na yau don aikace-aikacen da ke biyo bayan gine-ginen microservice. Duk da yake Istio na iya kasancewa akan radar na injiniyoyin DevOps da yawa, sabon samfuri ne na gaskiya wanda, yayin da mai rikitarwa dangane da abubuwan da yake bayarwa, na iya ɗaukar lokaci mai yawa don sanin. Injiniyan Jamus Rinor Maloku, wanda ke kula da ƙididdigar girgije don manyan abokan ciniki a kamfanin sadarwa na Orange Networks, ya rubuta jerin abubuwan ban mamaki waɗanda ke ba ku damar shiga cikin sauri da zurfi cikin Istio. Ya fara labarinsa da abin da Istio zai iya yi da kuma yadda za ku iya gani da sauri da idanunku.

Istio - Open Source-Project, wanda aka haɓaka tare da haɗin gwiwar ƙungiyoyi daga Google, IBM da Lyft. Yana warware rikitattun abubuwan da suka taso a aikace-aikace dangane da microservices, misali, kamar:

  • sarrafa zirga-zirga: ƙarewar lokaci, sake gwadawa, daidaita nauyi;
  • Tsaro: ƙarshen ingantaccen mai amfani da izini;
  • lura: ganowa, saka idanu, shiga.

Ana iya warware su duka a matakin aikace-aikacen, duk da haka bayan haka ayyukan ku ba za su ƙara zama "micro". Duk ƙarin ƙoƙarin magance waɗannan batutuwa shine ɓarnawar albarkatun kamfani waɗanda za a iya amfani da su kai tsaye don ƙimar kasuwanci. Yi la'akari da misali:

Manajan Ayyuka: Tsawon wane lokaci ake ɗauka don ƙara fasalin amsawa?
Developer: Biyu sprints.

MP: Me?... CRUD ce kawai!
R: Yin CRUD shine mafi sauƙi na aikin, amma har yanzu muna buƙatar tantancewa da ba da izini ga masu amfani da sabis. Tun da cibiyar sadarwar ba ta da tabbas, za ku buƙaci aiwatar da buƙatun maimaitawa, da kuma tsarin mai watsewa a cikin abokan ciniki. Har ila yau, don tabbatar da cewa duk tsarin bai fado ba, lokutan ƙarewa da kugiya (Don ƙarin bayani kan alamu biyu da aka ambata, duba daga baya a cikin labarin - kusan transl.), kuma don gano matsaloli, saka idanu, ganowa, […]

MP: Oh, bari kawai mu sanya wannan fasalin a cikin sabis ɗin Samfurin sannan.

Ina tsammanin ra'ayin ya fito fili: yawan matakai da ƙoƙarin da ake buƙata don ƙara sabis guda ɗaya yana da girma. A cikin wannan labarin, za mu kalli yadda Istio ke kawar da duk abubuwan da aka ambata a sama (ba a yi niyya ta dabarun kasuwanci ba) daga sabis.

Komawa microservices tare da Istio. Kashi na 1

Примечание: Labarin yana ɗauka cewa kuna da ilimin aiki na Kubernetes. In ba haka ba, ina ba da shawarar karantawa gabatarwa na zuwa Kubernetes sai kawai a ci gaba da karanta wannan labarin.

Istio ra'ayin

A cikin duniyar da ba tare da Istio ba, sabis ɗaya yana yin buƙatun kai tsaye zuwa wani, kuma idan ya gaza, sabis ɗin dole ne ya sarrafa shi da kansa: yin sabon ƙoƙari, samar da lokacin ƙarewa, buɗe mai watsewar kewayawa, da sauransu.

Komawa microservices tare da Istio. Kashi na 1
zirga-zirgar hanyar sadarwa a cikin Kubernetes

Istio, a gefe guda, yana ba da bayani na musamman wanda ya bambanta da ayyuka da ayyuka ta hanyar yin kutse tare da hulɗar cibiyar sadarwa. Kuma ta haka ne yake aiwatar da:

  • hakuri da laifi: bisa ga lambar matsayi a cikin martani, yana fahimtar idan buƙatar ta gaza kuma ta sake ƙaddamar da shi.
  • Canary Rollouts: yana tura ƙayyadaddun kaso na buƙatun kawai zuwa sabon sigar sabis ɗin.
  • Kulawa da Ma'auni: yaushe aka ɗauki sabis ɗin don amsawa?
  • Bincikowa da lura: Yana ƙara kanun labarai na musamman ga kowane buƙatu kuma yana gano su a cikin gungu.
  • Tsaro: Yana dawo da alamar JWT, yana tabbatarwa da ba da izini ga masu amfani.

Waɗannan kaɗan ne daga cikin yuwuwar (da gaske kaɗan!) don burge ku. Yanzu bari mu nutse cikin bayanan fasaha!

Gine-gine

Istio yana katse duk zirga-zirgar hanyar sadarwa kuma yana aiwatar da saitin dokoki zuwa gare shi, yana saka wakili mai wayo a cikin nau'in akwati na gefe a cikin kowane kwafsa. Wakilan da ke kunna duk dama sun kasance a Jirgin Data, kuma ana iya daidaita su da ƙarfi tare da Jirgin Kulawa.

Jirgin Data

Wakilan da aka saka a cikin kwas ɗin suna ba Istio damar cimma buƙatun da muke buƙata cikin sauƙi. Misali, bari mu duba aikin sake gwadawa da na'ura mai karyawa.

Komawa microservices tare da Istio. Kashi na 1
Yadda ake aiwatar da sakewa da watsewa a cikin Manzo

Don taƙaitawa:

  1. Wakilin (muna magana ne game da wakili a cikin akwati na gefen mota, wanda aka rarraba da kuma yadda samfur daban - kimanin. fassara) aika buƙatu zuwa misalin farko na sabis na B kuma ya kasa.
  2. Manzo Sidecar yana sake gwadawa (sake gwadawa). (1)
  3. Ana mayar da buƙatar da ta gaza zuwa ga wakili wanda ya kira ta.
  4. Wannan yana buɗe Mai Breaker kuma ya kira sabis na gaba don buƙatun na gaba. (2)

Wannan yana nufin cewa ba lallai ne ku yi amfani da ɗakin karatu na Sake gwadawa na gaba ba, ba lallai ne ku yi naku aiwatar da naku aiwatar da Breaking Breaking and Service Discovery a cikin yaren shirye-shiryen X, Y ko Z ba. Duk waɗannan da ƙari suna samuwa daga cikin akwatin a cikin Istio kuma baya buƙatar babu code canje-canje.

Mai girma! Yanzu kuna iya son tafiya tafiya tare da Istio, amma har yanzu akwai wasu shakku, buɗe tambayoyin. Idan wannan shine mafita na duniya ga kowane lokaci na rayuwa, to, kuna da zato na halal: bayan haka, duk irin waɗannan mafita ba su dace da kowane hali ba.

Kuma a ƙarshe kuna tambaya: "Shin ana iya daidaita shi?"

Yanzu kun shirya don balaguron teku - kuma bari mu saba da Jirgin Jirgin Sama.

Jirgin Kulawa

Ya ƙunshi abubuwa uku: pilot, Mahaɗa и kagara, wanda tare ke daidaita manzanni don tafiyar da zirga-zirga, aiwatar da manufofi, da tattara bayanan telemetry. A tsari, duk ya yi kama da haka:

Komawa microservices tare da Istio. Kashi na 1
Mu'amalar Jirgin Kula da Jirgin Bayanai

An daidaita wakilai (wato jirgin sama) da Kubernetes CRD (Ma'anar Ma'anar Albarkatun Al'ada) wanda Istio ya bayyana kuma an tsara shi musamman don wannan dalili. Abin da wannan ke nufi a gare ku shi ne cewa su ne kawai wani hanya a Kubernetes tare da saba syntax. Da zarar an ƙirƙira, jirgin sama mai sarrafawa zai karɓi wannan albarkatun kuma a yi amfani da shi ga Manzo.

Dangantakar ayyuka da Istio

Mun bayyana dangantakar Istio da ayyuka, amma ba akasin haka ba: ta yaya ayyuka ke da alaƙa da Istio?

A gaskiya, ayyuka sun san game da kasancewar Istio kamar yadda kifi ya san game da ruwa, lokacin da suka tambayi kansu: "Mene ne ruwa ko ta yaya?".

Komawa microservices tare da Istio. Kashi na 1
Misali Victoria Dimitakopoulos: Yaya kuke son ruwan? - Menene ruwa duk da haka?

Don haka, zaku iya ɗaukar gungu mai aiki kuma bayan ƙaddamar da abubuwan Istio, sabis ɗin da ke ciki zai ci gaba da aiki, kuma bayan cire waɗannan abubuwan, komai zai sake yin kyau. A bayyane yake cewa a cikin wannan yanayin za ku rasa damar da Istio ya bayar.

Isasshen ka'idar - bari mu sanya wannan ilimin a aikace!

Istio a aikace

Istio yana buƙatar gungu na Kubernetes tare da aƙalla 4 vCPUs da 8 GB na RAM akwai. Don ɗaga gungu da sauri kuma bi umarnin daga labarin, Ina ba da shawarar amfani da Google Cloud Platform, wanda ke ba da sabbin masu amfani. kyauta $300.

Bayan ƙirƙirar gungu da saita damar zuwa Kubernetes ta hanyar kayan aikin wasan bidiyo, zaku iya shigar da Istio ta mai sarrafa kunshin Helm.

Shigar da Helm

Shigar da abokin ciniki Helm a kan kwamfutarka kamar yadda aka bayyana a ciki takardun shaida. Za mu yi amfani da shi don samar da samfura don shigar da Istio a cikin sashe na gaba.

Shigarwa

Zazzage albarkatun Istio daga sabuwar saki (An canza hanyar haɗin tushen marubucin zuwa sigar 1.0.5 zuwa na yanzu, watau 1.0.6 - kusan fassarar.), Cire abubuwan da ke ciki zuwa directory guda ɗaya, wanda zan yi magana da shi azaman [istio-resources].

Don sauƙin ganewa na albarkatun Istio, ƙirƙiri filin suna a cikin gungu na K8s istio-system:

$ kubectl create namespace istio-system

Kammala shigarwa ta hanyar kewayawa zuwa kundin adireshi [istio-resources] da gudanar da umarni:

$ 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

Wannan umarnin zai fitar da mahimman abubuwan Istio zuwa fayil istio.yaml. Mun gyara madaidaicin samfurin don kanmu ta hanyar ƙididdige sigogi masu zuwa:

  • global.mtls.enabled shigar a ciki false (watau mTLS tantancewar ba a kashe - kusan transl.)don sauƙaƙa tsarin saduwa da mu;
  • tracing.enabled yana ba da damar neman nema tare da Jaeger;
  • kiali.enabled shigar da Kiali cikin gungu don ganin ayyuka da zirga-zirga;
  • grafana.enabled shigar da Grafana don ganin ma'aunin da aka tattara.

Aiwatar da albarkatun da aka samar tare da umarni:

$ kubectl apply -f istio.yaml

Shigar da Istio a cikin gungu ya cika! Jira har sai duk kwasfan fayiloli a cikin sarari suna istio-system zai iya Running ko Completedta hanyar aiwatar da umarnin da ke ƙasa:

$ kubectl get pods -n istio-system

Yanzu mun shirya don ci gaba zuwa sashe na gaba, inda za mu tada da gudanar da aikace-aikacen.

Gine-gine na Aikace-aikacen Binciken Hankali

Bari mu yi amfani da misalin aikace-aikacen Binciken Ƙaƙwalwar Ƙira da aka yi amfani da shi a cikin wanda aka riga aka ambata Labarin Gabatarwa zuwa Kubernetes. Yana da hadaddun isa don nuna yuwuwar Istio a aikace.

Aikace-aikacen ya ƙunshi microservices guda huɗu:

  1. sabis SA-Frontend, wanda ke aiki da aikace-aikacen gaba-gaba akan Reactjs;
  2. sabis SA WebApp, wanda ke ba da tambayoyin Nazarin Hankali;
  3. sabis SA Logicwanda yayi kanta nazarin tunani;
  4. sabis SA Feedback, wanda ke karɓar ra'ayi daga masu amfani akan daidaiton binciken da aka yi.

Komawa microservices tare da Istio. Kashi na 1

A cikin wannan zane, ban da ayyuka, muna kuma ganin Ingress Controller, wanda a cikin Kubernetes hanyoyin buƙatun shigowa zuwa sabis masu dacewa. Istio yana amfani da irin wannan ra'ayi a matsayin ɓangare na Ƙofar Ingress, wanda cikakkun bayanai za su biyo baya.

Ƙaddamar da aikace-aikace tare da wakili daga Istio

Don ƙarin ayyuka da aka ambata a cikin labarin, rufe wurin ajiyar ku istio-masarauta. Ya ƙunshi aikace-aikacen kuma yana bayyana don Kubernetes da Istio.

Saka motocin gefe

Ana iya shigar da shi ta atomatik ko da hannu. Don saka kwantenan mota ta atomatik, kuna buƙatar saita lakabin zuwa filin suna istio-injection=enabled, wanda aka yi ta hanyar umarni mai zuwa:

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

Yanzu kowane kwas ɗin da za a tura a cikin tsoho sunaye (default) zai samu kwandon motar sa. Don tabbatar da wannan, bari mu tura aikace-aikacen gwaji ta hanyar zuwa tushen directory na ma'ajiyar [istio-mastery] kuma yana gudanar da umarni mai zuwa:

$ 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

Bayan ƙaddamar da ayyukan, duba cewa kwas ɗin suna da kwantena biyu (tare da sabis ɗin kanta da motar gefensa) ta hanyar aiwatar da umarnin. kubectl get pods da kuma tabbatar da cewa a karkashin shafi READY ƙimar da aka ƙayyade 2/2, alamar cewa duka kwantena suna gudana:

$ 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

A gani yana kama da haka:

Komawa microservices tare da Istio. Kashi na 1
Wakilin wakili a ɗaya daga cikin kwas ɗin

Yanzu da aikace-aikacen ya ƙare kuma yana aiki, muna buƙatar ba da izinin zirga-zirga masu shigowa don shigar da aikace-aikacen.

Ingress Gateway

Mafi kyawun aiki don cimma wannan (ba da izinin zirga-zirga a cikin tari) shine ta hanyar Ingress Gateway a cikin Istio, wanda yake a "gefen" na gungu kuma yana ba ku damar ba da damar abubuwan Istio irin su kewayawa, daidaita kaya, tsaro, da saka idanu don zirga-zirgar shigowa.

Bangaren Ƙofar Ƙofar Ingress da sabis ɗin da ke tura shi waje an shigar dasu akan gungu yayin shigarwar Istio. Don gano adireshin IP na waje na sabis, gudanar:

$ 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

Za mu ci gaba da shiga aikace-aikacen ta amfani da wannan IP (Zan mayar da shi azaman EXTERNAL-IP), don haka don dacewa, za mu rubuta ƙimar zuwa mai canzawa:

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

Idan kun yi ƙoƙarin samun damar wannan IP ta hanyar burauza yanzu, zaku sami kuskuren da ba ya samuwa, saboda ta tsohuwa Istio yana toshe duk zirga-zirga masu shigowahar sai an ayyana Gateway.

Albarkatun Gateway

Ƙofar ita ce CRD (Ma'anar Ma'anar Albarkatun Al'ada) a cikin Kubernetes, wanda aka bayyana bayan shigar da Istio a cikin tari kuma yana ba da damar tantance tashar jiragen ruwa, yarjejeniya, da runduna waɗanda muke son ba da izinin zirga-zirga masu shigowa.

A cikin yanayinmu, muna son ba da izinin zirga-zirgar HTTP akan tashar jiragen ruwa 80 ga duk runduna. Ana gane matsalar ta ma'anar mai zuwa (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:
- "*"

Wannan daidaitawar ba ta buƙatar bayani sai ga mai zaɓe istio: ingressgateway. Tare da wannan zaɓaɓɓen, za mu iya ƙayyade wace Ƙofar Ingress don amfani da saitin zuwa. A cikin yanayinmu, wannan shine Mai sarrafa Ƙofar Ƙofar Ingress, wanda aka shigar ta tsohuwa a cikin Istio.

Ana amfani da tsarin ta hanyar kiran umarni mai zuwa:

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

Ƙofar yanzu tana ba da damar shiga tashar jiragen ruwa 80 amma ba ta da masaniyar inda za a bi da buƙatun. Don wannan za ku buƙaci Ayyukan Sabis.

Albarkatun Sabis na Virtual

Sabis na Virtual yana gaya wa Ƙofar Ingress yadda ake gudanar da buƙatun da aka yarda a cikin tari.

Bukatun aikace-aikacenmu da ke zuwa ta hanyar http-gateway dole ne a aika zuwa sa-frontend, sa-web-app da sabis na sa-feedback:

Komawa microservices tare da Istio. Kashi na 1
Hanyoyin da za a daidaita su tare da VirtualServices

Yi la'akari da buƙatun da yakamata a aika zuwa SA-Frontend:

  • Daidai wasa a hanya / yakamata a aika zuwa SA-Frontend don samun index.html;
  • Hanyoyi tare da prefix /static/* ya kamata a aika zuwa SA-Frontend don samun fayilolin da aka yi amfani da su a gaban gaba, kamar CSS da JavaScript;
  • Hanyoyin da suka dace da magana ta yau da kullum '^.*.(ico|png|jpg)$', dole ne a aika zuwa SA-Frontend, saboda Waɗannan hotunan ne da aka nuna akan shafin.

Ana samun aiwatarwa ta hanyar daidaitawa mai zuwa (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

Mahimman bayanai:

  1. Wannan Sabis na Virtual yana nufin buƙatun da ke zuwa http-kofar;
  2. В destination yana bayyana sabis ɗin da aka aika buƙatun zuwa gare shi.

Примечание: An adana tsarin da ke sama a cikin fayil sa-virtualservice-external.yaml, wanda kuma ya ƙunshi saitunan don turawa zuwa SA-WebApp da SA-Feedback, amma an gajarta a nan a cikin labarin don taƙaitawa.

Aiwatar da VirtualService ta kira:


Примечание: Lokacin da muka yi amfani da albarkatun Istio, Kubernetes API Server yana ƙone wani taron da Istio Control Plane ya karɓa, kuma bayan haka, ana amfani da sabon tsari ga kowane wakili na wakili na pod. Kuma mai kula da Ƙofar Ƙofar Ingress ya bayyana kamar wani Manzo ne da aka saita a cikin Jirgin Sarrafa. Duk wannan yayi kama da haka a cikin zane:

Komawa microservices tare da Istio. Kashi na 1
Daidaitawar Istio-IngressGateway don tukin buƙatun

Ana Analysis Analysis yanzu akan http://{EXTERNAL-IP}/. Kada ku damu idan kun sami matsayin Ba a samo ku ba: wani lokacin yana ɗaukar ɗan lokaci kaɗan don daidaitawa ya fara aiki kuma don sabunta cache na Wakilin.

Kafin ci gaba, yi ɗan wasa tare da aikace-aikacen don samar da zirga-zirga (kasancewar sa yana da mahimmanci don bayyanawa a cikin ayyuka masu zuwa - kusan transl.).

Kiali: lura

Don zuwa wurin mai sarrafa Kiali, gudanar da umarni mai zuwa:


…da budewa http://localhost:20001/ta hanyar shiga as admin/admin. Anan zaku sami fa'idodi da yawa masu amfani, misali, don bincika daidaitawar abubuwan haɗin Istio, duba ayyukan sabis daga bayanan da aka tattara ta hanyar satar buƙatun cibiyar sadarwa, samun amsoshin tambayoyin "Wane ne yake tuntuɓar wa?", "Wace sigar sabis ɗin ke fuskantar. kasawa?” da sauransu. Gabaɗaya, bincika yuwuwar Kiali kafin a ci gaba zuwa hango ma'auni tare da Grafana.

Komawa microservices tare da Istio. Kashi na 1

Grafana: hangen nesa na awo

Ma'auni da aka tattara a cikin Istio sun ƙare a cikin Prometheus kuma ana ganin su tare da Grafana. Don zuwa wurin mai sarrafa Grafana, gudanar da umarnin da ke ƙasa, sannan buɗe http://localhost:3000/:


Ta danna menu Gida saman hagu kuma zaɓi Dashboard Sabis na Istio a saman kusurwar hagu, fara da sabis sa-web-appdon duba ma'aunin da aka tattara:

Komawa microservices tare da Istio. Kashi na 1

Anan muna jiran aikin fanko kuma gabaɗaya mai ban sha'awa - gudanarwa ba zai taɓa yarda da wannan ba. Bari mu ƙirƙiri ƙaramin kaya tare da umarni mai zuwa:


Yanzu muna da mafi kyawun zane-zane, kuma ban da su, kayan aikin ban mamaki na Prometheus don saka idanu da Grafana don hangen nesa na awo, wanda zai ba mu damar koyo game da aiki, matsayin lafiya, haɓakawa / lalata ayyuka a kan lokaci.

A ƙarshe, bari mu duba neman nema a cikin ayyuka.

Jaeger: bibiya

Za mu buƙaci ganowa, saboda yawan sabis ɗin da muke da shi, yana da wahala mu isa ga dalilin gazawar. Bari mu kalli ƙara mai sauƙi daga hoton da ke ƙasa:

Komawa microservices tare da Istio. Kashi na 1
Misali na yau da kullun na buƙatar gazawar bazuwar

Buƙatar ta zo, ta faɗi - menene dalili? Sabis na farko? Ko na biyu? Akwai keɓancewa a cikin duka biyun - bari mu kalli tarihin kowannensu. Sau nawa ka kama kanka kana yin wannan? Aikinmu ya fi kama masu binciken software fiye da masu haɓakawa…

Wannan matsala ce da ta yadu a cikin ƙananan ayyuka kuma ana magance ta ta hanyar rarraba tsarin ganowa, wanda sabis ke ba da wani rubutu na musamman ga juna, bayan haka ana tura wannan bayanin zuwa tsarin ganowa, inda aka kwatanta shi da bayanan buƙatun. Ga misali:

Komawa microservices tare da Istio. Kashi na 1
Ana amfani da TraceId don gano buƙatar

Istio yana amfani da Jaeger Tracer, wanda ke aiwatar da tsarin API na OpenTracing mai cin gashin kansa. Kuna iya samun dama ga mai amfani da Jaeger tare da umarni mai zuwa:


Yanzu je zuwa http://localhost:16686/ kuma zaɓi sabis sa-web-app. Idan ba a nuna sabis ɗin a cikin menu na zaɓuka ba, nuna/samar da ayyuka akan shafi kuma sabunta dubawar. Bayan haka danna maɓallin Nemo alamu, wanda zai nuna alamun kwanan nan - zaɓi kowane - cikakken bayani akan duk alamun zai bayyana:

Komawa microservices tare da Istio. Kashi na 1

Wannan alamar ta nuna:

  1. Bukatar ta shigo istio-ingressgateway (wannan shine farkon hulɗa tare da ɗayan sabis ɗin, kuma ana samar da ID na Trace don buƙatar), bayan haka ƙofar ta aika da buƙatar zuwa sabis ɗin. sa-web-app.
  2. A cikin sabis sa-web-app Motar jakada ce ta dauko buƙatun, an ƙirƙiri “yaro” a cikin tazarar (shi ya sa muke ganin ta a cikin burbushi) kuma a tura shi cikin akwati. sa-web-app. (span - sashin aiki mai ma'ana a cikin Jaeger, yana da suna, farkon lokacin aiki da tsawon sa. Za a iya yin gida da yin oda. jadawali acyclic jadawali na spans yana samar da alama. - kimanin. fassara)
  3. Anan ana sarrafa buƙatar ta hanyar sentimentAnalysis. An riga an samar da waɗannan alamun ta hanyar aikace-aikacen, watau. sun buƙaci canje-canjen code.
  4. Daga wannan lokacin, an fara buƙatar POST a ciki sa-hankali. Dole ne a aika da ID na alama daga sa-web-app.
  5. ...

Примечание: A mataki na 4, aikace-aikacen ya kamata ya ga rubutun da Istio ya samar kuma ya wuce su zuwa buƙatun na gaba, kamar yadda aka nuna a hoton da ke ƙasa:

Komawa microservices tare da Istio. Kashi na 1
(A) Gabatar da kai alhakin Istio ne; (B) Ayyuka suna da alhakin buga kai

Istio yana yin mafi yawan aikin saboda yana haifar da kanun labarai don buƙatun masu shigowa, yana ƙirƙirar sabbin tazara a cikin kowane kulawar gefe kuma yana tura su. Koyaya, ba tare da aiki tare da masu kai hari a cikin sabis ba, cikakken hanyar neman buƙatun za a rasa.

Dole ne a yi la'akari da masu rubutun kai (a gaba):


Wannan aiki ne mai sauƙi, amma don sauƙaƙe aiwatar da shi, akwai riga dakunan karatu da yawa - alal misali, a cikin sabis na sa-web-app, abokin ciniki na RestTemplate yana tura waɗannan kanun labarai idan kawai ka ƙara ɗakunan karatu na Jaeger da OpenTracing zuwa dogararsa.

Lura cewa aikace-aikacen Binciken Sentiment yana nuna aiwatarwa a cikin Flask, Spring, da ASP.NET Core.

Yanzu da ya bayyana a fili abin da muke samu daga cikin akwatin (ko kusan daga cikin akwatin), bari mu kalli tsarin daidaitawa mai kyau, sarrafa zirga-zirgar hanyar sadarwa, tsaro, da ƙari!

Lura. fassara: karanta game da wannan a kashi na gaba na kayan a kan Istio na Rinor Maloku, fassarar da za ta biyo baya a shafinmu nan gaba. UPDATE (14 ga Maris): Kashi na biyu riga an buga.

PS daga mai fassara

Karanta kuma a kan shafinmu:

source: www.habr.com