Ar ais go microservices le Istio. Cuid 1

Ar ais go microservices le Istio. Cuid 1

Nóta. aistrigh.: Is cinnte go bhfuil mogaill seirbhíse ina ábhar te i mbonneagar an lae inniu le haghaidh iarratas tar éis ailtireacht microservice. Cé go bhféadfadh Istio a bheith ar an radar ag go leor innealtóirí DevOps, is táirge measartha nua é a thógann, cé go bhfuil sé casta ó thaobh na ngnéithe a sholáthraíonn sé, go leor ama chun aithne a chur air. Tá an t-innealtóir Gearmánach Rinor Maloku, atá i gceannas ar néalríomhaireacht do chliaint mhóra ag an gcuideachta teileachumarsáide Orange Networks, tar éis sraith iontach ábhar a scríobh a ligeann duit tumadóireacht a dhéanamh go tapa agus go domhain isteach i Istio. Tosaíonn sé a scéal leis an méid is féidir le Istio a dhéanamh agus conas is féidir leat é a fheiceáil go tapa le do shúile féin.

Istio — Tionscadal Foinse Oscailte, arna fhorbairt i gcomhar le foirne ó Google, IBM agus Lyft. Réitíonn sé na castachtaí a thagann chun cinn in iarratais bunaithe ar mhicrisheirbhísí, mar shampla, mar:

  • bainistíocht tráchta: teorainn ama, atriail, cothromú ualaigh;
  • slándála: fíordheimhniú agus údarú úsáideora deiridh;
  • inbhraite: rianú, monatóireacht, logáil.

Is féidir iad go léir a réiteach ag leibhéal an iarratais, ach ina dhiaidh sin ní bheidh do sheirbhísí mar "micrea" a thuilleadh. Is cur amú acmhainní cuideachta í an iarracht bhreise ar fad chun aghaidh a thabhairt ar na saincheisteanna seo a d’fhéadfaí a úsáid go díreach le haghaidh luach gnó. Smaoinigh ar shampla:

Bainisteoir Tionscadail: Cé chomh fada a thógann sé chun gné aiseolais a chur leis?
Forbróir: Dhá sprints.

MP: Cad é?.. Níl ann ach CRUD!
R: Is cuid éasca den tasc é CRUD a dhéanamh, ach ní mór dúinn fós úsáideoirí agus seirbhísí a fhíordheimhniú agus a údarú. Ós rud é go bhfuil an líonra neamhiontaofa, beidh ort iarratais arís agus arís eile a chur i bhfeidhm, chomh maith le patrún scoradáin chiorcaid i gcliant. Chomh maith leis sin, chun a chinntiú nach raibh an córas ar fad tuairteála, teorainneacha ama agus mórchóir (Féach níos déanaí san alt le haghaidh tuilleadh sonraí ar an dá phatrún luaite.), agus chun fadhbanna a bhrath, faireachán, rianú, […]

MP: Ó, cuirimis an ghné seo isteach sa tseirbhís Táirge ansin.

Sílim go bhfuil an smaoineamh soiléir: is mór an méid céimeanna agus iarracht a theastaíonn chun seirbhís amháin a chur leis. San Airteagal seo, féachfaimid ar conas a bhaineann Istio an chastacht ar fad a luaitear thuas (nach bhfuil dírithe ar loighic gnó) ó sheirbhísí.

Ar ais go microservices le Istio. Cuid 1

Tabhair faoi deara: Glacann an t-alt leis go bhfuil eolas oibre agat ar Kubernetes. Seachas sin, molaim léamh mo réamhrá ar Kubernetes agus gan ach ansin leanúint ar aghaidh ag léamh an ábhair seo.

Istio smaoineamh

I ndomhan gan Istio, déanann seirbhís amháin iarratais dhíreacha chuig seirbhís eile, agus i gcás teipe, ní mór don tseirbhís í féin a láimhseáil: iarracht nua a dhéanamh, socrú a dhéanamh le haghaidh teorainn ama, scoradán ciorcaid a oscailt, etc.

Ar ais go microservices le Istio. Cuid 1
Trácht líonra i Kubernetes

