Khutlela ho microservices le Istio. Karolo ea 1

Khutlela ho microservices le Istio. Karolo ea 1

Hlokomela. fetolela.: Li-meshes tsa lits'ebeletso li fetohile tharollo e nepahetseng lits'ebetsong tsa sejoale-joale bakeng sa lits'ebetso tse latelang meralo ea microservice. Le hoja Istio e ka 'na ea e-ba melomong ea baenjiniere ba bangata ba DevOps, ke sehlahisoa se secha seo, leha se na le kakaretso ho ea ka bokhoni boo e fanang ka bona, se ka hlokang nako e ngata ho se tloaela. Moenjiniere oa Lejeremane Rinor Maloku, ea ikarabellang bakeng sa cloud computing bakeng sa bareki ba bangata k'hamphaning ea mehala ea mehala ea Orange Networks, o ngotse letoto le tsotehang la lisebelisoa tse u lumellang hore u kene ka potlako le ka botebo ho Istio. O qala pale ea hae ka seo Istio a ka se etsang ka kakaretso le kamoo u ka e bonang kapele kateng ka mahlo a hao.

Istio - Morero oa Open Source o ntlafalitsoeng ka tšebelisano 'moho le lihlopha tsa Google, IBM le Lyft. E rarolla mathata a hlahang lits'ebetsong tse thehiloeng ho microservices, joalo ka:

  • Tsamaiso ea Sephethephethe: ho qeta nako, ho leka hape, ho leka-lekanya mojaro;
  • Tshireletso: netefatso ya mosebedisi le tumello;
  • Ho hlokomeleha: ho latela, ho beha leihlo, ho rema lifate.

Tsena tsohle li ka rarolloa boemong ba kopo, empa ka mor'a moo litšebeletso tsa hau li ke ke tsa hlola li e-ba "micro". Boiteko bohle bo eketsehileng ba ho rarolla mathata ana ke tšenyo ea lisebelisoa tsa k'hamphani tse ka sebelisoang ka kotloloho bakeng sa boleng ba khoebo. Ha re shebeng mohlala:

Motsamaisi oa Morero: Ho nka nako e kae ho eketsa karolo ea maikutlo?
Moqapi: Li-sprints tse peli.

MP: Eng?.. Ke CRUD feela!
R: Ho etsa CRUD ke karolo e bonolo, empa re ntse re hloka ho netefatsa le ho fana ka tumello ea basebelisi le lits'ebeletso. Kaha marang-rang ha a tšepahale, o tla hloka ho kenya ts'ebetsong likōpo tse pheta-phetoang, hammoho le mohlala oa potoloho ho bareki. Hape, ho etsa bonnete ba hore sistimi eohle ha e soahlamane, o tla hloka nako le nako bongata (bakeng sa lintlha tse ling mabapi le lipaterone tse boletsoeng ka bobeli, sheba hamorao sengolong - approx. transl.), le ho bona mathata, ho beha leihlo, ho lata, […]

MP: Oh, joale ha re kenyeng tšobotsi ena tšebeletsong ea Sehlahisoa.

Ke nahana hore mohopolo o hlakile: tekanyo ea mehato le boiteko bo hlokahalang ho eketsa tšebeletso e le 'ngoe e kholo haholo. Sehloohong sena, re tla sheba kamoo Istio e tlosang ho rarahana ho boletsoeng ka holimo (e sa reretsoeng ho ba logic ea khoebo) ho tsoa litšebeletsong.

Khutlela ho microservices le Istio. Karolo ea 1

mantsoe: Sengoliloeng sena se nka hore u na le tsebo e sebetsang ea Kubernetes. Ho seng joalo, ke khothaletsa ho bala kenyelletso ea ka ho Kubernetes 'me ke ka mor'a moo feela tsoela pele ho bala boitsebiso bona.

Khopolo ea Istio

Lefatšeng le se nang Istio, tšebeletso e le 'ngoe e etsa likōpo tse tobileng ho e' ngoe, 'me ha ho e-na le ho hlōleha, tšebeletso e tlameha ho sebetsana le eona ka boeona: etsa boiteko bo bocha, fana ka nako ea ho qeta nako, ho bula mochine oa potoloho, joalo-joalo.

