Air ais gu microservices le Istio. Pàirt 1

Air ais gu microservices le Istio. Pàirt 1

Thoir an aire. eadar-theangachadh.: Tha mogalan seirbheis gu cinnteach air a thighinn gu bhith na chuspair teth ann am bun-structar an latha an-diugh airson tagraidhean às deidh ailtireachd microservice. Ged a dh’ fhaodadh Istio a bhith air radar mòran de innleadairean DevOps, is e toradh gu math ùr a th ’ann a dh’ fhaodadh, ged a tha e iom-fhillte a thaobh feartan a bheir e seachad, tòrr ùine a thoirt airson eòlas fhaighinn. Tha an innleadair Gearmailteach Rinor Maloku, a tha os cionn coimpiutaireachd sgòthan airson teachdaichean mòra aig a ’chompanaidh cian-conaltraidh Orange Networks, air sreath iongantach de stuthan a sgrìobhadh a leigeas leat dàibheadh ​​​​gu luath agus gu domhainn a-steach do Istio. Bidh e a’ tòiseachadh na sgeulachd aige le dè as urrainn do Istio a dhèanamh agus mar a chì thu gu sgiobalta e le do shùilean fhèin.

Istio - Pròiseact Open Source, air a leasachadh ann an co-obrachadh le sgiobaidhean bho Google, IBM agus Lyft. Bidh e a’ fuasgladh nan iom-fhillteachd a tha ag èirigh ann an tagraidhean stèidhichte air microservices, mar eisimpleir, leithid:

  • rianachd trafaig: ùine a-mach, ath-fheuchainn, cothromachadh luchdan;
  • Tèarainteachd: dearbhadh agus ùghdarras cleachdaiche deireannach;
  • amhairc: lorg, sgrùdadh, logadh.

Faodar a h-uile gin dhiubh fhuasgladh aig ìre an tagraidh, ach às deidh sin cha bhith na seirbheisean agad mar “micro” tuilleadh. Tha a h-uile oidhirp a bharrachd gus dèiligeadh ris na cùisean sin na sgudal air goireasan companaidh a dh’ fhaodadh a bhith air an cleachdadh gu dìreach airson luach gnìomhachais. Beachdaich air eisimpleir:

Manaidsear Pròiseict: Dè cho fada ’s a bheir e gus feart fios-air-ais a chur ris?
Leasaiche: Dà sprint.

BP: Dè?.. Chan eil ann ach CRUD!
R: Is e dèanamh CRUD am pàirt furasta den obair, ach feumaidh sinn fhathast luchd-cleachdaidh agus seirbheisean a dhearbhadh agus a cheadachadh. Leis gu bheil an lìonra neo-earbsach, feumaidh tu grunn iarrtasan a chuir an gnìomh, a bharrachd air pàtran brisidh cuairteachaidh ann an luchd-dèiligidh. Cuideachd, gus dèanamh cinnteach nach do thuit an siostam gu lèir, amannan-ama agus mòr-chinn (Faic nas fhaide air adhart san artaigil airson tuilleadh fiosrachaidh mun dà phàtran ainmichte.), agus gus duilgheadasan a lorg, sgrùdadh, lorg, […]

BP: O, leig dhuinn dìreach am feart seo a chuir a-steach don t-seirbheis Bathar an uairsin.

Tha mi a’ smaoineachadh gu bheil am beachd soilleir: tha na ceumannan agus an oidhirp a dh’ fheumar gus aon sheirbheis a chur ris gu math mòr. San artaigil seo, bheir sinn sùil air mar a bheir Istio air falbh a h-uile iom-fhillteachd a chaidh ainmeachadh gu h-àrd (nach eil air a chuimseachadh le loidsig gnìomhachais) bho sheirbheisean.

Air ais gu microservices le Istio. Pàirt 1

