Hoki ki nga ratonga miihini me Istio. Wāhanga 1

Hoki ki nga ratonga miihini me Istio. Wāhanga 1

Tuhipoka. whakamaori.: Ko nga mahanga ratonga kua tino noho hei otinga whaitake i roto i nga hanganga hou mo nga tono whai muri i te hoahoanga microservice. Ahakoa kei runga a Istio i nga ngutu o te maha o nga miihini DevOps, he hua tino hou, ahakoa he whanui mo nga kaha e whakaratohia ana, tera pea e nui te waa ki te mohio. Ko te miihini Tiamana a Rinor Maloku, nana nei te kawenga mo te rorohiko kapua mo nga kaihoko nui i te kamupene waea waea Orange Networks, kua tuhia e ia he raupapa rauemi whakamiharo e taea ai e koe te ruku tere me te hohonu ki Istio. Ka timata ia i tana korero me nga mea ka taea e Istio te mahi whanui me te pehea e taea ai e koe te kite wawe ki o kanohi ake.

Istio — He kaupapa Open Source i whakawhanakehia ma te mahi tahi me nga roopu mai i a Google, IBM me Lyft. Ka whakatauhia e ia nga uaua ka puta mai i roto i nga tono-a-roto, penei i:

  • whakahaere waka: taima, ngana ano, whakataurite kawenga;
  • Haumarutanga: motuhēhēnga kaiwhakamahi mutunga me te whakamanatanga;
  • Te Tirohanga: te whai, te aroturuki, te takiuru.

Ko enei katoa ka taea te whakatau i te taumata tono, engari i muri i tera ka kore e "micro" o ratonga. Ko nga whakapau kaha katoa ki te whakaoti i enei raru he moumou rawa nga rauemi a te kamupene ka taea te whakamahi tika mo te uara pakihi. Kia titiro tatou ki tetahi tauira:

Kaiwhakahaere Kaupapa: Kia pehea te roa o te taapiri i te waahanga urupare?
Kaiwhakawhanake: E rua nga sprints.

MP: He aha?.. He CRUD noa iho!
R: Ko te mahi CRUD te waahanga ngawari, engari me whakamotuhēhē me te whakamana i nga kaiwhakamahi me nga ratonga. I te mea kaore i te pono te whatunga, ka hiahia koe ki te whakatinana i nga tono tukurua, me tauira wehenga iahiko i roto i nga kiritaki. Ano, ki te whakarite kia kore te punaha katoa e pakaru, ka hiahia koe ki nga waahi me te parepare (mo etahi atu korero mo nga tauira e rua kua whakahuahia, tirohia i muri mai i te tuhinga - approx. transl.), a kia kitea nga raru, te aro turuki, te tirotiro, […]

MP: Aue, me whakauru noa tenei ahuatanga ki te ratonga Hua.

Ki taku whakaaro he maamaa te whakaaro: he nui te nui o nga hikoinga me te whakapau kaha ki te taapiri i tetahi ratonga. I roto i tenei tuhinga, ka titiro tatou me pehea te tango a Istio i nga uauatanga katoa i whakahuahia i runga ake nei (kaore i te kii hei arorau pakihi) mai i nga ratonga.

Hoki ki nga ratonga miihini me Istio. Wāhanga 1

parau: Kei te whakaaro tenei tuhinga kei a koe te matauranga mahi mo Kubernetes. Ki te kore, ka tūtohu ahau ki te panui taku whakataki ki a Kubernetes a muri noa iho ka panui tonu i tenei korero.

Istio whakaaro

I roto i te ao karekau a Istio, ka tono tika tetahi ratonga ki tetahi atu, a, ki te kore e taka, me whakahaere e te ratonga ano: mahia he nganatanga hou, hoatu he taima, whakatuwhera i te waahi hiko, aha atu.

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
Te hokohoko whatunga i Kubernetes

Ka tukuna e Istio tetahi otinga motuhake, kua wehea rawatia mai i nga ratonga me te mahi ma te pokanoa ki te whakawhitiwhiti korero whatunga. Na ka whakatinanahia:

  • te manawanui ki te he: I runga i te waehere mana i roto i te whakautu, ka maarama mena i rahua te tono ka mahia ano.
  • Nga Whakaputa Canary: ka anga noa i te ōrau pūmau o ngā tono ki te putanga hōu o te ratonga.
  • Te aroturuki me te inenga: E hia te roa mo te ratonga ki te whakautu?
  • Aroturuki me te Matakitaki: Ka taapiri i nga pane motuhake ki ia tono ka whai i a raatau puta noa i te roopu.
  • Haumarutanga: Ka tiki i te tohu JWT, ka whakamotuhēhē me te whakamana i ngā kaiwhakamahi.