Khutlela ho microservices le Istio. Karolo ea 1
Sephethephethe sa marang-rang ho Kubernetes

Istio e fana ka tharollo e khethehileng, e arohaneng ka ho feletseng le litšebeletso le ho sebetsa ka ho kena-kenana le puisano ea marang-rang. 'Me ka hona e sebetsa:

  • mamello ea liphoso: E ipapisitse le khoutu ea boemo karabong, e utloisisa hore na kopo e hlolehile ebe e e etsa hape.
  • Lihlahisoa tsa Canary: e fetisetsa feela peresente e tsitsitseng ea likopo ho mofuta o mocha oa ts'ebeletso.
  • Tlhokomelo le metrics: Ho nkile nako e kae hore tshebeletso e arabele?
  • Ho latela le ho bonoa: E eketsa lihlooho tse khethehileng kopong e 'ngoe le e 'ngoe ebe e li lata ho pholletsa le sehlopha.
  • Tshireletso: E khutlisa tokene ea JWT, e netefatsa le ho fana ka tumello ea basebelisi.

Tsena ke tse 'maloa feela tsa menyetla (e seng kae feela!) ea ho u khahla. Joale a re ke re kenelle ka har'a lintlha tsa tekheniki!

Mehaho ea Istio

Istio e thibela sephethephethe sa marang-rang 'me e sebelisa melao e mengata ho eona, e kenya proxy e bohlale ka mokhoa oa setshelo sa ka thōko ho pod ka 'ngoe. Li-proxies tse kenyang matla ohle li theha a Sefofane sa Boitsebiso, 'me li ka hlophisoa ka matla li sebelisoa Sefofane sa Taolo.

Sefofane sa Boitsebiso

Li-proxies tse kentsoeng ka har'a li-pods li lumella Istio ho fihlela litlhoko tseo re li hlokang habonolo. Mohlala, ha re hlahlobeng ts'ebetso ea ho leka hape le ea sekhechana sa potoloho.

Khutlela ho microservices le Istio. Karolo ea 1
Mokhoa oa ho leka hape le ho robeha ha potoloho li kengoa tšebetsong ho Envoy