thuirt: Tha an artaigil a’ gabhail ris gu bheil eòlas obrach agad air Kubernetes. Rud eile, tha mi a ’moladh leughadh mo ro-ràdh do Kubernetes agus dìreach an uairsin lean ort a’ leughadh an stuth seo.

Istio beachd

Ann an saoghal às aonais Istio, bidh aon sheirbheis a’ dèanamh iarrtasan dìreach gu seirbheis eile, agus ma dh’fhàilligeas, feumaidh an t-seirbheis a làimhseachadh fhèin: dèan oidhirp ùr, ullaich airson ùine a-mach, fosgail inneal-brisidh, msaa.

Air ais gu microservices le Istio. Pàirt 1
Trafaic lìonra ann an Kubernetes

Air an làimh eile, tha Istio a 'tabhann fuasgladh sònraichte a tha gu tur air leth bho sheirbheisean agus gnìomhan le bhith a' cur bacadh air eadar-obrachadh lìonra. Agus mar sin tha e a 'cur an gnìomh:

  • fulangas lochd: stèidhichte air a 'chòd inbhe anns an fhreagairt, tha e a' tuigsinn ma dh'fhàillig an t-iarrtas agus ath-chuir a-steach e.
  • Ro-ràdh Canary: ag ath-stiùireadh dìreach ceudad stèidhichte de dh'iarrtasan chun dreach ùr den t-seirbheis.
  • Sgrùdadh agus Metrics: dè cho fada ’s a thug e airson an t-seirbheis freagairt?
  • Lorg agus faicsinneachd: A’ cur cinn-cinn sònraichte ris gach iarrtas agus gan lorg air feadh a’ bhraisle.
  • Tèarainteachd: A’ faighinn air ais comharra JWT, a’ dearbhadh agus a’ ceadachadh luchd-cleachdaidh.

Is e seo dìreach beagan de na cothroman (gu dearbh dìreach beagan!) Airson do mhealladh. A-nis leig dhuinn dàibheadh ​​​​a-steach don fhiosrachadh teicnigeach!

Ailtireachd

Bidh Istio a’ toirt a-steach a h-uile trafaic lìonraidh agus a ’cur an sàs seata de riaghailtean ris, a’ cuir a-steach neach-ionaid snasail ann an cruth soitheach càr-taobh a-steach do gach pod. Bidh proxies a chuireas an gnìomh a h-uile comas a’ cruthachadh a Plèana dàta, agus faodar an atharrachadh gu fiùghantach le Plèana smachd.

Plèana dàta

Tha na proxies a tha air an cur a-steach do na pods a 'toirt cothrom do Istio na riatanasan a tha a dhìth oirnn a choileanadh gu furasta. Mar eisimpleir, leig dhuinn sùil a thoirt air na gnìomhan ath-thionndaidh agus brisidh cuairteachaidh.

Air ais gu microservices le Istio. Pàirt 1
Mar a tha ath-thagradh agus briseadh chuairtean air an cur an gnìomh ann an Envoy

Gus geàrr-chunntas:

  1. Teachdaire (tha sinn a’ bruidhinn mu neach-ionaid a tha suidhichte ann an soitheach càr-taobh, a tha air a chuairteachadh agus ciamar toradh fa leth - mu thuairmeas. eadar-theangachadh.) a’ cur iarrtas chun chiad àite de sheirbheis B agus a’ fàiligeadh.
  2. Tha Envoy Sidecar a’ feuchainn a-rithist (feuch a-rithist). (1)
  3. Thèid an t-iarrtas a dh'fhàillig a thilleadh chun neach-ionaid a dh'ainmich e.
  4. Bidh seo a’ fosgladh an Circuit Breaker agus a’ gairm an ath sheirbheis airson iarrtasan às deidh sin. (2)

Tha seo a’ ciallachadh nach fheum thu an ath leabharlann Retry a chleachdadh, cha leig thu leas do chur an gnìomh fhèin de Circuit Breaking agus Service Discovery ann an cànan prògramadh X, Y no Z. Tha seo uile agus barrachd ri fhaighinn a-mach às an bogsa ann an Istio agus chan eil feum air chan eil atharraichean còd.