Ar an láimh eile, cuireann Istio réiteach speisialaithe ar fáil atá go hiomlán ar leithligh ó sheirbhísí agus feidhmeanna trí chur isteach ar idirghníomhaíocht líonra. Agus mar sin cuireann sé i bhfeidhm:

  • lamháltas locht: bunaithe ar an gcód stádais sa fhreagra, tuigeann sé má theip ar an iarratas agus cuireann sé isteach arís é.
  • Rolláin Chanáracha: ní atreoraíonn ach céatadán seasta iarratas chuig an leagan nua den tseirbhís.
  • Monatóireacht agus Méadracht: cé chomh fada a thóg sé ar an tseirbhís freagra a thabhairt?
  • Rianú agus inbhraite: Cuireann sé ceanntásca speisialta le gach iarratas agus rianaíonn sé iad trasna an bhraisle.
  • slándála: Aisghabhann comhartha JWT, fíordheimhníonn agus údaraíonn úsáideoirí.

Níl anseo ach cuid de na féidearthachtaí (i ndáiríre ach cúpla!) chun tú a chur in iúl. Anois, a ligean ar Léim isteach na sonraí teicniúla!

Ailtireacht

Idircheapann Istio gach trácht líonra agus cuireann sé sraith rialacha i bhfeidhm air, ag cur seachfhreastalaí cliste i bhfoirm coimeádán taobhcharr isteach i ngach pod. Proxies a ghníomhaíonn gach féidearthacht foirm a Eitleán Sonraí, agus is féidir iad a choigeartú go dinimiciúil le Plána Rialaithe.

Eitleán Sonraí

Ceadaíonn na proxies a chuirtear isteach sna pods Istio na ceanglais a theastaíonn uainn a bhaint amach go héasca. Mar shampla, déanaimis seiceáil ar na feidhmeanna retries agus scoradáin chiorcaid.

Ar ais go microservices le Istio. Cuid 1
Conas a chuirtear atriail agus briseadh ciorcaid i bhfeidhm san Toscaire

Achoimre:

  1. Toscaire (tá muid ag caint faoi seachfhreastalaí atá suite i gcoimeádán taobhcharr, a dháiltear agus conas táirge ar leith - thart. aistrigh.) cuireann sé iarratas chuig an gcéad ásc de sheirbhís B agus go mainneoidh sé.
  2. Tá an Toscaire Sidecar ag iarraidh arís (triail arís). (1)
  3. Seoltar an t-iarratas ar theip air ar ais chuig an seachfhreastalaí a ghlaoigh air.
  4. Osclaíonn sé seo an Circuit Breaker agus glaonna ar an chéad seirbhís eile le haghaidh iarratais ina dhiaidh sin. (2)

Ciallaíonn sé seo nach gá duit úsáid a bhaint as an gcéad leabharlann Retry eile, ní gá duit do chur i bhfeidhm féin Briseadh Ciorcad agus Fionnachtain Seirbhíse a dhéanamh sa teanga ríomhchlárúcháin X, Y nó Z. Tá sé seo ar fad agus níos mó ar fáil as an bosca i Istio agus ní gá uimh athruithe cód.

Go hiontach! Anois b'fhéidir gur mhaith leat dul ar thuras le Istio, ach tá roinnt amhras fós, ceisteanna oscailte. Más réiteach uilíoch é seo do gach ócáid ​​​​sa saol, ansin tá amhras dlisteanach agat: tar éis an tsaoil, i ndáiríre níl gach réiteach den sórt sin oiriúnach d'aon chás.

Agus ar deireadh iarrann tú: "An féidir é a shaincheapadh?"

Anois tá tú réidh le haghaidh turas farraige - agus cuirimis aithne ar an bPlána Rialaithe.

Plána Rialaithe

Tá trí chomhpháirt ann: Píolótach, Meascthóir и Citadel, a chumraíonn Toscairí le chéile chun trácht a stiúradh, a chuireann beartais i bhfeidhm, agus a bhailíonn sonraí teiliméadrachta. Go scéimreach, tá an chuma ar fad mar seo:

Ar ais go microservices le Istio. Cuid 1
Idirghníomhaíocht an Phlána Rialaithe le Plána Sonraí