He iti noa enei o nga mea ka taea (he ruarua noa iho!) hei whakahihiri i a koe. Inaianei ka rukuhia nga korero hangarau!

Istio hoahoanga

Ka haukotia e Istio nga hokohoko whatunga katoa me te whakamahi i tetahi huinga ture ki a ia, me te whakauru i tetahi takawaenga atamai i te ahua o te ipu tahataha ki roto i ia pene. Ko nga takawaenga e whakahohe ana i nga kaha katoa ka hanga he Rererangi Raraunga, a ka taea te whirihora hihiri ma te whakamahi Rererangi Whakahaere.

Rererangi Raraunga

Ko nga takawaenga kua whakauruhia ki roto i nga poro ka taea e Istio te whakatutuki ngawari i nga whakaritenga e hiahiatia ana e matou. Hei tauira, me tirotirohia te ngana ano me nga mahi wehenga iahiko.

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
Me pehea te whakatinanatanga o nga whakamatautau me te waahi ara iahiko i te Envoy

Hei whakarāpopoto:

  1. karere (Kei te korero matou mo tetahi takawaenga kei roto i te ipu taha, ka tohatohahia hei hua motuhake — āhua. whakawhiti.) ka tukuna he tono ki te tauira tuatahi o te ratonga B ka rahua.
  2. Ka ngana ano a Envoy Sidecar (ngana ano). (1)
  3. Ka rahua te tono, ka whakahokia ki te takawaenga nana i karanga.
  4. Ma tenei ka whakatuwhera i te Kaiwhati Whakawhitiwhiti ka waea atu ki te ratonga e whai ake nei mo nga tono a muri ake nei. (2)

Ko te tikanga karekau koe e whai ki te whakamahi i tetahi atu whare pukapuka Ngana ano, kaore koe e mahi i a koe ake te whakatinanatanga o te Circuit Breaking and Service Discovery i roto i te reo whakahōtaka X, Y, Z. Ko enei katoa me te maha atu kei te waatea mai i te pouaka. i Istio me te kore e hiahiatia no huringa i roto i te waehere.

Rawe! Inaianei kei te pirangi koe ki te haere ki te taha o Istio, engari kei te ruarua tonu koe, nga patai tuwhera. Mena he otinga mo te ao katoa mo nga wa katoa o te ao, katahi ka whai whakaaro koe: i muri i nga mea katoa, ko enei otinga katoa ka puta he kore e tika mo tetahi keehi.

Ka mutu ka patai koe: "He mea whakarite?"

Inaianei kua reri koe mo te haerenga moana, kia mohio tatou ki te Waka Whakahaere.

Rererangi Whakahaere

E toru nga waahanga: Pilot, Kaipara и whare, e mahi tahi ana ki te whirihora i nga Envoys ki te arahi i nga waka, ki te whakamana i nga kaupapa here, ki te kohi raraunga waea. Ko te ahua o nga mea katoa penei:

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
Te Pahekoheko o te Papa Whakahaere me te Mare Raraunga

Ko nga karere (arā, te rererangi raraunga) kua whirihorahia ma te whakamahi Kubernetes CRD (Whakamaramatanga Rauemi Ritenga) i tautuhia e Istio me te whakaaro mo tenei kaupapa. Ko te tikanga o tenei ki a koe ko te ahua he rauemi kee ano kei Kubernetes me te wetereo mohio. Ina oti te hanga, ka kohia tenei rauemi e te waka rererangi ka tukuna atu ki nga Karere.

Te hononga o nga ratonga ki a Istio

Kua whakaahuatia e matou te hononga o Istio ki nga ratonga, engari kaua ko te whakamuri: he pehea te hononga o nga ratonga ki a Istio?

Ki te pono, kei te mohio nga ratonga ki te noho a Istio ka rite ki nga ika o te wai ka patai ratou ki a ratou ano, "He aha te wai?"

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
Whakaahua Wikitoria Dimitrakopoulos: - He pai ki a koe te wai? - He aha te wai?

Na, ka taea e koe te tango i te roopu mahi a muri i te tohatoha i nga waahanga Istio, ka mahi tonu nga ratonga kei roto, a, i muri i te tango i enei waahanga, ka pai ano nga mea katoa. E marama ana i tenei keehi ka ngaro koe i nga kaha e whakaratohia ana e Istio.