Sgoinneil! A-nis is dòcha gum bi thu airson a dhol air turas-mara le Istio, ach tha teagamhan ann fhathast, ceistean fosgailte. Ma tha seo na fhuasgladh uile-choitcheann airson a h-uile turas nad bheatha, tha amharas dligheach agad: às deidh a h-uile càil, gu dearbh, chan eil a h-uile fuasgladh mar sin freagarrach airson cùis sam bith.

Agus mu dheireadh tha thu a’ faighneachd: “A bheil e comasach a ghnàthachadh?”

A-nis tha thu deiseil airson turas mara - agus faigh sinn eòlas air Control Plane.

Plèana smachd

Tha e air a dhèanamh suas de thrì phàirtean: phìleat, Measgadair и Citadel, a bhios còmhla a’ rèiteachadh Teachdairean gus trafaic a shlighe, poileasaidhean a chuir an sàs, agus dàta telemetry a chruinneachadh. A thaobh sgeama, tha e uile a’ coimhead mar seo:

Air ais gu microservices le Istio. Pàirt 1
Eadar-obrachadh plèana smachd le plèana dàta

Tha teachdairean (ie plèana dàta) air an rèiteachadh le CRD (Mìneachaidhean Goireasan Custom) air a mhìneachadh le Istio agus air a dhealbhadh gu sònraichte airson an adhbhair seo. Is e a tha seo a’ ciallachadh dhut gur e dìreach goireas eile a th’ annta ann an Kubernetes le co-chòrdadh eòlach. Aon uair ‘s gu bheil e air a chruthachadh, thèid an goireas seo a thogail leis a’ phlèana smachd agus a chuir an sàs ann an teachdaichean.

Dàimh sheirbheisean ri Istio

Tha sinn air cunntas a thoirt air an dàimh a th’ aig Istio ri seirbheisean, ach chan ann air an rathad eile: ciamar a tha seirbheisean a’ buntainn ri Istio?

Gus a bhith onarach, tha fios aig seirbheisean mu làthaireachd Istio a bharrachd air iasg mu uisge, nuair a bhios iad a ’faighneachd dhaibh fhèin:“ Dè a th ’ann an uisge co-dhiù?”.

Air ais gu microservices le Istio. Pàirt 1
Dealbh Victoria Dimitrakopoulos: Ciamar a tha an t-uisge a' còrdadh riut? - Dè th' ann an uisge co-dhiù?

Mar sin, faodaidh tu cruinneachadh obrach a ghabhail agus às deidh dhut na pàirtean Istio a chuir a-steach, cumaidh na seirbheisean ann ag obair, agus às deidh dhut na co-phàirtean sin a thoirt air falbh, bidh a h-uile dad gu math a-rithist. Tha e soilleir sa chùis seo gun caill thu na cothroman a thug Istio seachad.

Teòiridh gu leòr - leig dhuinn an t-eòlas seo a chuir an gnìomh!

Istio ann an cleachdadh

Feumaidh Istio cruinneachadh Kubernetes le co-dhiù 4 vCPUs agus 8 GB de RAM ri fhaighinn. Gus am brabhsair a thogail gu sgiobalta agus an stiùireadh bhon artaigil a leantainn, tha mi a ’moladh a bhith a’ cleachdadh Àrd-ùrlar Google Cloud, a bheir seachad luchd-cleachdaidh ùr $300 saor an asgaidh.

Às deidh dhut am brabhsair a chruthachadh agus ruigsinneachd gu Kubernetes a stèidheachadh tron ​​​​ghoireas tòcan, faodaidh tu Istio a chuir a-steach tro mhanaidsear pacaid Helm.

Stàladh Helm

Stàlaich an cleachdaiche Helm air a 'choimpiutair agad mar a chaidh a mhìneachadh ann an sgrìobhainnean oifigeil. Cleachdaidh sinn e gus teamplaidean a chruthachadh airson stàladh Istio san ath earrann.