Tá toscairí (i.e. eitleán sonraí) cumraithe le CRD Kubernetes (Sainmhínithe Acmhainní Saincheaptha) arna sainmhíniú ag Istio agus deartha go sonrach chun na críche seo. Is éard a chiallaíonn sé seo duit nach bhfuil iontu ach acmhainn eile in Kubernetes a bhfuil comhréir choitianta acu. Nuair a chruthófar an acmhainn seo, tógfar an t-eitleán rialaithe suas agus cuirfear i bhfeidhm é ar na Toscairí.

Gaol seirbhísí le Istio

Tá cur síos déanta againn ar an ngaol atá ag Istio le seirbhísí, ach ní ar an mbealach eile: cén bhaint atá ag seirbhísí le Istio?

Le bheith macánta, tá a fhios ag seirbhísí faoi láithreacht Istio chomh maith le heolas iasc faoi uisce, nuair a chuireann siad ceist orthu féin: “Cad is uisce ann ar aon nós?”.

Ar ais go microservices le Istio. Cuid 1
Léiriú Victoria Dimitrakopoulos: Conas is maith leat an t-uisce? - Cad is uisce ann ar aon nós?

Mar sin, is féidir leat braisle oibre a ghlacadh agus tar éis na comhpháirteanna Istio a imscaradh, leanfaidh na seirbhísí atá ann ag obair, agus tar éis na comhpháirteanna seo a bhaint, beidh gach rud go breá arís. Tá sé soiléir sa chás seo go gcaillfidh tú na deiseanna a sholáthraíonn Istio.

Go leor teoiric - cuirimis an t-eolas seo i bhfeidhm!

Istio i gcleachtas

Éilíonn Istio braisle Kubernetes le 4 vCPU ar a laghad agus 8 GB RAM ar fáil. Chun an braisle a ardú go tapa agus na treoracha ón alt a leanúint, molaim úsáid a bhaint as an Google Cloud Platform, a thairgeann úsáideoirí nua $300 saor in aisce.

Tar éis an braisle a chruthú agus rochtain ar Kubernetes a shocrú tríd an bhfóntas consól, is féidir leat Istio a shuiteáil tríd an mbainisteoir pacáiste Helm.

Suiteáil Helm

Suiteáil an cliant Helm ar do ríomhaire mar a thuairiscítear i doiciméadú oifigiúil. Úsáidfimid é chun teimpléid a ghiniúint chun Istio a shuiteáil sa chéad chuid eile.

Suiteáil

Íosluchtaigh Istio acmhainní ó scaoileadh is déanaí (athraíodh nasc an údair bhunaidh le leagan 1.0.5 go dtí an ceann reatha, i.e. 1.0.6 - approx. transl.), sliocht an t-ábhar chuig eolaire amháin, a mbeidh mé ag tagairt dó mar [istio-resources].

Chun acmhainní Istio a shainaithint go héasca, cruthaigh ainmspás i mbraisle K8s istio-system:

$ kubectl create namespace istio-system

Críochnaigh an tsuiteáil trí nascleanúint a dhéanamh chuig an eolaire [istio-resources] agus an t-ordú á rith:

$ 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

Aschuirfidh an t-ordú seo na príomhchodanna de Istio chuig comhad istio.yaml. Táimid tar éis an teimpléad caighdeánach a mhodhnú dúinn féin trí na paraiméadair seo a leanas a shonrú:

  • global.mtls.enabled suiteáilte i false (i.e. tá fíordheimhniú mTLS díchumasaithe - thart ar. transl.)ár bpróiseas dhátú a shimpliú;
  • tracing.enabled cuireann sé ar chumas lorg iarratas le Jaeger;
  • kiali.enabled cuireann sé Kiali isteach i mbraisle chun seirbhísí agus trácht a shamhlú;
  • grafana.enabled insealbhaíonn sé Grafana chun an mhéadracht bhailithe a shamhlú.

Cuir na hacmhainní ginte i bhfeidhm leis an ordú:

$ kubectl apply -f istio.yaml

Tá suiteáil Istio sa bhraisle críochnaithe! Fan go dtí go mbeidh gach pods san ainmspás istio-system beidh sé in ann RunningCompletedtríd an ordú thíos a rith:

$ kubectl get pods -n istio-system

Táimid réidh anois chun leanúint ar aghaidh go dtí an chéad chuid eile, áit a ndéanfaimid an t-iarratas a ardú agus a rith.

Ailtireacht Feidhmchláir Anailís Mothúchán

Bainimis úsáid as an sampla den fheidhmchlár microservice Anailís Mothúcháin a úsáideadh san a luadh cheana Airteagal Réamhrá Kubernetes..... Tá sé casta go leor féidearthachtaí Istio a thaispeáint go praiticiúil.

Tá ceithre mhicrisheirbhísí san fheidhmchlár:

  1. TSeirbhís SA-Frontend, a fhreastalaíonn ar an bhfeidhmchlár tosaigh ar Reactjs;
  2. TSeirbhís SA App Gréasáin, a fhreastalaíonn ar cheisteanna Anailíse Mothúcháin;
  3. TSeirbhís SA loighica fheidhmíonn é féin anailís meon;
  4. TSeirbhís Aiseolas SA, a fhaigheann aiseolas ó úsáideoirí maidir le cruinneas na hanailíse a rinneadh.

Ar ais go microservices le Istio. Cuid 1

Sa léaráid seo, chomh maith le seirbhísí, feicimid freisin an Rialaitheoir Ingress, a thugann Kubernetes iarratais isteach chuig na seirbhísí comhfhreagracha. Úsáideann Istio coincheap den chineál céanna mar chuid de Thairseach Ingress, agus beidh sonraí ina dhiaidh sin.

Feidhmchlár a sheoladh le seachfhreastalaí ó Istio

Le haghaidh oibríochtaí breise a luaitear san alt, Clón do stór istio-máistreacht. Tá feidhmchlár agus manifests ann do Kubernetes agus Istio.

Taobhcharranna á gcur isteach

Is féidir cur isteach a dhéanamh go huathoibríochde láimh. Chun coimeádáin taobhcharr a chur isteach go huathoibríoch, ní mór duit an lipéad a shocrú don ainmspás istio-injection=enabled, a dhéantar leis an ordú seo a leanas:

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

Anois beidh gach pod a imlonnófar sa spás ainm réamhshocraithe (default) gheobhaidh sé a coimeádán taobhcharr. Chun é seo a fhíorú, déanaimis feidhmchlár tástála a imscaradh trí dhul chuig eolaire fréimhe an taisc [istio-mastery] agus an t-ordú seo a leanas á rith:

$ 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

Tar éis na seirbhísí a imscaradh, seiceáil go bhfuil dhá choimeádán ag na pods (leis an tseirbhís féin agus a taobhcharr) tríd an ordú a rith kubectl get pods agus ag déanamh cinnte go faoin gcolún READY luach sonraithe 2/2, ag siombail go bhfuil an dá choimeádán ag rith:

$ 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

Breathnaíonn sé mar seo ó thaobh amhairc:

Ar ais go microservices le Istio. Cuid 1
Seachfhreastalaí toscaire i gceann de na pods

Anois go bhfuil an feidhmchlár ar bun agus ag feidhmiú, ní mór dúinn ligean don trácht atá ag teacht isteach an feidhmchlár.

Geata Ingress

Is é an cleachtas is fearr chun é seo a bhaint amach (ceadaigh trácht sa bhraisle). Geata Ingress in Istio, atá suite ag “imeall” an bhraisle agus a ligeann duit gnéithe Istio a chumasú mar ródú, cothromú ualaigh, slándáil, agus monatóireacht ar thrácht ag teacht isteach.

Suiteáladh comhpháirt Geata Ingress agus an tseirbhís a chuireann ar aghaidh amach é ar an mbraisle le linn suiteáil Istio. Chun seoladh IP seachtrach seirbhíse a fháil amach, rith:

$ 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

Leanfaimid le rochtain a fháil ar an bhfeidhmchlár ag baint úsáide as an IP seo (déanfaidh mé tagairt dó mar EXTERNAL-IP), mar sin ar mhaithe le caoithiúlacht, scríobhfaimid an luach chuig athróg:

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