Kati te ariā - me whakatinana tenei matauranga!

Istio i roto i te mahi

Kei te hiahia a Istio he kahui Kubernetes me te 4 vCPU neke atu me te 8 GB o RAM e waatea ana. Kia tere te whakarite i te roopu me te whai i nga tohutohu mai i te tuhinga, ka tūtohu ahau ki te whakamahi i te Google Cloud Platform, e tuku ana i nga kaiwhakamahi hou utu $300.

Whai muri i te hanga kahui me te whirihora i te uru ki Kubernetes ma te taputapu papatohu, ka taea e koe te whakauru i a Istio ma te kaiwhakahaere kete Helm.

Te whakanoho helm

Tāutahia te kiritaki Helm ki tō rorohiko, kua whakaahuatia i roto tuhinga whaimana. Ka whakamahia tenei hei whakaputa tauira mo te whakauru i a Istio ki te waahanga e whai ake nei.

Tāuta Istio

Tikiake rauemi Istio mai tukunga hou (kua huri te hono a te kaituhi taketake ki te putanga 1.0.5 ki te hononga o naianei, ara 1.0.6 - tata ki te whakawhiti), tangohia nga ihirangi ki roto i te raarangi kotahi, ka karangahia e au a muri ake nei [istio-resources].

Kia ngawari te tautuhi i nga rauemi a Istio, hangaia he mokowā ingoa ki te kāhui K8s istio-system:

$ kubectl create namespace istio-system

Whakaotia te tāutanga mā te haere ki te whaiaronga [istio-resources] me te whakahaere i te whakahau:

$ 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

Ma tenei tono e whakaputa nga waahanga matua o Istio ki tetahi konae istio.yaml. I whakarereketia e matou te tauira paerewa kia rite ki a matou ano, me te tohu i nga taapiri e whai ake nei:

  • global.mtls.enabled kua whakauruhia ki roto false (arā, kua monoa te motuhēhēnga mTLS - tata.)ki te whakangwari i ta tatou tukanga teití;
  • tracing.enabled kei roto ko te tirotiro tono ma te whakamahi i a Jaeger;
  • kiali.enabled ka whakaurua a Kiali ki roto i te kahui hei tiro i nga ratonga me nga waka;
  • grafana.enabled ka whakauruhia a Grafana ki te whakaata i nga inenga kua kohia.

Me whakamahi nga rauemi i hangaia me te whakahau:

$ kubectl apply -f istio.yaml

Kua oti te whakaurunga o Istio ki te tautau! Taria kia tae katoa nga poro ki te mokowāingoa istio-system ka taea Running ranei Completedma te whakahaere i te whakahau i raro nei:

$ kubectl get pods -n istio-system

Inaianei kua reri taatau ki te haere tonu ki te waahanga e whai ake nei, ka tiimata te tono me te whakahaere.

Te hoahoanga o te tono Aatari Manao

Me whakamahi i te tauira o te tono moroiti Tirohanga Manao i whakamahia i roto i nga korero kua whakahuahia ake nei Tuhinga whakataki ki Kubernetes. He uaua ki te whakaatu i nga kaha o Istio i roto i nga mahi.

Ko te tono e wha nga microservices:

  1. ratonga SA-Mua, e mahi ana i te pito o mua o te tono Reactjs;
  2. ratonga SA-Tukutuku, e mahi ana i nga uiuinga Rangahau Manao;
  3. ratonga SA-arorau, e mahi ana i a ia ano tātaritanga kare;
  4. ratonga SA-Whakaaro, ka whiwhi urupare mai i nga kaiwhakamahi mo te tika o te tātaritanga.

Hoki ki nga ratonga miihini me Istio. Wāhanga 1

I roto i tenei hoahoa, i tua atu i nga ratonga, ka kite ano matou i te Ingress Controller, i roto i nga Kubernetes e arai ana i nga tono taumai ki nga ratonga e tika ana. Ka whakamahia e Istio tetahi ariā rite i roto i tana Ingress Gateway, ka whai ake etahi atu korero.

Te whakahaere tono me te takawaenga mai i Istio

Mo etahi atu mahi kua whakahuahia i roto i te tuhinga, kati to putunga istio-mastery. Kei roto te tono me nga whakaaturanga mo Kubernetes me Istio.

Te whakauru i nga waka taha