Stàladh

Luchdaich sìos goireasan Istio bho an fhoillseachadh as ùire (tha ceangal an ùghdair tùsail ri dreach 1.0.5 air atharrachadh chun fhear a th’ ann an-dràsta, i.e. 1.0.6 - approx. transl.), thoir a-mach an t-susbaint gu aon eòlaire, air an toir mi iomradh mar [istio-resources].

Airson goireasan Istio a chomharrachadh gu furasta, cruthaich àite-ainm ann am buidheann K8s istio-system:

$ kubectl create namespace istio-system

Cuir crìoch air an stàladh le bhith a’ seòladh chun an eòlaire [istio-resources] agus ruith an àithne :

$ 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

Bheir an àithne seo a-mach na prìomh phàirtean de Istio gu faidhle istio.yaml. Tha sinn air an teamplaid àbhaisteach atharrachadh dhuinn fhìn le bhith a’ sònrachadh nam paramadairean a leanas:

  • global.mtls.enabled air a chuir a-steach false (ie tha dearbhadh mTLS à comas - approx. transl.)gus ar pròiseas suirghe a dhèanamh nas sìmplidhe;
  • tracing.enabled a’ comasachadh lorg iarrtasan le Jaeger;
  • kiali.enabled cuir Kiali a-steach do bhuidheann gus seirbheisean agus trafaic fhaicinn;
  • grafana.enabled a’ stàladh Grafana gus na meatrach cruinnichte fhaicinn.

Cuir na goireasan a chaidh a chruthachadh leis an àithne:

$ kubectl apply -f istio.yaml

Tha stàladh Istio anns a’ bhuidheann deiseil! Fuirich gus am bi a h-uile pod san raon-ainm istio-system bidh e comasach Running no Completedle bhith a’ ruith an àithne gu h-ìosal:

$ kubectl get pods -n istio-system

Tha sinn a-nis deiseil airson leantainn air adhart chun ath earrann, far am bi sinn a’ togail agus a’ ruith an tagraidh.

Ailtireachd Iarrtas Mion-sgrùdadh Sentiment

Cleachdaidh sinn an eisimpleir den tagradh microservice Mion-sgrùdadh Mothachadh a chaidh a chleachdadh anns an iomradh mu thràth Ro-ràdh artaigil gu Kubernetes. Tha e iom-fhillte gu leòr na comasan aig Istio a nochdadh ann an cleachdadh.

Tha an tagradh air a dhèanamh suas de cheithir microservices:

  1. seirbheis SA-aghaidh, a tha a 'frithealadh an tagraidh aghaidh air Reactjs;
  2. seirbheis SA WebApp, a bhios a’ frithealadh cheistean Mion-sgrùdadh Sentiment;
  3. seirbheis SA Logica tha ga choileanadh fhèin mion-sgrùdadh faireachdainn;
  4. seirbheis Fios air ais na SA, a gheibh fios air ais bho luchd-cleachdaidh mu neo-mhearachdachd an sgrùdaidh a chaidh a dhèanamh.

Air ais gu microservices le Istio. Pàirt 1

Anns an diagram seo, a bharrachd air seirbheisean, tha sinn cuideachd a’ faicinn an Rianadair Ingress, a bhios ann an Kubernetes a’ slighe iarrtasan a-steach gu na seirbheisean co-fhreagarrach. Bidh Istio a’ cleachdadh bun-bheachd coltach ris mar phàirt de Gheata Ingress, agus bidh mion-fhiosrachadh mun deidhinn a’ leantainn.

A’ cur air bhog tagradh le neach-ionaid bho Istio

Airson tuilleadh obrachaidhean air an deach iomradh a thoirt san artaigil, clone do stòr istio-maighstir. Tha an tagradh ann agus nochdaidhean airson Kubernetes agus Istio.

A' cur a-steach sidecars