Má dhéanann tú iarracht an IP seo a rochtain trí bhrabhsálaí anois, gheobhaidh tú earráid Níl an tSeirbhís ar fáil, mar gheall ar de réir réamhshocraithe cuireann Istio bac ar gach trácht isteachgo dtí go sainítear Gateway.

Acmhainn Geata

Is CRD (Sainmhíniú Acmhainní Saincheaptha) é Gateway i Kubernetes, a shainmhínítear tar éis Istio a shuiteáil i mbraisle agus a chuireann ar chumas an cumas calafoirt, prótacal, agus ina hóstach a shonrú ar mhaith linn trácht ag teacht isteach a cheadú.

Inár gcás, ba mhaith linn trácht HTTP ar chalafort 80 a cheadú do gach óstach. Tá an fhadhb réadaithe ag an sainmhíniú seo a leanas (http-geata.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:
- "*"

Níl aon mhíniú ag teastáil ón gcumraíocht seo ach amháin don roghnóir istio: ingressgateway. Leis an roghnóir seo, is féidir linn a shonrú cén Geata Ingress chun an chumraíocht a chur i bhfeidhm. Is é ár gcás, is é seo an rialtóir Ingress Gateway, a suiteáladh de réir réamhshocraithe i Istio.

Cuirtear an chumraíocht i bhfeidhm tríd an ordú seo a leanas a ghlaoch:

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

Ceadaíonn an geata rochtain anois ar chalafort 80 ach níl aon tuairim aige cén áit ar féidir na hiarratais a threorú. Chun seo beidh ort Seirbhísí Fíorúla.

Acmhainn Seirbhíse Fíorúla

Insíonn an tSeirbhís Fhíorúil do Thairseach Ingress conas iarratais a cheadaítear laistigh den bhraisle a threorú.

Ní mór iarratais ar ár n-iarratas a thagann tríd an http-gateway a sheoladh chuig na seirbhísí sa-frontend, sa-web-app agus sa-aiseolas:

Ar ais go microservices le Istio. Cuid 1
Bealaí le cumrú le VirtualServices

Smaoinigh ar na hiarratais ba chóir a sheoladh chuig SA-Frontend:

  • Cluiche cruinn feadh na slí / ba chóir iad a sheoladh chuig SA-Frontend chun index.html a fháil;
  • Cosáin le réimír /static/* ba chóir iad a sheoladh chuig SA-Frontend chun comhaid statacha a úsáid san aghaidh, mar CSS agus JavaScript;
  • Cosáin a mheaitseálann an slonn rialta '^.*.(ico|png|jpg)$', a sheoladh chuig SA-Frontend, mar gheall ar Seo iad na pictiúir atá ar taispeáint ar an leathanach.

Baintear an cur i bhfeidhm leis an gcumraíocht seo a leanas (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

Pointí tábhachtacha:

  1. Tagraíonn an tSeirbhís Fhíorúil seo d'iarratais a thagann tríd http-geata;
  2. В destination sainmhíníonn sé an tseirbhís a seoltar na hiarratais chuici.

Tabhair faoi deara: Stóráiltear an chumraíocht thuas i gcomhad sa-virtualservice-external.yaml, ina bhfuil socruithe freisin maidir le ródú chuig SA-WebApp agus SA-Aiseolas, ach tá sé giorraithe anseo san alt le go mbeidh sé gonta.

Cuir an tSeirbhís Fhíorúil i bhfeidhm trí ghlaoch a chur ar:


Tabhair faoi deara: Nuair a dhéanaimid acmhainní Istio a chur i bhfeidhm, cuireann an Freastalaí API Kubernetes teagmhas a fhaigheann an Plána Rialaithe Istio, agus ina dhiaidh sin, cuirtear an chumraíocht nua i bhfeidhm ar gach seachfhreastalaí Toscaire pod. Agus is cosúil gur Toscaire eile é rialtóir Gateway Ingress atá cumraithe sa Phlána Rialaithe. Breathnaíonn sé seo go léir mar seo sa léaráid:

Ar ais go microservices le Istio. Cuid 1
Cumraíocht Istio-IngressGateway le haghaidh ródú iarratais

Tá Anailís Mothúchán ar fáil anois ar http://{EXTERNAL-IP}/. Ná bí buartha má fhaigheann tú stádas Gan Aimsiú: uaireanta tógann sé beagán níos faide chun an chumraíocht a chur i bhfeidhm agus chun na caches Toscaire a nuashonrú.

Sula dtéann tú ar aghaidh, imirt leis an iarratas le haghaidh beagán chun trácht a ghiniúint. (tá a láithreacht riachtanach ar mhaithe le soiléireacht i ngníomhartha ina dhiaidh sin - thart ar. transl.).

Kiali: inbhraiteacht

Chun comhéadan riaracháin Kiali a fháil, rith an t-ordú seo a leanas:


…agus oscailte http://localhost:20001/trí logáil isteach mar admin/admin. Anseo gheobhaidh tú go leor gnéithe úsáideacha, mar shampla, chun cumraíocht na gcomhpháirteanna Istio a sheiceáil, seirbhísí a shamhlú ó fhaisnéis a bhailítear trí iarratais líonra a idircheapadh, freagraí a fháil ar na ceisteanna “Cé atá i dteagmháil le cé leis?”, “Cén leagan den tseirbhís atá ag fulaingt teipeanna?" agus mar sin de. Go ginearálta, déan iniúchadh ar na féidearthachtaí a bhaineann le Kiali sula dtéann tú ar aghaidh go dtí an mhéadracht a léirshamhlú le Grafana.

Ar ais go microservices le Istio. Cuid 1

Grafana: léirshamhlú na méadrachta

Is i Prometheus a chríochnaíonn na méadrachtaí a bailíodh in Istio agus déantar iad a léirshamhlú le Grafana. Chun comhéadan riaracháin Grafana a bhaint amach, rith an t-ordú thíos, ansin oscail http://localhost:3000/:


Trí chliceáil ar an roghchlár Baile barr ar chlé agus roghnaigh Painéal na Seirbhíse Istio sa chúinne uachtarach ar chlé, tosaigh le seirbhís sa-gréasáin-appchun amharc ar an méadracht bhailithe:

Ar ais go microservices le Istio. Cuid 1

Anseo táimid ag fanacht le feidhmíocht folamh agus go hiomlán leadránach - ní cheadóidh an bhainistíocht é seo choíche. Cruthaimis ualach beag leis an ordú seo a leanas:


Anois tá graif i bhfad níos deise againn, agus ina theannta sin, na huirlisí iontacha Prometheus le haghaidh monatóireachta agus Grafana le haghaidh méadracht amhairc, a ligfidh dúinn foghlaim faoi fheidhmíocht, stádas sláinte, feabhsuithe / díghrádú ar sheirbhísí le himeacht ama.

Ar deireadh, déanaimis féachaint ar rianú iarratais i seirbhísí.

Jaeger: rianú

Beidh gá againn a rianú, mar dá mhéad seirbhísí atá againn is amhlaidh is deacra a bheidh sé teacht ar chúis na teipe. Breathnaímid ar chás simplí ón bpictiúr thíos:

Ar ais go microservices le Istio. Cuid 1
Sampla tipiciúil d'iarratas randamach ar theip air

Tagann iarratas, titeann - cad é an chúis? An chéad seirbhís? Nó sa dara háit? Tá eisceachtaí sa dá cheann - déanaimis féachaint ar logaí gach ceann acu. Cé chomh minic a ghlac tú féin é seo a dhéanamh? Tá ár bpost níos cosúla le bleachtairí bogearraí ná le forbróirí…

Is fadhb fhorleathan é seo i micrisheirbhísí agus déantar í a réiteach trí chórais rianaithe dáilte, ina n-aistríonn seirbhísí ceanntásc uathúil dá chéile, agus ina dhiaidh sin atreoraítear an fhaisnéis seo chuig an gcóras rianaithe, áit a ndéantar í a chur i gcomparáid leis na sonraí iarratais. Seo léiriú:

Ar ais go microservices le Istio. Cuid 1
Úsáidtear TraceId chun an t-iarratas a shainaithint

Úsáideann Istio Jaeger Tracer, a chuireann creat API OpenTracing neamhspleách ar an díoltóir i bhfeidhm. Is féidir leat rochtain a fháil ar chomhéadan úsáideora Jaeger leis an ordú seo a leanas:


Anois téigh go dtí http://localhost:16686/ agus roghnaigh seirbhís sa-gréasáin-app. Mura dtaispeántar an tseirbhís sa roghchlár anuas, taispeáin/gin gníomhaíocht ar an leathanach agus nuashonraigh an comhéadan. Ina dhiaidh sin cliceáil ar an gcnaipe Aimsigh rianta, a thaispeánfaidh na rianta is déanaí - roghnaigh aon - beidh faisnéis mhionsonraithe ar gach rian le feiceáil:

Ar ais go microservices le Istio. Cuid 1

Léiríonn an rian seo:

  1. Tagann an t-iarratas isteach geata isteach (seo an chéad idirghníomhaíocht le ceann de na seirbhísí, agus gintear Aitheantais Lorgaireachta don iarratas), agus seolann an geata an t-iarratas chuig an tseirbhís ina dhiaidh sin sa-gréasáin-app.
  2. I seirbhís sa-gréasáin-app Piocann taobhcharr an Toscaire an t-iarratas, cruthaítear "leanbh" sa réise (sin an fáth a fheicimid i rianta é) agus a atreoraítear chuig an gcoimeádán sa-gréasáin-app. (Réise - aonad loighciúil oibre in Jaeger, a bhfuil ainm aige, am tosaithe na hoibríochta agus fad na hoibríochta. Is féidir raonta a neadú agus a ordú. Cruthaíonn graf aic-imthriallach treoraithe de réisí rian. - thart. aistrigh.)
  3. Anseo déantar an t-iarratas a phróiseáil tríd an modh Anailís sentiment. Tá na rianta seo ginte cheana féin ag an bhfeidhmchlár, i.e. bhí athruithe cód ag teastáil uathu.
  4. Ón nóiméad seo, tionscnaítear iarratas POST i sa-loighic. Ní mór rian aitheantais a chur ar aghaidh ó sa-gréasáin-app.
  5. ...

Tabhair faoi deara: I gcéim 4, ba cheart go bhfeicfeadh an t-iarratas na ceanntásca a ghineann Istio agus iad a chur ar aghaidh chuig iarratais ina dhiaidh sin, mar a thaispeántar san íomhá thíos:

Ar ais go microservices le Istio. Cuid 1
(A) Is é Istio atá freagrach as ceanntásca a chur ar aghaidh; (B) Tá seirbhísí freagrach as ceannteidil

Istio a dhéanann an chuid is mó den obair mar gheall ar gineann sé ceanntásca le haghaidh iarratais isteach, cruthaíonn sé raonta nua i ngach taobhchúram agus cuireann sé ar aghaidh iad. Mar sin féin, gan oibriú le ceanntásca laistigh de sheirbhísí, caillfear cosán rian an iarratais iomlán.

Ní mór na ceannteidil seo a leanas a chur san áireamh (ar aghaidh):


Is é seo an tasc simplí, ach a shimpliú a chur i bhfeidhm, tá cheana féin go leor leabharlann - mar shampla, sa tseirbhís sa-web-app, cuireann an cliant RestTemplate na ceannteidil seo ar aghaidh mura gcuireann tú ach na leabharlanna Jaeger agus OpenTracing leis a spleáchais.

Tabhair faoi deara go léiríonn an t-iarratas Anailís Mothúcháin feidhmiúcháin i Flask, Spring, agus ASP.NET Core.

Anois go bhfuil sé soiléir cad atá á fháil againn as an mbosca (nó beagnach as an mbosca), féachaimis ar ródú mionchoigeartaithe, bainistíocht tráchta líonra, slándáil, agus go leor eile!

Nóta. aistrigh.: léigh faoi sa chéad chuid eile d'ábhair ar Istio ó Rinor Maloku, a leanfaidh na haistriúcháin inár mblag go luath amach anseo. Suas chun dáta (14ú Márta): An dara cuid foilsithe cheana.

PS ó aistritheoir

Léigh freisin ar ár mblag:

Foinse: will.com