Toe fo'i i microservices ma Istio. Vaega 1

Toe fo'i i microservices ma Istio. Vaega 1

Manatua. fa'aliliu.: Ua mautinoa le avea o meshes o se tali talafeagai i atina'e fa'aonaponei mo talosaga e mulimuli i le fausaga o microservice. E ui o Istio atonu o loʻo i luga o laugutu o le tele o inisinia DevOps, o se mea fou fou lea, aʻo faʻamalamalamaina i tulaga o gafatia e maua ai, atonu e manaʻomia ai se taimi tele e masani ai. O le inisinia Siamani o Rinor Maloku, o ia lea e nafa ma le cloud computing mo tagata tetele i le kamupani telefoni Orange Networks, na ia tusia se faasologa matagofie o mea e mafai ai ona e vave ma loloto i totonu o Istio. Na ia amataina lana tala i le mea e mafai ona faia e Istio i se tulaga lautele ma le auala e mafai ai ona e vave vaʻaia i ou lava mata.

Istio - O se poloketi Open Source na atiaʻe i le galulue faʻatasi ma 'au mai Google, IBM ma Lyft. E foia faʻalavelave e tulaʻi mai ile microservices-based applications, pei ole:

  • Pulega o Ta'avale: taimi fa'amuta, toe taumafai, fa'apaleni uta;
  • Puipuiga: fa'amaoniga ma le fa'atagaina o tagata fa'au'uga;
  • Mata'ituina: su'esu'e, mata'ituina, ta'otoga.

O nei mea uma e mafai ona foia i le tulaga o talosaga, ae a maeʻa lena o au tautua o le a le toe "micro". O taumafaiga fa'aopoopo uma e foia ai nei fa'afitauli o se fa'amaumau o puna'oa a le kamupani e mafai ona fa'aoga sa'o mo le tau pisinisi. Sei o tatou vaai i se faataitaiga:

Pule o le Poloketi: O le a le umi e fa'aopoopo ai se fa'aaliga fa'aalia?
Atina'e: E lua ta'amilosaga.

MP: O le a?.. Na'o le CRUD!
R: O le faia o le CRUD o se vaega faigofie, ae o loʻo manaʻomia pea ona faʻamaonia ma faʻatagaina tagata faʻaoga ma auaunaga. Talu ai e le faʻatuatuaina le fesoʻotaʻiga, e te manaʻomia le faʻatinoina o talosaga faifaipea, faʻapea foʻi fa'asologa va'ava'a i tagata fa'atau. E le gata i lea, ina ia mautinoa e le paʻu le faiga atoa, e te manaʻomia taimi faʻagata ma ulu lapoʻa (mo nisi fa'amatalaga e uiga i fa'ata'ita'iga uma e lua, va'ai mulimuli ane i le tusiga - approx. transl.), ma ina ia mafai ona iloa faʻafitauli, mataʻituina, suʻeina, [...]

MP: Oi, se'i o tatou fa'aofi lea vaega i totonu o le auaunaga o oloa.

Ou te manatu o loʻo manino le manatu: o le aofaʻi o laasaga ma taumafaiga e manaʻomia e faʻaopoopo ai se tasi auaunaga e matua tele. I totonu o lenei tusiga, o le a tatou vaʻavaʻai pe faʻafefea e Istio ona aveese uma lavelave o loʻo taʻua i luga (e le o faʻamoemoeina e fai pisinisi) mai auaunaga.

Toe fo'i i microservices ma Istio. Vaega 1

mataʻi: O lenei tusiga e faʻapea o loʻo ia te oe le malamalama galue o Kubernetes. A leai, ou te fautuaina le faitau la'u folasaga i Kubernetes ma se'i mae'a ona fa'aauau le faitauina o lenei mea.

Istio manatu

I se lalolagi e aunoa ma Istio, e tasi le auʻaunaga e tuʻu saʻo talosaga i le isi, ma i le tulaga o se faʻaletonu, e tatau ona taulimaina e le auʻaunaga lava ia: faia se taumafaiga fou, tuʻuina atu se taimi malolo, tatala se vaeluaga, ma isi.

Toe fo'i i microservices ma Istio. Vaega 1
Fefa'ataua'iga feso'ota'iga i Kubernetes

O lo'o ofoina mai e Istio se fofo fa'apitoa, vavae'ese atoatoa mai auaunaga ma fa'agaioiga e ala i le fa'alavelaveina o feso'ota'iga feso'ota'iga. Ma e faʻapea ona faʻatinoina:

  • faapalepale sese: Faʻavae i luga o le tulaga code i le tali, e malamalama pe ua le manuia le talosaga ma toe faʻatinoina.
  • Fa'aliga Canary: toe fa'afo'i na'o se pasene tumau o talosaga i le lomiga fou o le auaunaga.
  • Mataituina ma fua faatatau: O le a le umi na tali mai ai le auaunaga?
  • Su'e ma Mata'ituina: Fa'aopoopo fa'aulutala fa'apitoa i talosaga ta'itasi ma su'e i luga ole fuifui.
  • Puipuiga: Toe aumai fa'ailoga JWT, fa'amaonia ma fa'atagaina tagata fa'aoga.

E na'o ni nai avanoa (matuai na'o ni nai mea!) e fa'afiafiaina ai oe. Se'i tatou su'esu'e nei i fa'amatalaga fa'apitoa!