Faodar cur a-steach a dhèanamh gu fèin-ghluasadach no le làimh. Gus soithichean taobh-chàraichean a chuir a-steach gu fèin-ghluasadach, feumaidh tu an leubail a shuidheachadh chun àite-ainm istio-injection=enabled, a tha air a dhèanamh leis an òrdugh a leanas:

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

A-nis bidh gach pod a thèid a chleachdadh san raon-ainm bunaiteach (default) gheibh e an soitheach taobh-chàr aige. Gus seo a dhearbhadh, leig dhuinn tagradh deuchainn a chleachdadh le bhith a’ dol gu eòlaire freumh an stòrais [istio-mastery] agus a 'ruith an òrdugh a leanas:

$ 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

Às deidh dhut na seirbheisean a chuir an sàs, dèan cinnteach gu bheil dà shoitheach aig na pods gach fear (leis an t-seirbheis fhèin agus a chàr-taobh) le bhith a’ ruith an àithne kubectl get pods agus a 'dèanamh cinnteach gu bheil sin fon cholbh READY luach air a shònrachadh 2/2, a’ samhlachadh gu bheil an dà shoitheach a’ ruith:

$ 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

Gu lèirsinneach tha e a ’coimhead mar seo:

Air ais gu microservices le Istio. Pàirt 1
Neach-ionaid teachdaire ann an aon de na pods

A-nis gu bheil an tagradh ag obair, feumaidh sinn leigeil le trafaic a tha a’ tighinn a-steach a dhol a-steach don tagradh.

Geata Ingress

Is e an cleachdadh as fheàrr airson seo a choileanadh (leig le trafaic anns a’ bhuidheann) tro Geata Ingress ann an Istio, a tha suidhichte aig “oir” a’ bhraisle agus a leigeas leat feartan Istio a chomasachadh leithid slighe, cothromachadh luchdan, tèarainteachd, agus sgrùdadh airson trafaic a tha a’ tighinn a-steach.

Chaidh am pàirt Geata Ingress agus an t-seirbheis a tha ga chuir air adhart a-mach a chuir a-steach air a’ bhuidheann aig àm stàladh Istio. Gus seòladh IP taobh a-muigh seirbheis fhaighinn a-mach, ruith:

$ 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

Leanaidh sinn oirnn a’ faighinn cothrom air an aplacaid a’ cleachdadh an IP seo (bidh mi a’ toirt iomradh air mar EXTERNAL-IP), mar sin airson goireasachd, sgrìobhaidh sinn an luach gu caochladair:

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

Ma dh'fheuchas tu ris an IP seo fhaighinn tro bhrobhsair a-nis, gheibh thu mearachd Seirbheis nach eil ri fhaighinn, oir gu gnàthach bidh Istio a’ bacadh trafaic a thig a-steachgus an tèid Gateway a mhìneachadh.

Goireas geata

Tha Gateway na CRD (Mìneachadh Goireasan Custom) ann an Kubernetes, air a mhìneachadh às deidh dha Istio a chuir a-steach ann am brabhsair agus a’ comasachadh comas puirt, protocol, agus luchd-aoigheachd a shònrachadh airson a bheil sinn airson trafaic a-steach a cheadachadh.

Anns a 'chùis againn, tha sinn airson trafaig HTTP a cheadachadh air port 80 airson a h-uile neach-aoigheachd. Tha an duilgheadas air a thoirt gu buil leis a 'mhìneachadh 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:
- "*"

Chan fheum an rèiteachadh seo mìneachadh sam bith ach a-mhàin an roghnaichear istio: ingressgateway. Leis an roghnaichear seo, is urrainn dhuinn sònrachadh dè an t-Ingress Gateway airson an rèiteachadh a chuir an sàs. Anns a ’chùis againn, is e seo rianadair Ingress Gateway, a chaidh a chuir a-steach gu bunaiteach ann an Istio.

Tha an rèiteachadh air a chuir an sàs le bhith a’ gairm an àithne a leanas:

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