Ho akaretsa:

  1. moromuoa (re bua ka proxy e ka har'a setshelo sa koloi e ka thoko, e ajoang joalo ka sehlahisoa se arohaneng - hoo e ka bang. fetolela.) e romella kopo molemong oa pele oa ts'ebeletso B mme ea hloleha.
  2. Moemeli Sidecar o leka hape (leka hape). (1)
  3. Kopo e hloleha mme e khutlisetsoa ho moemeli ea e bitsitseng.
  4. Sena se bula Circuit Breaker mme se letsetsa tšebeletso e latelang bakeng sa likopo tse latelang. (2)

Sena se bolela hore ha ho hlokahale hore u sebelise laebrari e 'ngoe ea Leka hape, ha ho hlokahale hore u iketsetse ts'ebetsong ea Circuit Breaking le Discovery ea Tšebeletso ka puo ea lenaneo X, Y kapa Z. Tsena tsohle le tse ling tse ngata li fumaneha ka ntle ho lebokose. ho Istio mme ha e hloke Che liphetoho khoutu.

E kholo! Hona joale u ka 'na ua batla ho nka leeto le Istio, empa u ntse u e-na le lipelaelo, lipotso tse bulehileng. Haeba ena e le tharollo ea bokahohle bakeng sa liketsahalo tsohle tsa bophelo, joale u na le lipelaelo tsa tlhaho: ka mor'a moo, litharollo tsohle tse joalo ha e le hantle li fetoha tse sa lokelang bakeng sa nyeoe leha e le efe.

'Me qetellong u botsa: "Na e ka tloaeleha?"

Joale u se u itokiselitse leeto la leoatle, a re tloaelane le Sefofane sa Taolo.

Sefofane sa Taolo

E na le likarolo tse tharo: Mofofane, mixer и Citadel, tse sebetsang 'moho ho hlophisa Baromuoa ho tsamaisa sephethephethe, ho tiisa melaoana, le ho bokella lintlha tsa telemetry. Ka moralo tsohle li shebahala tjena:

Khutlela ho microservices le Istio. Karolo ea 1
Tšebelisano ea Sefofane sa Taolo le Data Plane

Baemeli (ke hore data plane) ba lokiselitsoe ho sebelisoa Kubernetes CRD (Tlhaloso ea Mohloli oa Tloaelo) e hlalosoang ke Istio mme e reretsoe ka ho khetheha morero ona. Seo sena se se bolelang ho uena ke hore li bonahala e le sesebelisoa se seng ho Kubernetes se nang le syntax e tloaelehileng. Hang ha e se e bōpiloe, mohloli ona o tla nkoa ke sefofane sa taolo ebe o sebelisoa ho Baromuoa.

Kamano ea litšebeletso ho Istio

Re hlalositse kamano ea Istio le litšebeletso, empa eseng ka morao: litšebeletso li amana joang le Istio?

Ho bua 'nete, litšebeletso li hlokomela boteng ba Istio joaloka litlhapi tsa metsi ha li ipotsa, "Metsi ke eng?"

Khutlela ho microservices le Istio. Karolo ea 1
Papiso Victoria Dimitrakopoulos: - U rata metsi joang? - Metsi ke eng?

Kahoo, o ka nka sehlopha se sebetsang 'me ka mor'a ho tsamaisa likarolo tsa Istio, litšebeletso tse teng ho eona li tla tsoela pele ho sebetsa,' me ka mor'a ho tlosa likarolo tsena, ntho e 'ngoe le e' ngoe e tla ba hantle hape. Ho hlakile hore tabeng ena u tla lahleheloa ke bokhoni bo fanoeng ke Istio.

Khopolo-taba e lekane - ha re sebeliseng tsebo ena!

Istio ka ts'ebetso

Istio e hloka sehlopha sa Kubernetes se nang le bonyane li-vCPU tse 4 le 8 GB ea RAM e fumanehang. Ho theha sehlopha kapele le ho latela litaelo tse tsoang ho sengoloa, ke khothaletsa ho sebelisa Google Cloud Platform, e fanang ka basebelisi ba bacha. mahala $300.

Kamora ho theha sehlopha le ho hlophisa phihlello ea Kubernetes ka sesebelisoa sa console, o ka kenya Istio ka mookameli oa sephutheloana sa Helm.

Ho kenya Helm

Kenya moreki oa Helm khomphuteng ea hau, joalo ka ha ho hlalositsoe ho litokomane tsa molao. Re tla sebelisa sena ho hlahisa litempele tsa ho kenya Istio karolong e latelang.

Ho kenya Istio

Khoasolla lisebelisoa tsa Istio ho tsoa ho tokollo ya moraorao (sehokelo sa sengoli sa mantlha sa mofuta oa 1.0.5 se fetotsoe ho ea hona joale, ke hore 1.0.6 - approx. transl.), ntša litaba bukeng e le 'ngoe, eo ke tla e letsetsa ho tloha joale [istio-resources].

Ho tseba lisebelisoa tsa Istio habonolo, theha sebaka sa mabitso sehlopheng sa K8s istio-system:

$ kubectl create namespace istio-system

Qetella ho kenya ka ho ea bukeng [istio-resources] le ho tsamaisa taelo:

$ 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

Taelo ena e tla hlahisa likarolo tsa bohlokoa tsa Istio faeleng istio.yaml. Re fetotse template e tloaelehileng hore e lumellane le rona, re totobatsa lintlha tse latelang:

  • global.mtls.enabled e kentsoeng ka false (ke hore, netefatso ea mTLS e koetsoe - hoo e ka bang.)ho nolofatsa mokhoa oa rona oa ho intša;
  • tracing.enabled e kenyelletsa kopo ea ho batla ho sebelisa Jaeger;
  • kiali.enabled e kenya Kiali sehlopheng sa ho bona litšebeletso le sephethephethe;
  • grafana.enabled e kenya Grafana ho bona metrics e bokeletsoeng.

Ha re sebeliseng lisebelisoa tse hlahisitsoeng ka taelo:

$ kubectl apply -f istio.yaml

Ho kenngoa ha Istio sehlopheng ho felile! Ema ho fihlela li-pods tsohle li le sebakeng sa mabitso istio-system tla khona ho Running kapa Completedka ho tsamaisa taelo e ka tlase:

$ kubectl get pods -n istio-system

Joale re se re itokiselitse ho tsoela pele karolong e latelang, moo re tla etsa hore kopo e sebetse.

Moralo oa ts'ebeliso ea Sentiment Analysis

Ha re sebeliseng mohlala oa ts'ebeliso ea Sentiment Analysis microservice e sebelisitsoeng ho se seng se boletsoe Sengoloa sa kenyelletso ho Kubernetes. E rarahane ho lekana ho bonts'a bokhoni ba Istio ka ts'ebetso.

Kopo e na le li-microservices tse 'nè:

  1. tšebeletso ea SA-Fronten, e sebeletsang karolo e ka pele ea kopo ea Reactjs;
  2. tšebeletso ea SA-WebApp, e sebetsanang le lipotso tsa Sentiment Analysis;
  3. tšebeletso ea SA-Logic, e sebetsang ka boyona tlhahlobo ea maikutlo;
  4. tšebeletso ea SA-Feedback, e amohelang maikutlo a basebelisi mabapi le ho nepahala ha tlhahlobo.

Khutlela ho microservices le Istio. Karolo ea 1

Setšoantšong sena, ho phaella litšebeletsong, re boetse re bona Ingress Controller, eo ho Kubernetes e tsamaisang likōpo tse kenang litšebeletsong tse loketseng. Istio e sebelisa mohopolo o tšoanang ka har'a Ingress Gateway ea eona, lintlha tse ling tse tla latela.

Ho tsamaisa kopo ka moemeli oa Istio

Bakeng sa lits'ebetso tse ling tse boletsoeng sengolong, kopanya polokelo ea hau istio-mastery. E na le ts'ebeliso le lipontšo tsa Kubernetes le Istio.

Ho kenya li-sidecars

Ho kenya ho ka etsoa ka bohona kapa ka letsoho. Ho kenya lijana tsa koloi ea mahlakoreng ka bo eona, o tla hloka ho seta leibole sebakeng sa mabitso istio-injection=enabled, e etsoang ka taelo e latelang:

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

Hona joale pod e 'ngoe le e' ngoe e tla kenngoa sebakeng sa mabitso sa kamehla (default) e tla amohela setshelo sa eona se ka thoko. Ho netefatsa sena, a re ke re sebeliseng kopo ea teko ka ho ea mohloling oa motso oa polokelo [istio-mastery] le ho tsamaisa taelo e latelang:

$ 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

Ha re se re tsamaisitse lits'ebeletso, a re hlahlobeng hore na li-pods li na le lijana tse peli (ka ts'ebeletso ka boeona le koloi ea eona e ka thoko) ka ho tsamaisa taelo. kubectl get pods le ho etsa bonnete ba hore tlas'a kholomo READY boleng bo boletsoeng 2/2, e tšoantšetsang hore lijana ka bobeli lia sebetsa:

$ 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

Ka pono e shebahala tjena:

Khutlela ho microservices le Istio. Karolo ea 1
Moemeli oa moemeli ho e 'ngoe ea li-pods

Kaha joale ts'ebeliso e se e ntse e sebetsa, re tla hloka ho lumella sephethephethe se kenang ho kena ts'ebetsong.

Tsela ea Ingress

Mokhoa o motle oa ho fihlela sena (ho lumella sephethephethe ka har'a sehlopha) ke ka Tsela ea Ingress ho Istio, e leng "bohaleng" ba sehlopha 'me e u lumella ho nolofalletsa likarolo tsa Istio tse kang ho tsamaisa, ho leka-lekanya mojaro, tšireletso le tlhokomelo bakeng sa sephethephethe se kenang.

Karolo ea Ingress Gateway le ts'ebeletso e e fetisetsang kantle li kentsoe sehlopheng nakong ea ho kenya Istio. Ho fumana aterese ea IP ea kantle ea ts'ebeletso, matha:

$ 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

Re tla tsoelapele ho fumana ts'ebeliso ka IP ena (ke tla e bitsa EXTERNAL-IP), kahoo molemong oa ho ngola boleng ka mokhoa o fapaneng:

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

Haeba o leka ho fihlella IP ena ka sebatli hona joale, o tla fumana phoso e sa fumaneheng ea Tšebeletso, hobane ka ho sa feleng Istio e thibela sephethephethe sohle se kenang, Gateway ha e so hlalosoe.

Mohloli oa liheke

Gateway ke CRD (Custom Resource Definition) ho Kubernetes, e hlalositsoeng ka mor'a ho kenya Istio ka har'a sehlopha le ho nolofalletsa bokhoni ba ho hlakisa likou, protocol le mabotho ao re batlang ho lumella sephethephethe se tlang ho sona.

Tabeng ea rona, re batla ho lumella sephethephethe sa HTTP ho port 80 bakeng sa mabotho ohle. Mosebetsi o phethahatsoa ka tlhaloso e latelang (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:
- "*"

Tokiso ena ha e hloke tlhaloso ntle le mokhethi istio: ingressgateway. Ka khetho ena re ka hlakisa hore na ke Ingress Gateway efe eo re ka sebelisang tlhophiso ho eona. Tabeng ea rona, enoa ke molaoli oa Ingress Gateway, o kentsoeng ka ho sa feleng ho Istio.

Tlhophiso e sebelisoa ka ho letsetsa taelo e latelang:

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

Hona joale heke e lumella ho fihlella port 80, empa ha e tsebe hore na u ka tsamaisa likopo hokae. Bakeng sa sena u tla hloka Litšebeletso tsa Virtual.

Sesebelisoa sa VirtualService

VirtualService e bolella Ingress Gateway mokhoa oa ho tsamaisa likopo tse lumelletsoeng ka har'a sehlopha.

Likopo tsa kopo ea rona tse tlang ka http-gateway li tlameha ho romelloa ho sa-frontend, sa-web-app le litšebeletso tsa sa-feedback:

Khutlela ho microservices le Istio. Karolo ea 1
Litsela tse hlokang ho hlophisoa ka VirtualServices

Ha re shebeng likopo tse lokelang ho romelloa ho SA-Frontend:

  • E tšoanang hantle tseleng / e lokela ho romelloa ho SA-Frontend ho fumana index.html;
  • Litsela tse kentsoeng pele /static/* e tlameha ho romelloa ho SA-Frontend ho amohela lifaele tse tsitsitseng tse sebelisoang ka pele, tse kang CSS le JavaScript;
  • Litsela tse tsamaellanang le polelo e tloaelehileng '^.*.(ico|png|jpg)$', e tlameha ho romeloa SA-Frontend, hobane Tsena ke litšoantšo tse hlahang leqepheng.

Ts'ebetsong e finyelloa ka tlhophiso e latelang (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

Lintlha tsa bohlokoa:

  1. Ts'ebeletso ena ea Virtual e bua ka likopo tse tlang http-gateway;
  2. В destination Tšebeletso eo likopo li romeloang ho eona e khethoa.

mantsoe: Tokiso e kaholimo e bolokiloe faeleng sa-virtualservice-external.yaml, eo hape e nang le litlhophiso tsa ho tsamaisa ho SA-WebApp le SA-Feedback, empa e khutsufalitsoe mona sengolong bakeng sa bokhutšoanyane.

Ha re sebeliseng VirtualService ka ho letsetsa:


mantsoe: Ha re sebelisa lisebelisoa tsa Istio, Seva ea Kubernetes API e etsa ketsahalo e amoheloang ke Istio Control Plane, 'me ka mor'a moo ho sebelisoa mokhoa o mocha ho li-proxies tsa Moemeli oa pod e' ngoe le e 'ngoe. 'Me molaoli oa Ingress Gateway o bonahala e le Lenģosa le leng le hlophisitsoeng ho Sefofane sa Taolo. Sena sohle se shebahala tjena setšoantšong:

Khutlela ho microservices le Istio. Karolo ea 1
Tlhophiso ea Istio-IngressGateway bakeng sa tsela ea kopo

Sentiment Analysis kopo e se e fumaneha ho http://{EXTERNAL-IP}/. Seke oa tšoenyeha haeba u fumana boemo ba Ha u Fumaneha: Ka linako tse ling ho nka nako e teletsana hore tlhophiso e sebetse le li-cache tsa Envoy hore li ntlafatse.

Pele o tsoela pele, bapala le app hanyane ho hlahisa sephethephethe. (ho ba teng hoa hlokahala bakeng sa ho hlaka liketsong tse latelang - approx. transl.).

Kiali: ho bonoa

Ho fihlella sebopeho sa tsamaiso sa Kiali, tsamaisa taelo e latelang:


... mme bula http://localhost:20001/, ho kena joalo ka admin/admin. Mona u tla fumana likarolo tse ngata tsa bohlokoa, mohlala, ho lekola tlhophiso ea likarolo tsa Istio, ho bona lits'ebeletso u sebelisa tlhaiso-leseling e bokelletsoeng ho tsoa ho likopo tsa marang-rang, fumana likarabo tsa lipotso "Ke mang ea ikopanyang le mang?", "Ke mofuta ofe oa ts'ebeletso o nang le ona. ho hloleha?” joalo joalo. Ka kakaretso, hlahloba bokhoni ba Kiali pele u fetela pele ho bona metrics le Grafana.

Khutlela ho microservices le Istio. Karolo ea 1

Grafana: pono ea metrics

Metrics e bokeletsoeng Istio e ea Prometheus 'me e bonoa le Grafana. Ho fihla sebopehong sa tsamaiso sa Grafana, tsamaisa taelo e ka tlase ebe o bula http://localhost:3000/:


Ho tobetsa ho menu Home hodimo ka ho le letshehadi le ho kgetha Istio Service Dashboard hukung e ka hodimo ho le letshehadi, qala ka tshebeletso sa-web-appho sheba metrics e bokeletsoeng:

Khutlela ho microservices le Istio. Karolo ea 1

Se re letetseng mona ke ts'ebetso e se nang letho le e tenang ka botlalo - batsamaisi ba ke ke ba lumellana le sena. Ha re theheng mojaro o monyane ka taelo e latelang:


Hona joale re na le li-graph tse ntle haholo, 'me ho phaella ho tsona, lisebelisoa tse babatsehang tsa Prometheus bakeng sa ho beha leihlo le Grafana bakeng sa ho bona metrics e tla re lumella ho ithuta ka ts'ebetso, bophelo bo botle, ntlafatso / ho senyeha ha litšebeletso ha nako e ntse e ea.

Qetellong, a re shebeng ho latella likopo litšebeletsong.

Jaeger: ho latela

Re tla hloka ho ts'oaroa hobane litšebeletso tse ngata tseo re nang le tsona, ho ba thata le ho feta ho fumana sesosa sa ho hloleha. Ha re shebeng nyeoe e bonolo ho tsoa setšoantšong se ka tlase:

Khutlela ho microservices le Istio. Karolo ea 1
Mohlala o tloaelehileng oa kopo e hlōlehileng ka tšohanyetso

Kopo e tla, e oela - lebaka ke lefe? Tšebeletso ea pele? Kapa ea bobeli? Ho na le mekhelo ho ka bobeli - ha re shebeng lifate tsa e 'ngoe le e' ngoe. U iphumane u etsa see hangata hakae? Mosebetsi oa rona o tšoana le bafuputsi ba software ho feta bahlahisi ...

Ena ke bothata bo tloaelehileng ho li-microservices 'me bo rarolloa ka mekhoa ea ho latela mokhoa o ajoang, oo litšebeletso li fetisang hlooho e ikhethang ho e mong, ka mor'a moo tlhahisoleseding ena e fetisetsoa tsamaisong ea ho latela, moo e bapisoang le data ea kopo. Mona ke papiso:

Khutlela ho microservices le Istio. Karolo ea 1
TraceId e sebelisoa ho tsebahatsa kopo

Istio e sebelisa Jaeger Tracer, e sebelisang moralo oa OpenTracing API o ikemetseng oa barekisi. U ka fihlella sebopeho sa mosebelisi sa Jaeger ka taelo e latelang:


Joale e-ea ho http://localhost:16686/ ebe o kgetha tshebeletso sa-web-app. Haeba ts'ebeletso e sa bonts'oa ho menu e theoha, bonts'a/etsa tšebetso leqepheng 'me u ntlafatse sebopeho. Ka mor'a moo, tobetsa konopo Fumana Mesaletsa, e tla bonts'a mesaletsa ea morao-rao - khetha - tlhaiso-leseling e felletseng mabapi le mesaletsa eohle e tla hlaha:

Khutlela ho microservices le Istio. Karolo ea 1

Lethathamo lena le bontša:

  1. Kopo ea kena istio-ingressgateway (ena ke tšebelisano ea pele le e 'ngoe ea litšebeletso,' me Trace ID e hlahisoa bakeng sa kopo), ka mor'a moo heke e romela kopo ho tšebeletso. sa-web-app.
  2. Tšebeletsong sa-web-app kopo e nkiloe ke Evoy sidecar, "ngoana" o bōptjoa ka nako (ke ka lebaka leo re e bonang litseleng) ebe o fetisetsoa ho setshelo. sa-web-app. (sepane - karolo e utloahalang ea mosebetsi ho Jaeger, e nang le lebitso, nako ea ho qala ea ts'ebetso le nako ea eona. Li-span li ka hlophisoa le ho laeloa. Kerafo e lebisitsoeng ea acyclic ea span e etsa mohlala. - hoo e ka bang. fetolela.)
  3. Mona kopo e sebetsoa ke mokhoa sentimentAnalysis. Mekhoa ena e se e hlahisoa ke kopo, ke hore. ba ne ba hloka liphetoho tsa khoutu.
  4. Ho tloha motsotsong ona ho ea pele, kopo ea POST e qala sa-logic. Trace ID e tlameha ho romelloa ho tsoa sa-web-app.
  5. ...

mantsoe: Mohato oa 4, kopo e lokela ho bona lihlooho tse entsoeng ke Istio le ho li fetisetsa ho likopo tse latelang joalokaha ho bontšitsoe setšoantšong se ka tlase:

Khutlela ho microservices le Istio. Karolo ea 1
(A) Istio e na le boikarabelo ba ho fetisa lihlooho; (B) Litšebeletso li ikarabella bakeng sa lihlooho

Istio e etsa boholo ba mosebetsi hobane ... e hlahisa lihlooho bakeng sa likopo tse kenang, e theha libaka tse ncha sebakeng se seng le se seng sa tlhokomelo le ho li fetisetsa pele. Leha ho le joalo, ntle le ho sebetsa le lihlooho tse ka hare ho lits'ebeletso, tsela e feletseng ea kopo e tla lahleha.

Lihlooho tse latelang li tlameha ho eloa hloko:


Sena ha se mosebetsi o boima, empa ho nolofatsa ts'ebetsong ea ona ho se ho ntse ho le teng lilaebrari tse ngata - mohlala, ts'ebeletsong ea sa-web-app, moreki oa RestTemplate o fetisetsa lihlooho tsena ha o ka eketsa lilaebrari tsa Jaeger le OpenTracing ho. bokhoba ba hae.

Hlokomela hore ts'ebeliso ea Sentiment Analysis e bonts'a ts'ebetsong ho Flask, Spring, le ASP.NET Core.

Hona joale kaha ho hlakile hore na re fumana eng ka lebokoseng (kapa hoo e batlang e le ka ntle ho lebokose), a re shebeng tsela e hlophisitsoeng hantle, tsamaiso ea sephethephethe sa marang-rang, ts'ireletso, joalo-joalo!

Hlokomela. fetolela.: Bala ka sena karolong e latelang ea lisebelisoa tsa Istio ho tsoa ho Rinor Maloku, tseo liphetolelo tsa tsona li tla latela blog ea rona haufinyane. Update (La 14 Hlakubele): Karolo ea bobeli e se e hatisitsoe.

PS ho tsoa ho mofetoleli

Bala hape ho blog ea rona:

Source: www.habr.com