Istio fausaga

O Istio e fa'alavelave uma fefa'ataua'iga feso'otaiga ma fa'aogaina se seti o tulafono i ai, fa'aofi se sui atamai i foliga o se atigi pusa ta'avale i totonu o pusa ta'itasi. Proxies e fa'agaoioia uma agava'a fai a Va'alele Fa'amatalaga, ma e mafai ona dynamically configured latou faaaogaina Vaalele Pulea.

Va'alele Fa'amatalaga

O sui ua fa'aofi i totonu o pods e mafai ai e Istio ona fa'amalieina mana'oga tatou te mana'omia. Mo se fa'ata'ita'iga, se'i o tatou siaki le galuega toe taumafai ma le va'ava'a.

Toe fo'i i microservices ma Istio. Vaega 1
E fa'afefea ona fa'atinoina le toe fa'ata'ita'iga ma le motusia o matagaluega i le Envoy

E aotele ai:

  1. Envoy (O loʻo matou talanoa e uiga i se sui o loʻo i totonu o se pusa taʻavale, lea e tufatufa atu e pei o oloa eseese - tusa. fa'aliliu.) auina atu se talosaga i le tulaga muamua o le auaunaga B ae le manuia.
  2. Ua toe taumafai le Envoy Sidecar (toe taumafai). (1)
  3. Ua le manuia le talosaga ma ua toe faafoi atu i le sui na valaauina.
  4. Ole mea lea e tatala ai le Circuit Breaker ma vala'au le isi auaunaga mo talosaga mulimuli ane. (2)

O lona uiga e le tatau ona e faʻaaogaina se isi Retry library, e te le tau faia lau oe lava faʻatinoga o le Circuit Breaking and Service Discovery i le gagana polokalame X, Y poʻo le Z. O nei mea uma ma sili atu o loʻo avanoa i fafo o le pusa. i Istio ma e le manaʻomia leai suiga i le code.

Matagofie! Ia atonu e te manaʻo e te alu i se folauga ma Istio, ae o loʻo i ai pea ni ou masalosaloga, fesili tatala. Afai o se fofo lautele lea mo taimi uma i le olaga, ona i ai lea o se masalosalo masani: pe a uma, o ia fofo i le mea moni e foliga mai e le talafeagai mo soʻo se mataupu.

Ma mulimuli ane e te fesili: "E mafai ona faʻatulagaina?"

O lea ua e sauni mo le folauga i le sami, tatou faamasani i le Vaalele Pulea.

Vaalele Pulea

E aofia ai vaega e tolu: Pilot, Suauu и olo, lea e galulue faʻatasi e faʻapipiʻi Avefeʻau e faʻatautaia feoaiga, faʻamalosia faiga faʻavae, ma aoina faʻamatalaga telemetry. Faʻataʻitaʻiga e pei o lenei mea uma:

Toe fo'i i microservices ma Istio. Vaega 1
Feso'ota'iga o Va'alele Fa'atonu ma Va'alele Fa'amatalaga

O avefe'au (e pei o le data plane) o lo'o fa'atulagaina e fa'aoga Kubernetes CRD (Custom Resource Definition) faʻamatalaina e Istio ma faʻapitoa mo lenei faʻamoemoe. O le uiga o lenei mea ia te oe e foliga mai ua na o se isi punaoa i Kubernetes ma se syntax masani. O le taimi lava e faia ai, o lenei punaoa o le a pikiina e le vaʻalele faʻatonutonu ma faʻaoga i Avega.

Sootaga o auaunaga ia Istio

Ua matou faamatalaina le sootaga a Istio i auaunaga, ae le o le faafeagai: e faapefea ona fesootai auaunaga ia Istio?

O le mea moni, o loʻo iloa e le auʻaunaga le i ai o Istio e pei o iʻa o le vai pe a latou fesili ifo ia i latou lava, "O le a le vai?"

Toe fo'i i microservices ma Istio. Vaega 1
Ata faʻatusa Victoria Dimitrakopoulos: - E te fiafia i le vai? - O le a le vai?

O le mea lea, e mafai ona e faʻaaogaina se fuifui galue ma a maeʻa ona faʻapipiʻi vaega Istio, o le a faʻaauau pea ona galue auaunaga o loʻo i totonu, ma a maeʻa ona aveese nei vaega, o le a toe lelei mea uma. E manino lava i lenei tulaga o le ae leiloa le gafatia na saunia e Istio.

Ua lava le talitonuga - se'i o tatou fa'atinoina lea malamalama!

Istio i le faatinoga

E mana'omia e Istio se fuifui Kubernetes ma le itiiti ifo i le 4 vCPUs ma le 8 GB o le RAM avanoa. Ina ia vave seti se fuifui ma mulimuli i faatonuga mai le tusiga, ou te fautuaina le faʻaaogaina o Google Cloud Platform, lea e ofoina atu tagata fou fua $300.

A maeʻa ona fatuina se fuifui ma faʻapipiʻi le avanoa i Kubernetes e ala i le faʻamafanafanaga aoga, e mafai ona e faʻapipiʻi Istio e ala i le pule o pusa Helm.

Fa'apipi'i foeuli

Fa'apipi'i le kalani Helm i luga o lau komepiuta, e pei ona fa'amatalaina i totonu pepa aloaia. O le a matou faʻaogaina lenei mea e fai ai faʻataʻitaʻiga mo le faʻapipiʻiina o Istio i le isi vaega.

Fa'apipi'i Istio

La'u mai Istio punaoa mai fa'asalalauga lata mai (o le sootaga a le tusitala muamua i le version 1.0.5 ua suia i le mea o iai nei, i.e. 1.0.6 - approx. transl.), aveese mea o loʻo i totonu i totonu o le lisi e tasi, lea o le a ou valaʻau atu nei [istio-resources].

Ina ia faigofie ona iloa punaoa Istio, fatuina se igoa avanoa i le K8s cluster istio-system:

$ kubectl create namespace istio-system

Fa'auma le fa'apipi'iina e ala ile alu ile fa'atonuga [istio-resources] ma faʻatautaia le poloaiga:

$ 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

O lenei poloaiga o le a faʻaalia ai vaega autu o Istio i se faila istio.yaml. Na matou suia le faʻataʻitaʻiga masani e fetaui ma i matou, faʻamaonia vaega nei:

  • global.mtls.enabled fa'apipi'i i totonu false (o lona uiga o le mTLS authentication ua le atoatoa - pe tusa)e faafaigofie ai a tatou tafaoga faamasani;
  • tracing.enabled e aofia ai le sailia o talosaga e fa'aaoga ai Jaeger;
  • kiali.enabled fa'apipi'i Kiali i totonu o se fuifui e va'ava'ai ai i auaunaga ma fefa'ataua'iga;
  • grafana.enabled fa'apipi'i le Grafana e va'ava'ai i fua fa'atatau.

Sei o tatou faʻaogaina punaoa gaosia ma le faʻatonuga:

$ kubectl apply -f istio.yaml

Ua maeʻa le faʻapipiʻiina o Istio i luga o le fuifui! Fa'atali se'ia o'o uma pusa i le igoa avanoa istio-system o le a mafai Running poʻo Completede ala i le faʻatinoina o le poloaiga i lalo:

$ kubectl get pods -n istio-system

O lea ua matou sauni e faʻaauau i le isi vaega, lea o le a matou maua ai le talosaga ma faʻagaoioia.

Fa'ata'ita'iga o le talosaga mo le Su'esu'ega o Fa'alogona

Sei o tatou fa'aoga le fa'ata'ita'iga o le Sentiment Analysis microservice application na fa'aaogaina i le mea ua uma ona ta'ua Folasaga tala i Kubernetes. E faigata tele e faʻaalia ai le gafatia o Istio i le faʻatinoga.

O le talosaga e aofia ai le fa microservices:

  1. tautua SA-Frontend, lea e tautuaina le pito i luma o se talosaga Reactjs;
  2. tautua SA-WebApp, lea e tautuaina fesili o le Su'esu'ega o Fa'alogona;
  3. tautua SA-Malo, lea e faatino e ia lava iloiloga o lagona;
  4. tautua SA-Faamatalaga, lea e maua ai faʻamatalaga mai tagata faʻaoga e uiga i le saʻo o le auiliiliga.

Toe fo'i i microservices ma Istio. Vaega 1

I lenei ata, i le faaopoopo atu i auaunaga, matou te vaʻai foi i le Ingress Controller, lea i Kubernetes o loʻo faʻatautaia talosaga o loʻo oʻo mai i auaunaga talafeagai. O loʻo faʻaaogaina e Istio se manatu tutusa i totonu o lona Ingress Gateway, o isi faʻamatalaga o le a mulimuli mai.

Fa'atino se talosaga ma se sui mai Istio

Mo nisi faʻagaioiga o loʻo taʻua i le tusiga, faʻapipiʻi lau fale teu oloa istio-pule. O loʻo i ai le talosaga ma faʻaaliga mo Kubernetes ma Istio.

Fa'aofiina o ta'avale

E mafai ona fai le fa'aofiina otometi poʻo ma le lima. Ina ia otometi le fa'aofiina o atigipusa ta'avale, e tatau ona e setiina se fa'ailoga i le igoa avanoa istio-injection=enabled, lea e faia i le poloaiga lenei:

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

O lea la pod ta'itasi o le a fa'apipi'iina i le igoa fa'aletonu (default) o le a maua lana atigi pusa. Ina ia faʻamaonia lenei mea, seʻi o tatou faʻaogaina le suʻega suʻega e ala i le alu i le root directory o le fale teu oloa [istio-mastery] ma faʻatautaia le poloaiga lenei:

$ 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

I le faʻatulagaina o auaunaga, seʻi o tatou siaki pe o loʻo i ai ni pusa se lua (faʻatasi ai ma le auaunaga lava ia ma lona taʻavale) e ala i le faʻatonuina o le poloaiga. kubectl get pods ma ia mautinoa i lalo o le koluma READY tau fa'amaonia 2/2, e fa'atusalia ai o lo'o fa'agasolo uma pusa e lua:

$ 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

I le va'aiga e pei o lenei:

Toe fo'i i microservices ma Istio. Vaega 1
Sui sui i se tasi o pusa

I le taimi nei o loʻo faʻagasolo le talosaga, e manaʻomia le faʻatagaina o feoaiga o loʻo sau i totonu o le talosaga.

Ingress Gateway

O le faiga sili e ausia ai lenei (fa'ataga feoaiga i totonu o le fuifui) ua mae'a Ingress Gateway i Istio, lea o loʻo tu i le "pito" o le fuifui ma faʻatagaina oe e faʻatagaina foliga Istio e pei o le taʻavale, paleni o uta, saogalemu ma le mataʻituina o feoaiga o loʻo oʻo mai.

O le vaega o le Ingress Gateway ma le 'auʻaunaga e tuʻuina atu i fafo na faʻapipiʻiina i le fuifui i le taimi o le faʻapipiʻiina o Istio. Ina ia suʻe le tuatusi IP fafo o le tautua, tamoʻe:

$ 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

O le a faʻaauau pea ona matou faʻaogaina le talosaga e faʻaaoga ai lenei IP (O le a ou taʻua o le EXTERNAL-IP), o lea mo le faʻaogaina o le a matou tusia le tau i se fesuiaiga:

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

Afai e te taumafai e faʻaoga lenei IP e ala i se suʻesuʻega i le taimi nei, o le ae mauaina se mea sese Auaunaga Le avanoa, aua e le mafai e Istio ona poloka uma feoaiga o lo'o sau, Gateway e le'i fa'amalamalamaina.

Punaoa faitotoa

Gateway o se CRD (Custom Resource Definition) i Kubernetes, faʻamatalaina pe a uma ona faʻapipiʻi Istio i le fuifui ma faʻatagaina le mafai ona faʻamaonia ports, protocol ma talimalo tatou te manaʻo e faʻatagaina feoaiga o loʻo oʻo mai.

I la matou tulaga, matou te manaʻo e faʻatagaina le fefaʻatauaʻiga HTTP i luga o le taulaga 80 mo 'au uma. O le galuega e faʻatinoina i le faʻamatalaga o loʻo i lalo (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:
- "*"

O lenei fa'atulagaga e le mana'omia se fa'amatalaga se'i vagana le tagata filifilia istio: ingressgateway. Faatasi ai ma lenei tagata filifilia e mafai ona matou faʻamaonia po o fea Ingress Gateway e faʻaoga ai le faʻatulagaga i. I la matou tulaga, o le Ingress Gateway controller, lea na faʻapipiʻiina i le faaletonu i Istio.

O le faʻatulagaga e faʻaaogaina e ala i le valaʻau i le poloaiga lenei:

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

O le faitoto'a ua fa'atagaina nei le avanoa i le uafu 80, ae leai se iloa po'o fea e ala ai talosaga. Mo lenei mea e te manaʻomia Tautua tafailagi.

VirtualService punaoa

O le VirtualService e taʻu atu i le Ingress Gateway le auala e faʻafeiloaʻi ai talosaga e faʻatagaina i totonu o le fuifui.

O talosaga i la matou talosaga e sau mai le http-gateway e tatau ona lafo i le sa-frontend, sa-web-app ma sa-feedback auaunaga:

Toe fo'i i microservices ma Istio. Vaega 1
Auala e mana'omia ona fa'atulaga ile VirtualServices

Sei o tatou tilotilo i talosaga e tatau ona lafo i SA-Frontend:

  • fetaui tonu i le ala / e tatau ona lafo i SA-Frontend e maua ai le index.html;
  • Ala fa'apipi'i /static/* e tatau ona auina atu i le SA-Frontend e maua ai faila faʻaogaina i le pito i luma, e pei o le CSS ma le JavaScript;
  • Auala e fetaui ma fa'amatalaga masani '^.*.(ico|png|jpg)$', e tatau ona lafo i SA-Frontend, aua O ata ia o lo'o fa'aalia i luga o le itulau.

O le faʻatinoga e ausia e ala i le faʻatulagaina o loʻo i lalo (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

Manatu taua:

  1. O lenei VirtualService e faasino i talosaga e oo mai http-faitotoa;
  2. В destination O le auaunaga e auina atu i ai talosaga ua fuafuaina.

mataʻi: O le faʻatulagaina o loʻo i luga o loʻo teuina i totonu o se faila sa-virtualservice-external.yaml, o loʻo iai foʻi faʻatulagaga mo le taʻavale i le SA-WebApp ma le SA-Feedback, ae ua faʻapuupuuina iinei i le tusiga mo le faʻapuupuu.

Tatou fa'aoga VirtualService ile vala'au:


mataʻi: A matou faʻaaogaina punaoa a le Istio, e faia e le Kubernetes API Server se mea e maua e le Istio Control Plane, ma a maeʻa ona faʻaogaina le faʻatulagaga fou i sui taʻitasi a le Envoy. Ma o le Ingress Gateway pule e foliga mai o se isi Avefe'au ua fa'atulagaina i le Va'alele Pulea. E pei o nei mea uma i le ata:

Toe fo'i i microservices ma Istio. Vaega 1
Fa'atonuga Istio-IngressGateway mo le fa'atonuga ole auala

O lo'o avanoa nei le talosaga mo le Su'esu'ega o Fa'alogona http://{EXTERNAL-IP}/. Aua e te popole pe afai e te maua le tulaga Not Found: O nisi taimi e fai sina umi mo le faʻatulagaina e faʻamalosia ma le Envoy caches e faʻafouina.

A'o le'i fa'agasolo, ta'alo teisi i le app e fa'atupu ai feoaiga. (o lona iai e mana'omia mo le fa'amanino i gaioiga mulimuli ane - approx. transl.).

Kiali: mata'ituina

Ina ia oʻo i le pulega pulega Kiali, faʻataʻitaʻi le poloaiga lenei:


... ma tatala http://localhost:20001/, logo i totonu o le admin/admin. O iinei o le ae maua ai le tele o mea aoga, mo se faʻataʻitaʻiga, siaki le faʻatulagaina o vaega Istio, vaʻavaʻai i auaunaga e faʻaaoga ai faʻamatalaga na aoina mai le faʻalavelaveina o talosaga fesoʻotaʻiga, maua tali i fesili "O ai e faʻafesoʻotaʻi ai?", "O le fea ituaiga o le auaunaga o loʻo feagai ma toilalo?” ma faapena atu ai lava. I se tulaga lautele, suʻesuʻe le gafatia o Kiali aʻo leʻi agai i luma i le vaʻaia o metrics ma Grafana.

Toe fo'i i microservices ma Istio. Vaega 1

Grafana: metrics visualization

Metrics aoina i Istio alu i Prometheus ma vaʻaia ma Grafana. Ina ia oʻo i le Grafana pulega faʻaoga, faʻataʻitaʻi le poloaiga i lalo ona tatala lea http://localhost:3000/:


Kiliki i luga o le lisi Itulau Amata agavale pito i luga ma filifili Istio Service Dashboard i le tulimanu agavale pito i luga, amata i le tautua sa-web-appe va'ai i metric ua aoina:

Toe fo'i i microservices ma Istio. Vaega 1

O le mea o loʻo faʻatali mai ia i tatou iinei o se faʻatinoga gaogao ma matua le fiafia - o le a le faʻatagaina e le pulega lenei mea. Sei o tatou faia se uta itiiti ma le poloaiga lenei:


Ole taimi nei ua sili atu a tatou kalafi, ma faʻaopopo atu ia i latou, mea matagofie Prometheus mo le mataʻituina ma le Grafana mo faʻataʻitaʻiga metric e mafai ai ona tatou aʻoaʻo e uiga i faʻatinoga, soifua maloloina, faʻaleleia / faʻaleagaina i auaunaga i le taimi.

Ma le mea mulimuli, se'i o tatou va'ai i le su'eina o talosaga i auaunaga.

Jaeger: su'e

Matou te manaʻomia le suʻeina aua o le tele o a matou auaunaga, o le sili atu foi lea ona faigata ona oʻo i le mafuaʻaga o le faʻaletonu. Sei o tatou tilotilo i se mataupu faigofie mai le ata o loʻo i lalo:

Toe fo'i i microservices ma Istio. Vaega 1
Fa'ata'ita'iga masani o se talosaga fa'aletonu

Ua oo mai le talosaga, ua pau- o le a le mafuaaga? Uluai auaunaga? Po o le lona lua? E iai tuusaunoaga i mea uma e lua - seʻi o tatou tilotilo i ogalaau o mea taʻitasi. E fa'afia ona e maua oe lava o faia lenei mea? O la matou galuega e pei o tagata su'esu'e polokalame nai lo tagata atiae...

O se faʻafitauli masani lea i microservices ma e foia e ala i faʻasalalauga faʻasalalau, lea e tuʻuina atu ai e le auʻaunaga se ulutala tulaga ese i le tasi ma le isi, pe a maeʻa ona tuʻuina atu lenei faʻamatalaga i le faiga o suʻesuʻega, lea e faʻatusatusa ai ma faʻamatalaga talosaga. O se fa'ata'ita'iga lenei:

Toe fo'i i microservices ma Istio. Vaega 1
TraceId e fa'aoga e iloa ai le talosaga

O lo'o fa'aaogaina e Istio le Jaeger Tracer, lea e fa'atino ai le fa'avae OpenTracing API fa'atau-tuto'atasi. E mafai ona e mauaina le faʻaogaina o le Jaeger faʻaoga faʻatasi ma le poloaiga lenei:


Alu nei i http://localhost:16686/ ma filifili se auaunaga sa-web-app. Afai e le o fa'aalia le 'au'aunaga i le lisi pa'u-lalo, fa'aali/faia gaioiga i luga o le itulau ma fa'afou le atina'e. A uma lena, kiliki i luga o le faamau Su'e Fa'ailoga, lea o le a fa'aalia ai fa'ailoga lata mai - filifili so'o se - fa'amatalaga auiliili i luga o fa'ailoga uma o le a aliali mai:

Toe fo'i i microservices ma Istio. Vaega 1

O lenei faʻailoga e faʻaalia:

  1. Ua sau le talosaga istio-ingressgateway (o le fegalegaleaiga muamua lea ma se tasi o auʻaunaga, ma o le Trace ID e faʻatupuina mo le talosaga), a maeʻa ona tuʻuina atu e le faitotoa le talosaga i le tautua. sa-web-app.
  2. I le auaunaga sa-web-app o le talosaga e pikiina e le Envoy sidecar, o se "tamaitiiti" na faia i le va (o le mea lea tatou te vaʻai ai i faʻailoga) ma toe faʻafeiloaʻi i le koneteina sa-web-app. (aga - o se iunite talafeagai o galuega i Jaeger, o loʻo i ai se igoa, taimi amata o le taotoga ma lona umi. E mafai ona fa'anofo ma fa'atonu sipa. O se kalafi fa'ata'ita'i fa'ata'ita'i o sima e maua ai se fa'asologa. - tusa. fa'aliliu.)
  3. O iinei o loʻo faʻatautaia ai le talosaga i le auala su'esu'ega lagona. O nei faʻailoga ua uma ona gaosia e le talosaga, i.e. latou te manaomia suiga code.
  4. Mai le taimi nei, ua amatalia se talosaga POST i totonu sa-malosi. Fa'ailoga ID e tatau ona lafo mai sa-web-app.
  5. ...

mataʻi: I le Laasaga 4, e tatau i le talosaga ona vaʻai i ulutala na faia e Istio ma pasi atu i talosaga mulimuli ane e pei ona faʻaalia i le ata o loʻo i lalo:

Toe fo'i i microservices ma Istio. Vaega 1
(A) Istio e nafa ma le lafoina o ulutala; (B) Au'aunaga e nafa ma ulutala

O le tele o galuega e fai e Istio ona... fa'atupu fa'auluuluga mo talosaga o lo'o o'o mai, fa'atupu ni va'aiga fou i itu ta'itasi ma tu'u atu i luma. Peita'i, a aunoa ma le galulue fa'atasi ma fa'auluuluga i totonu o au'aunaga, o le a leiloa le ala atoa ole talosaga.

O ulutala nei e tatau ona amanaia:


E le o se galuega faigata, ae o le faafaigofieina o lona faatinoga ua uma ona i ai tele faletusi - mo se faʻataʻitaʻiga, i le sa-web-app auaunaga, o le RestTemplate client e tuʻuina atu nei ulutala pe afai e te faʻaopoopoina le Jaeger ma OpenTracing faletusi i ana vaisu.

Manatua o le Fa'amatalaga Fa'alogona fa'aalia fa'atinoga i Flask, Spring, ma le ASP.NET Core.

I le taimi nei ua manino le mea tatou te maua mai le pusa (pe toetoe lava o fafo o le pusa), seʻi o tatou vaʻavaʻai i le faʻaogaina lelei o auala, pulega o fesoʻotaʻiga, saogalemu, ma isi!

Manatua. fa'aliliu.: Faitau e uiga i lenei mea i le isi vaega o mea i luga o Istio mai Rinor Maloku, o faaliliuga o le a mulimuli mai i luga o la matou blog i se taimi lata mai. FUAFUAGA (14 Mati): O le vaega lona lua ua uma ona lomia.

PS mai faaliliu

Faitau foi i la matou blog:

puna: www.habr.com