Ka taea te whakauru aunoa ranei i te ringa. Hei whakauru aunoa i nga ipu tahataha, me whakarite e koe he tapanga ki te mokowāingoa istio-injection=enabled, ka mahia me te whakahau e whai ake nei:

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

Inaianei ko ia pene ka tukuna ki te mokowāingoa taunoa (default) ka whiwhi i tana ipu tahataha. Hei manatoko i tenei, me tuku te tono whakamatautau ma te haere ki te raarangi pakiaka o te putunga [istio-mastery] me te whakahaere i te whakahau e whai ake nei:

$ 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

Ka tukuna nga ratonga, tirohia e rua nga ipu (me te ratonga ake me tana waka taha) ma te whakahaere i te whakahau. kubectl get pods me te whakarite kei raro i te pou READY uara kua tohua 2/2, e tohu ana kei te rere nga ipu e rua:

$ 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

Ko te ahua o tenei ahua:

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
Ko te kaitakawaenga karere i roto i tetahi o nga poro

Inaianei kei te whakahaere te tono, me whakaae tatou kia uru mai nga waka taumai ki roto i te tono.

Te Waahi Ingress

Ko te mahi tino pai ki te whakatutuki i tenei (whakaaetia te hokohoko i roto i te roopu) kua oti Te Waahi Ingress i Istio, kei te taha "te taha" o te kahui ka taea e koe te whakaahei i nga ahuatanga o Istio penei i te ararere, te taurite kawenga, te haumaru me te aro turuki mo nga waka taumai.

Ko te waahanga Ingress Gateway me te ratonga e tuku whakamua ana ki waho i whakauruhia ki roto i te roopu i te wa o te whakaurunga a Istio. Hei kimi i te wahitau IP waho o te ratonga, whakahaere:

$ 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

Ka uru tonu matou ki te tono ma te whakamahi i tenei IP (ka kiia e ahau ko WAHO-IP), na mo te pai ka tuhia e matou te uara ki tetahi taurangi:

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

Mena ka ngana koe ki te uru atu ki tenei IP na roto i te kaitirotiro inaianei, ka whiwhi koe i te hapa Ratonga Kaore i te waatea, na te mea na te taunoa ka aukati a Istio i nga waka taumai katoa, Ko te Gateway kaore ano kia tautuhia.

Rauemi Gateway

Ko te Gateway he CRD (Whakaahua Rauemi Ritenga) i Kubernetes, i tautuhia i muri i te whakaurunga o Istio ki roto i te kahui me te whakaahei i te kaha ki te tautuhi i nga tauranga, te kawa me nga kaihautu e hiahia ana matou ki te tuku waka taumai.