Tha an geata a-nis a’ ceadachadh ruigsinneachd gu port 80 ach chan eil fios aige càite an tèid na h-iarrtasan a stiùireadh. Airson seo bidh feum agad air Seirbheisean Brìgheil.

Goireas seirbheis mas-fhìor

Tha an VirtualService ag innse do Gheata Ingress mar a stiùireas tu iarrtasan a tha ceadaichte taobh a-staigh a’ bhuidheann.

Feumar iarrtasan chun tagradh againn a tha a’ tighinn tron ​​gheata http a chuir chun na seirbheisean sa-frontend, sa-web-app agus sa-feedback:

Air ais gu microservices le Istio. Pàirt 1
Slighean ri rèiteachadh le VirtualServices

Beachdaich air na h-iarrtasan a bu chòir a chuir gu SA-Frontend:

  • Dìreach maids air an t-slighe / bu chòir a chur gu SA-Frontend gus index.html fhaighinn;
  • Slighean le ro-leasachan /static/* bu chòir a chuir gu SA-Frontend gus faidhlichean statach a chleachdadh air an aghaidh, leithid CSS agus JavaScript;
  • Slighean co-chosmhail ris an abairt àbhaisteach '^.*.(ico|png|jpg)$', feumar a chuir gu SA-Frontend, oir Seo na dealbhan a tha air an taisbeanadh air an duilleig.

Tha am buileachadh air a choileanadh leis an rèiteachadh 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

Puingean cudromach:

  1. Tha an t-Seirbheis Mas-fhìor seo a’ toirt iomradh air iarrtasan a’ tighinn troimhe http-geata;
  2. В destination a’ mìneachadh na seirbheis dhan tèid na h-iarrtasan a chur.

thuirt: Tha an rèiteachadh gu h-àrd air a stòradh ann am faidhle sa-virtualservice-external.yaml, anns a bheil cuideachd suidheachaidhean airson slighe gu SA-WebApp agus SA-Feedback, ach chaidh a ghiorrachadh an seo san artaigil airson giorrad.

Cuir a-steach VirtualService le bhith a’ fònadh:


thuirt: Nuair a chuireas sinn goireasan Istio an sàs, bidh an Kubernetes API Server a’ losgadh tachartas a gheibh am Plèana Smachd Istio, agus às deidh sin, thèid an rèiteachadh ùr a chuir an sàs ann am proxies Envoy gach pod. Agus tha e coltach gur e Tosgaire eile a th’ ann an rianadair Gateway Ingress a chaidh a dhealbhadh anns a’ Phlana Smachd. Tha seo uile a’ coimhead mar seo san diagram:

Air ais gu microservices le Istio. Pàirt 1
Istio-IngressGateway rèiteachadh airson slighe iarrtasan

Tha Mion-sgrùdadh Sentiment ri fhaighinn a-nis air http://{EXTERNAL-IP}/. Na gabh dragh ma gheibh thu inbhe Cha deach a lorg: uaireannan bheir e beagan nas fhaide airson an rèiteachadh a thighinn gu buil agus airson na caches Envoy ùrachadh.

Mus lean thu air adhart, cluich beagan leis an tagradh gus trafaic a ghineadh (tha a làthaireachd riatanach airson soilleireachd ann an gnìomhan às deidh sin - approx. transl.).

Kiali: faicsinneachd

Gus faighinn gu eadar-aghaidh rianachd Kiali, ruith an òrdugh a leanas:


…agus fosgailte http://localhost:20001/le bhith a’ logadh a-steach mar admin/admin. An seo gheibh thu mòran fheartan feumail, mar eisimpleir, gus sùil a thoirt air rèiteachadh phàirtean Istio, sealladh a dhèanamh air seirbheisean bhon fhiosrachadh a chaidh a chruinneachadh le bhith a ’toirt a-steach iarrtasan lìonraidh, faigh freagairtean do na ceistean“ Cò tha a ’cur fios cò?”, “Dè an dreach den t-seirbheis a tha a’ faighinn eòlas fàilligidhean?” Agus mar sin air adhart. San fharsaingeachd, rannsaich na comasan aig Kiali mus gluais thu air adhart gu bhith a’ faicinn meatrach le Grafana.

Air ais gu microservices le Istio. Pàirt 1

Grafana: sealladh air meatrach

Bidh na meatrach a chaidh a chruinneachadh ann an Istio a’ tighinn gu crìch ann am Prometheus agus tha iad air am faicinn le Grafana. Gus faighinn gu eadar-aghaidh rianachd Grafana, ruith an àithne gu h-ìosal, agus an uairsin fosgail http://localhost:3000/:


Le bhith a 'briogadh air a' chlàr Dachaigh gu h-àrd air an taobh chlì agus tagh Deas-bhòrd seirbheis Istio anns an oisean gu h-àrd air an taobh chlì, tòisich leis an t-seirbheis sa-lìn-appgus na slatan-tomhais cruinnichte fhaicinn:

Air ais gu microservices le Istio. Pàirt 1

An seo tha sinn a’ feitheamh ri coileanadh falamh agus gu tur dòrainneach - cha ghabh an luchd-stiùiridh aonta ri seo gu bràth. Cruthaichidh sinn luchd beag leis an òrdugh a leanas:


A-nis tha grafaichean tòrr nas bòidhche againn, agus a bharrachd air an sin, na h-innealan mìorbhaileach Prometheus airson sgrùdadh agus Grafana airson meatrach fhaicinn, a leigeas leinn ionnsachadh mu choileanadh, inbhe slàinte, leasachaidhean / ìsleachadh ann an seirbheisean thar ùine.

Mu dheireadh, leig dhuinn sùil a thoirt air lorg iarrtasan ann an seirbheisean.

Jaeger: lorg

Feumaidh sinn lorg, oir mar as motha de sheirbheisean a th’ againn, ’s ann as duilghe a tha e faighinn gu adhbhar na fàiligeadh. Bheir sinn sùil air cùis shìmplidh bhon dealbh gu h-ìosal:

Air ais gu microservices le Istio. Pàirt 1
Eisimpleir àbhaisteach de iarrtas air thuaiream air fàiligeadh

Thig iarrtas, tuit- dè an adhbhar? A’ chiad seirbheis? No an dàrna fear? Tha eisgeachdan anns an dà chuid - leig dhuinn sùil a thoirt air logaichean gach fear. Dè cho tric ’s a tha thu air do ghlacadh fhèin a’ dèanamh seo? Tha an obair againn nas coltaiche ri luchd-sgrùdaidh bathar-bog na luchd-leasachaidh…

Tha seo na dhuilgheadas farsaing ann am meanbh-sheirbheisean agus tha e air fhuasgladh le siostaman lorg sgaoilte, anns am bi seirbheisean a’ toirt bann-cinn sònraichte dha chèile, às deidh sin thèid am fiosrachadh seo ath-stiùireadh chun t-siostam lorg, far a bheil e air a choimeas ris an dàta iarrtas. Seo dealbh:

Air ais gu microservices le Istio. Pàirt 1
Bithear a’ cleachdadh TraceId gus an t-iarrtas a chomharrachadh

Bidh Istio a’ cleachdadh Jaeger Tracer, a bhios a’ buileachadh frèam OpenTracing API neo-eisimeileach bho reiceadair. Gheibh thu cothrom air eadar-aghaidh cleachdaiche Jaeger leis an àithne a leanas:


A-nis rachaibh gu http://localhost:16686/ agus tagh seirbheis sa-lìn-app. Mura h-eil an t-seirbheis air a shealltainn sa chlàr tuiteam-sìos, seall / cruthaich gnìomhachd air an duilleag agus ùraich an eadar-aghaidh. Às deidh sin cliog air a’ phutan Lorg comharran, a sheallas na lorgan as ùire - tagh gin - nochdaidh fiosrachadh mionaideach mu gach lorg:

Air ais gu microservices le Istio. Pàirt 1

Tha an lorg seo a’ sealltainn:

  1. Thig an t-iarrtas a-steach geata inntrigidh (is e seo a’ chiad eadar-obrachadh le aon de na seirbheisean, agus thèid ID Trace a chruthachadh airson an iarrtais), às deidh sin bidh an geata a’ cur an iarrtas chun t-seirbheis sa-lìn-app.
  2. Anns an t-seirbheis sa-lìn-app tha an t-iarrtas air a thogail leis a’ chàr-taobh Envoy, tha “leanabh" air a chruthachadh san rèis (is e sin as coireach gu bheil sinn ga fhaicinn ann an lorgan) agus air ath-stiùireadh chun ghobhar sa-lìn-app. (span - aonad obrach loidsigeach ann an Jaeger, le ainm, àm tòiseachaidh na h-obrach agus fad. Faodar spans a neadachadh agus òrdachadh. Tha graf acyclic stiùirichte de rèisean a’ cruthachadh lorg. - mu thuairmeas. eadar-theangachadh.)
  3. An seo tha an t-iarrtas air a phròiseasadh leis an dòigh Mion-sgrùdadh faireachdainn. Tha na lorgan sin air an gineadh leis an tagradh mu thràth, i.e. bha feum aca air atharraichean còd.
  4. Bhon mhionaid seo, tha iarrtas POST air a thòiseachadh a-steach sa-loidsig. Feumar Trace ID a chuir air adhart bho sa-lìn-app.
  5. ...

thuirt: Ann an ceum 4, bu chòir don tagradh na cinn-cinn a ghineadh Istio fhaicinn agus an toirt seachad gu iarrtasan às deidh sin, mar a chithear san ìomhaigh gu h-ìosal:

Air ais gu microservices le Istio. Pàirt 1
(A) Tha e an urra ri Istio gluasad air adhart; (B) Tha uallach air seirbheisean airson cinn

Bidh Istio a’ dèanamh a’ mhòr-chuid den obair air sgàth a’ gineadh cinn-cinn airson iarrtasan a tha a’ tighinn a-steach, a’ cruthachadh raointean ùra anns gach cùram-taobh agus gan cur air adhart. Ach, gun a bhith ag obair le cinn-cinn taobh a-staigh sheirbheisean, thèid an t-slighe lorg làn iarrtas a chall.

Feumar beachdachadh air na cinn a leanas (air an cur air adhart):


Is e obair shìmplidh a tha seo, ach airson a bhuileachadh a dhèanamh nas sìmplidhe, tha mar-thà ann iomadh leabharlann - mar eisimpleir, anns an t-seirbheis sa-web-app, cuiridh an neach-dèiligidh RestTemplate na cinn-cinn sin air adhart ma chuireas tu dìreach na leabharlannan Jaeger agus OpenTracing gu a eisimeileachd.

Thoir an aire gu bheil an tagradh Mion-sgrùdadh Mothachadh a’ nochdadh buileachadh ann am Flask, Spring, agus ASP.NET Core.

A-nis gu bheil e soilleir dè a tha sinn a’ faighinn a-mach às a’ bhogsa (no cha mhòr a-mach às a’ bhogsa), leig dhuinn sùil a thoirt air slighe gleusaidh, riaghladh trafaic lìonraidh, tèarainteachd, agus barrachd!

Thoir an aire. eadar-theangachadh.: leugh mu dheidhinn anns an ath phàirt de stuthan air Istio bho Rinor Maloku, agus leanaidh na h-eadar-theangachaidhean anns a’ bhlog againn a dh’ aithghearr. ÙR (14 Màrt): An dàrna pàirt air fhoillseachadh mu thràth.

PS bhon eadar-theangair

Leugh cuideachd air ar blog:

Source: www.habr.com