I roto i to maatau, e hiahia ana matou ki te tuku i te hokohoko HTTP i runga i te tauranga 80 mo nga ope katoa. Ka whakatinanahia te mahi e te whakamaramatanga e whai ake nei (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:
- "*"

Ko tenei whirihoranga kaore he whakamarama engari mo te kaiwhiriwhiri istio: ingressgateway. Ma tenei kaikowhiri ka taea e matou te tohu ko tehea Ingress Gateway hei whakamahi i te whirihoranga. I a maatau, koinei te kaiwhakahaere Ingress Gateway, i whakauruhia ma te taunoa i Istio.

Ka whakamahia te whirihoranga ma te karanga i te whakahau e whai ake nei:

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

Inaianei ka taea e te kuaha te uru ki te tauranga 80, engari karekau he mohio ki hea ka tukuna nga tono. Mo tenei ka hiahia koe Ratonga Mariko.

Rauemi Ratonga Mariko

Ka korero te VirtualService ki te Ingress Gateway me pehea te arai i nga tono ka whakaaetia i roto i te roopu.

Ko nga tono ki ta maatau tono e haere mai ana ma te http-kuwaha me tuku ki nga ratonga sa-mua, sa-web-app me nga ratonga urupare haumaru:

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
Ko nga huarahi e tika ana kia whirihorahia me te VirtualServices

Kia titiro tatou ki nga tono me tuku ki SA-Frontend:

  • He riterite tonu i te huarahi / me tuku ki SA-Frontend ki te tiki index.html;
  • Nga ara kua tohua /static/* me tuku ki SA-Frontend ki te whiwhi i nga konae pateko e whakamahia ana i te pito o mua, penei i te CSS me te JavaScript;
  • Ko nga ara e whakaritea ana ki te kii auau '^.*.(ico|png|jpg)$', me tuku ki SA-Frontend, na te mea Koinei nga pikitia e whakaatuhia ana i te wharangi.

Ko te whakatinanatanga ka tutuki ma te whirihoranga e whai ake nei (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

Ngā tohu nui:

  1. Ko tenei Ratonga Mariko e pa ana ki nga tono e puta mai ana http-kuwaha;
  2. В destination Ko te ratonga ka tukuna nga tono ka whakatauhia.

parau: Ko te whirihoranga i runga ake nei kei te rongoa ki tetahi konae sa-virtualservice-external.yaml, kei roto hoki nga tautuhinga mo te ararere i roto i te SA-WebApp me te SA-Uruuru, engari kua whakapotohia i konei i roto i te tuhinga mo te poto.

Me tono VirtualService ma te waea:


parau: Ina pau ana tatou i nga rauemi Istio, ka hangaia e te Kubernetes API Server tetahi huihuinga ka whakawhiwhia e te Istio Control Plane, a muri iho ka tukuna te whirihoranga hou ki nga takawaenga Envoy o ia pod. A ko te Kaiwhakahaere Ingress Gateway te ahua ko tetahi atu Envoy kua whirihorahia ki te Mahere Mana. He penei te ahua o enei katoa i te hoahoa:

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
Istio-IngressGateway whirihoranga mo te tono ararere

Kei te watea te tono mo te Whakatairanga Manao http://{EXTERNAL-IP}/. Kaua e manukanuka mena ka whiwhi koe i te mana Kaore i Kitea: I etahi wa ka roa ake te mana o te whirihoranga me nga keteroki Envoy ki te whakahou.

I mua i te haere, purei me te taupānga mo te whakaputa waka. (he mea tika kia marama i roto i nga mahi ka whai ake - tata ki te whakamaoritanga).

Kiali: observability

Kia tae atu ki te atanga whakahaere Kiali, whakahaerehia te whakahau e whai ake nei:


... ka tuwhera http://localhost:20001/, takiuru hei kaiwhakahaere/kaiwhakahaere. I konei ka kitea e koe he maha nga waahanga whai hua, hei tauira, ki te tirotiro i te whirihoranga o nga waahanga Istio, tirohia nga ratonga ma te whakamahi i nga korero i kohia mai i te haukoti i nga tono whatunga, whiwhi whakautu ki nga patai "Ko wai te whakapā atu ki a wai?", "Ko tehea putanga o te ratonga kei te wheako. rahunga?” me etahi atu. I te nuinga o te waa, tirotirohia nga kaha o Kiali i mua i te haere ki te tirohanga inenga me Grafana.

Hoki ki nga ratonga miihini me Istio. Wāhanga 1

Grafana: whakakitenga inenga

Ko nga inenga ka kohia i Istio ka haere ki Prometheus ka tirohia ki a Grafana. Kia tae atu ki te atanga whakahaere a Grafana, whakahaerehia te whakahau i raro nei ka tuwhera http://localhost:3000/:


Te panui i te tahua Kāinga runga maui me te kowhiri Papatohu Ratonga Istio i te kokonga maui o runga, timata ki te mahi sa-tukutuku-taupāngaki te titiro ki nga inenga kua kohia:

Hoki ki nga ratonga miihini me Istio. Wāhanga 1

Ko te mea e tatari ana ki a tatou i konei ko te mahi hoha me te tino hoha - kare rawa te whakahaere e whakaae ki tenei. Me hanga he uta iti me te whakahau e whai ake nei:


Inaianei he pai ake nga kauwhata, hei taapiri atu ki a raatau, he taputapu Prometheus mo te aro turuki me te Grafana mo te whakaata i nga inenga ka taea e tatou te ako mo te mahi, te hauora, te whakapai ake / te whakaheke i nga ratonga i roto i te waa.

Ka mutu, me titiro ki nga tono rapu i roto i nga ratonga.

Jaeger: whaiwhai

Me whai maatau na te mea ka nui ake nga ratonga ka nui ake te uaua ki te haere ki te take o te korenga. Kia titiro tatou ki tetahi keehi ngawari mai i te pikitia i raro nei:

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
He tauira angamaheni o te tono i rahua

Ka tae mai te tono, ka hinga - he aha te take? Te taviniraa tuatahi? Ko te tuarua ranei? He rereke nga mea e rua - me titiro ki nga rarangi o ia rakau. E hia nga wa i mau koe i a koe e mahi ana i tenei? He rite tonu a maatau mahi ki nga kaitirotiro rorohiko i nga kaiwhakawhanake...

He raruraru noa tenei i roto i nga ratonga miihini, ka whakatauhia e nga punaha tirotiro tohatoha, ka tukuna e nga ratonga he pane motuhake ki a raatau ano, muri iho ka tukuna atu enei korero ki te punaha tirotiro, ka whakatauritea ki nga raraunga tono. Anei he whakaahua:

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
Ka whakamahia a TraceId hei tautuhi i te tono

Ka whakamahia e Istio a Jaeger Tracer, e whakatinana ana i te angamahi OpenTracing API a te kaihoko. Ka taea e koe te uru atu ki te atanga kaiwhakamahi Jaeger me te whakahau e whai ake nei:


Inaianei haere ki http://localhost:16686/ ka kowhiria he ratonga sa-tukutuku-taupānga. Ki te kore e whakaatuhia te ratonga ki te tahua taka-iho, whakaatu/whakaputa mahi ki te wharangi me te whakahou i te atanga. I muri i tera, paatohia te paatene Kimihia nga Tohu, ka whakaatu i nga tohu hou - tohua tetahi - ka puta nga korero taipitopito mo nga tohu katoa:

Hoki ki nga ratonga miihini me Istio. Wāhanga 1

Ko tenei tohu e whakaatu ana:

  1. Ka uru mai te tono istio-ingressgateway (koinei te taunekeneke tuatahi me tetahi o nga ratonga, a ka hangaia he ID Aroturuki mo te tono), ka mutu ka tukuna e te kuaha te tono ki te ratonga sa-tukutuku-taupānga.
  2. I roto i te taviniraa sa-tukutuku-taupānga Ko te tono ka kohia e te Envoy sidecar, ka hangaia he "tamaiti" i roto i te waa (koira te take ka kitea i roto i nga tohu) ka tukuna ki te ipu. sa-tukutuku-taupānga. (whanganga a - he wae mahi arorau i Jaeger, he ingoa tona, te wa timata o te mahi me tona roanga. Ka taea te kohanga me te whakahau i nga waahi. Ko te kauwhata acyclic acyclic o nga whanganga ka puta he tohu. — āhua. whakawhiti.)
  3. I konei ka tukatukahia te tono ma te tikanga sentimentAnalysis. Ko enei tohu kua hangaia e te tono, i.e. i hiahiatia e ratou nga huringa waehere.
  4. Mai i tenei wa, ka timatahia he tono POST sa-arorau. Me tuku atu i te Trace ID sa-tukutuku-taupānga.
  5. ...

parau: I te taahiraa 4, me kite te tono i nga pane i hangaia e Istio ka tukuna ki nga tono o muri mai e whakaatuhia ana i te ahua o raro:

Hoki ki nga ratonga miihini me Istio. Wāhanga 1
(A) Ko Istio te kawenga mo te tuku pane whakamua; (B) Ko nga ratonga te kawenga mo nga pane

Ko Istio te nuinga o nga mahi na te mea... ka whakaputa pane mo nga tono taumai, ka hanga i nga waahanga hou ki ia taha tiaki ka tuku whakamua. Heoi, ki te kore e mahi me nga pane o roto o nga ratonga, ka ngaro te ara tohu tono katoa.

Ko nga pane e whai ake nei me whai whakaaro:


Ehara tenei i te mahi uaua, engari ki te whakangwari i tana whakatinanatanga kei reira ke maha nga whare pukapuka - hei tauira, i roto i te ratonga sa-web-app, ka tukuna e te kiritaki RestTemplate enei pane ki te taapiri noa koe i nga whare pukapuka Jaeger me OpenTracing ki ona waranga.

Kia mahara kei te whakaatu te tono Sentiment Analysis i nga whakatinanatanga i roto i te Flask, Spring, me te ASP.NET Core.

Inaianei kua marama nga mea ka puta mai i te pouaka (kua tata atu ranei ki waho o te pouaka), me titiro tatou ki te ararere pai, te whakahaere waka whatunga, te haumaru, aha atu!

Tuhipoka. whakamaori.: Pānuihia mo tenei i te waahanga o muri mai o nga rauemi i runga i a Istio mai i a Rinor Maloku, ko nga whakamaoritanga ka whai mai i runga i ta maatau blog i nga wa e heke mai nei. WHAKAHOU (Maehe 14th): Ko te waahanga tuarua kua oti te whakaputa.

PS mai i te kaiwhakamaori

Pānuihia hoki i runga i ta maatau blog:

Source: will.com