Pada si microservices pẹlu Istio. Apa 1

Pada si microservices pẹlu Istio. Apa 1

Akiyesi. itumọ.: Awọn meshes iṣẹ ti dajudaju di ojutu ti o yẹ ni awọn amayederun ode oni fun awọn ohun elo ti o tẹle faaji microservice. Lakoko ti Istio le wa ni awọn ète ti ọpọlọpọ awọn onimọ-ẹrọ DevOps, o jẹ ọja tuntun ti o tọ pe, lakoko ti okeerẹ ni awọn ofin ti awọn agbara ti o pese, le nilo iye pataki ti akoko lati faramọ pẹlu. Onimọ-ẹrọ ara ilu Jamani Rinor Maloku, ti o jẹ iduro fun iṣiro awọsanma fun awọn alabara nla ni ile-iṣẹ ibaraẹnisọrọ Orange Networks, ti kọ lẹsẹsẹ awọn ohun elo iyalẹnu ti o gba ọ laaye lati yara ati jinna sinu Istio. O bẹrẹ itan rẹ pẹlu ohun ti Istio le ṣe ni gbogbogbo ati bii o ṣe le yara wo pẹlu oju tirẹ.

Istio - Iṣẹ akanṣe orisun orisun ti dagbasoke ni ifowosowopo pẹlu awọn ẹgbẹ lati Google, IBM ati Lyft. O yanju awọn idiju ti o dide ni awọn ohun elo ti o da lori microservices, gẹgẹbi:

  • Traffic Management: timeouts, retries, fifuye iwontunwosi;
  • Aabo: opin olumulo ìfàṣẹsí ati ašẹ;
  • Ifojusi: wiwa, monitoring, gedu.

Gbogbo awọn wọnyi le ṣee yanju ni ipele ohun elo, ṣugbọn lẹhin iyẹn awọn iṣẹ rẹ kii yoo jẹ “micro” mọ. Gbogbo igbiyanju afikun lati yanju awọn iṣoro wọnyi jẹ egbin ti awọn orisun ile-iṣẹ ti o le ṣee lo taara fun iye iṣowo. Jẹ ki a wo apẹẹrẹ:

Oluṣakoso Iṣẹ: Bawo ni o pẹ to lati ṣafikun ẹya esi kan?
Olùgbéejáde: Meji sprints.

MP: Kini?... O kan CRUD!
R: Ṣiṣe CRUD jẹ apakan ti o rọrun, ṣugbọn a tun nilo lati jẹri ati fun laṣẹ awọn olumulo ati awọn iṣẹ. Niwọn igba ti nẹtiwọọki ko ṣe igbẹkẹle, iwọ yoo nilo lati ṣe awọn ibeere ti o tun ṣe, bakanna bi Circuit fifọ Àpẹẹrẹ ni ibara. Bakannaa, lati rii daju wipe gbogbo eto ko ni jamba, iwọ yoo nilo timeouts ati olopobobo (fun awọn alaye diẹ sii nipa awọn ilana mejeeji ti a mẹnuba, wo nigbamii ninu nkan naa - isunmọ. transl.), ati lati le rii awọn iṣoro, abojuto, wiwa kakiri, […]

MP: Oh, lẹhinna jẹ ki a kan fi ẹya yii sii sinu iṣẹ Ọja naa.

Mo ro pe ero naa han gbangba: iye awọn igbesẹ ati igbiyanju ti o nilo lati ṣafikun iṣẹ kan jẹ nla. Ninu nkan yii, a yoo wo bii Istio ṣe yọkuro gbogbo idiju ti a mẹnuba loke (eyiti ko pinnu lati jẹ ọgbọn iṣowo) lati awọn iṣẹ.

Pada si microservices pẹlu Istio. Apa 1

Daakọ: Nkan yii dawọle pe o ni imọ iṣẹ ti Kubernetes. Bibẹẹkọ, Mo ṣeduro kika ifihan mi si Kubernetes ati lẹhin iyẹn nikan tẹsiwaju kika ohun elo yii.

Istio agutan

Ni agbaye laisi Istio, iṣẹ kan ṣe awọn ibeere taara si omiiran, ati ni iṣẹlẹ ti ikuna, iṣẹ naa gbọdọ mu funrararẹ: ṣe igbiyanju tuntun, pese akoko kan, ṣii ẹrọ fifọ, ati bẹbẹ lọ.

Pada si microservices pẹlu Istio. Apa 1
Ijabọ nẹtiwọki ni Kubernetes

Istio nfunni ni ojutu pataki kan, ti o yapa patapata lati awọn iṣẹ ati ṣiṣe nipasẹ kikọlu pẹlu ibaraẹnisọrọ nẹtiwọọki. Ati nitorinaa o lo:

  • ifarada ẹbi: Da lori koodu ipo ni idahun, o loye boya ibeere naa kuna ati tun ṣiṣẹ.
  • Canary rollouts: ṣe àtúnjúwe nikan ipin ogorun ti o wa titi ti awọn ibeere si ẹya tuntun ti iṣẹ naa.
  • Abojuto ati awọn metiriki: Igba melo ni o gba fun iṣẹ naa lati dahun?
  • Wa kakiri ati Observability: Ṣafikun awọn akọle pataki si ibeere kọọkan ati tọpa wọn kọja iṣupọ naa.
  • Aabo: Gba àmi JWT pada, jẹri ati fun awọn olumulo laṣẹ.

Iwọnyi jẹ diẹ ninu awọn iṣeeṣe (gan kan diẹ!) Lati ṣe iwunilori rẹ. Bayi jẹ ki ká besomi sinu awọn imọ awọn alaye!

Istio faaji

Istio ṣe idiwọ gbogbo ijabọ nẹtiwọọki ati pe o lo eto awọn ofin si rẹ, fifi sii aṣoju ọlọgbọn ni irisi eiyan ọkọ si inu podu kọọkan. Awọn aṣoju ti o mu gbogbo awọn agbara ṣiṣẹ fọọmu a Data ofurufu, ati awọn ti wọn le wa ni tunto ìmúdàgba lilo Iṣakoso ofurufu.

Data ofurufu

Awọn aṣoju ti a fi sii sinu awọn adarọ-ese gba Istio laaye lati ni irọrun pade awọn ibeere ti a nilo. Fun apẹẹrẹ, jẹ ki a ṣayẹwo atunwo ati awọn iṣẹ fifọ Circuit.

Pada si microservices pẹlu Istio. Apa 1
Bawo ni retries ati Circuit fifọ ti wa ni imuse ni Envoy

Lati akopọ:

  1. envoy (a n sọrọ nipa aṣoju ti o wa ninu apo eiyan sidecar, eyiti o pin bi lọtọ ọja - isunmọ. itumọ.) firanṣẹ ibeere kan si apẹẹrẹ akọkọ ti iṣẹ B ati kuna.
  2. Envoy Sidecar gbiyanju lẹẹkansi (tun gbiyanju). (1)
  3. Ibere ​​naa kuna ati pe o pada si aṣoju ti o pe.
  4. Eyi ṣii Circuit Breaker ati pe iṣẹ atẹle fun awọn ibeere ti o tẹle. (2)

Eyi tumọ si pe o ko ni lati lo ile-ikawe Tun gbiyanju miiran, iwọ ko ni lati ṣe imuse tirẹ ti Circuit Breaking ati Awari Iṣẹ ni ede siseto X, Y tabi Z. Gbogbo eyi ati pupọ diẹ sii wa lati inu apoti. ni Istio ati ki o ko beere rárá ayipada ninu awọn koodu.

Nla! Bayi o le fẹ lati lọ si irin-ajo pẹlu Istio, ṣugbọn o tun ni iyemeji diẹ, awọn ibeere ṣiṣi. Ti eyi ba jẹ ojutu gbogbo agbaye fun gbogbo awọn iṣẹlẹ ni igbesi aye, lẹhinna o ni ifura adayeba: lẹhinna, gbogbo iru awọn solusan ni otitọ tan jade lati jẹ ko dara fun eyikeyi ọran.

Ati nikẹhin o beere: “Ṣe o jẹ isọdi?”

Bayi o ti ṣetan fun irin-ajo okun, jẹ ki a faramọ pẹlu Ọkọ ofurufu Iṣakoso.

Iṣakoso ofurufu

O ni awọn ẹya mẹta: Pilot, aladapo и Ṣuṣani, eyiti o ṣiṣẹ papọ lati tunto Awọn Aṣoju si ipa ọna ijabọ, fi ipa mu awọn eto imulo, ati gba data telemetry. Sikematiki gbogbo rẹ dabi eyi:

Pada si microservices pẹlu Istio. Apa 1
Ibaraenisepo ti Iṣakoso ofurufu pẹlu Data ofurufu

Awọn aṣoju (ie data ofurufu) ti wa ni tunto nipa lilo Kubernetes CRD (Awọn asọye orisun orisun Aṣa) ti ṣalaye nipasẹ Istio ati ti a pinnu ni pataki fun idi eyi. Ohun ti eyi tumọ si fun ọ ni pe wọn dabi ẹni pe o jẹ orisun miiran ni Kubernetes pẹlu sintasi ti o faramọ. Ni kete ti a ṣẹda, orisun yii yoo gba nipasẹ ọkọ ofurufu iṣakoso ati lo si Awọn Aṣoju naa.

Ibasepo ti awọn iṣẹ to Istio

A ti ṣe apejuwe ibatan Istio si awọn iṣẹ, ṣugbọn kii ṣe iyipada: bawo ni awọn iṣẹ ṣe ni ibatan si Istio?

Lati so ooto, awọn iṣẹ ni o wa bi mọ ti Istio niwaju bi eja ti wa ni ti omi nigba ti won beere ara wọn, "Kini omi lonakona?"

Pada si microservices pẹlu Istio. Apa 1
Àpèjúwe Victoria Dimitrakopoulos: - Bawo ni o ṣe fẹran omi naa? - Kini omi lonakona?

Nitorinaa, o le mu iṣupọ ṣiṣẹ ati lẹhin gbigbe awọn paati Istio, awọn iṣẹ ti o wa ninu rẹ yoo tẹsiwaju lati ṣiṣẹ, ati lẹhin yiyọ awọn paati wọnyi, ohun gbogbo yoo dara lẹẹkansi. O han gbangba pe ninu ọran yii iwọ yoo padanu awọn agbara ti a pese nipasẹ Istio.

Ilana ti o to - jẹ ki a fi imọ yii si iṣe!

Istio ni iwa

Istio nilo iṣupọ Kubernetes pẹlu o kere ju 4 vCPUs ati 8 GB ti Ramu ti o wa. Lati yara ṣeto iṣupọ kan ki o tẹle awọn itọnisọna lati inu nkan naa, Mo ṣeduro lilo Google Cloud Platform, eyiti o fun awọn olumulo tuntun free $300.

Lẹhin ṣiṣẹda iṣupọ kan ati atunto iwọle si Kubernetes nipasẹ ohun elo console, o le fi Istio sori ẹrọ nipasẹ oluṣakoso package Helm.

Helm fifi sori

Fi Helm ni ose lori kọmputa rẹ, bi apejuwe ninu osise iwe aṣẹ. A yoo lo eyi lati ṣe agbekalẹ awọn awoṣe fun fifi sori Istio ni apakan atẹle.

Fifi sori Istio

Ṣe igbasilẹ awọn orisun Istio lati titun Tu (ọna asopọ atilẹba ti onkọwe si ẹya 1.0.5 ti yipada si ti lọwọlọwọ, ie 1.0.6 - isunmọ transl.), jade awọn akoonu sinu ọkan liana, eyi ti Emi yoo pe lati isisiyi lọ [istio-resources].

Lati ṣe idanimọ awọn orisun Istio ni irọrun, ṣẹda aaye orukọ kan ninu iṣupọ K8s istio-system:

$ kubectl create namespace istio-system

Pari fifi sori ẹrọ nipa lilọ si liana [istio-resources] ati ṣiṣe aṣẹ naa:

$ 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

Aṣẹ yii yoo gbejade awọn paati bọtini ti Istio si faili kan istio.yaml. A ṣe atunṣe awoṣe boṣewa lati baamu fun ara wa, ni pato awọn aye atẹle wọnyi:

  • global.mtls.enabled fi sori ẹrọ ni false (i.e. mTLS ìfàṣẹsí jẹ alaabo - isunmọ.)lati simplify wa ibaṣepọ ilana;
  • tracing.enabled pẹlu wiwa wiwa kakiri nipa lilo Jaeger;
  • kiali.enabled fi sori ẹrọ Kiali sinu iṣupọ kan lati wo awọn iṣẹ ati ijabọ;
  • grafana.enabled fi Grafana sori ẹrọ lati wo awọn metiriki ti a gbajọ.

Jẹ ki a lo awọn orisun ti ipilẹṣẹ pẹlu aṣẹ:

$ kubectl apply -f istio.yaml

Fifi sori ẹrọ ti Istio lori iṣupọ ti pari! Duro titi gbogbo awọn adarọ-ese yoo wa ni aaye orukọ istio-system yoo ni anfani Running tabi Completednipa ṣiṣe aṣẹ ni isalẹ:

$ kubectl get pods -n istio-system

Bayi a ti ṣetan lati tẹsiwaju ni apakan atẹle, nibiti a yoo gba ohun elo naa soke ati ṣiṣe.

Faaji ti ohun elo Analysis itara

Jẹ ki a lo apẹẹrẹ ti ohun elo microservice Analysis ti ẹdun ti a lo ninu eyiti a mẹnuba tẹlẹ Ọrọ Iṣaaju si Kubernetes. O jẹ eka to lati ṣafihan awọn agbara Istio ni iṣe.

Ohun elo naa ni awọn iṣẹ microservice mẹrin:

  1. iṣẹ SA-Iwaju, eyiti o ṣe iranṣẹ iwaju ti ohun elo Reactjs;
  2. iṣẹ SA-WebApp, eyiti o nṣe iranṣẹ awọn ibeere Itupalẹ Irora;
  3. iṣẹ SA-kannaa, eyi ti o ṣe ara rẹ itupale itara;
  4. iṣẹ SA-Esi, eyi ti o gba esi lati awọn olumulo nipa awọn išedede ti awọn onínọmbà.

Pada si microservices pẹlu Istio. Apa 1

Ninu aworan atọka yii, ni afikun si awọn iṣẹ, a tun rii Alakoso Ingress, eyiti o wa ni awọn ọna Kubernetes awọn ibeere ti nwọle si awọn iṣẹ ti o yẹ. Istio nlo iru imọran kan laarin ẹnu-ọna Ingress rẹ, awọn alaye diẹ sii ti eyiti yoo tẹle.

Ṣiṣe ohun elo pẹlu aṣoju lati Istio

Fun awọn iṣẹ ṣiṣe siwaju ti a mẹnuba ninu nkan naa, ṣe ẹda ibi ipamọ rẹ istio-titunto si. O ni ohun elo ati ṣafihan fun Kubernetes ati Istio.

Fi sii awọn ọkọ ayọkẹlẹ ẹgbẹ

Fi sii le ṣee ṣe laifọwọyi tabi pẹlu ọwọ. Lati fi awọn apoti ẹgbe sii laifọwọyi, iwọ yoo nilo lati ṣeto aami si aaye orukọ istio-injection=enabled, eyiti o ṣe pẹlu aṣẹ atẹle:

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

Bayi podu kọọkan ti yoo gbe lọ si aaye orukọ aiyipada (default) yoo gba apoti ẹgbe rẹ. Lati rii daju eyi, jẹ ki a mu ohun elo idanwo naa ṣiṣẹ nipa lilọ si itọsọna gbongbo ti ibi ipamọ naa [istio-mastery] ati ṣiṣe aṣẹ wọnyi:

$ 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

Lẹhin ti o ti gbe awọn iṣẹ naa lọ, jẹ ki a ṣayẹwo pe awọn adarọ-ese ni awọn apoti meji (pẹlu iṣẹ naa funrararẹ ati ẹgbẹ ẹgbẹ rẹ) nipa ṣiṣe aṣẹ naa kubectl get pods ati rii daju pe labẹ iwe READY iye pàtó kan 2/2, ti n ṣe afihan pe awọn apoti mejeeji nṣiṣẹ:

$ 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

Ni oju o dabi eleyi:

Pada si microservices pẹlu Istio. Apa 1
Aṣoju aṣoju ninu ọkan ninu awọn pods

Ni bayi pe ohun elo naa ti wa ni oke ati nṣiṣẹ, a yoo nilo lati gba awọn ijabọ ti nwọle lati wa sinu ohun elo naa.

Ẹnu-ọna Ingress

Iwa ti o dara julọ lati ṣaṣeyọri eyi (gba ijabọ ni iṣupọ) jẹ nipasẹ Ẹnu-ọna Ingress ni Istio, eyiti o wa ni “eti” ti iṣupọ ati gba ọ laaye lati mu awọn ẹya Istio ṣiṣẹ gẹgẹbi ipa-ọna, iwọntunwọnsi fifuye, aabo ati ibojuwo fun ijabọ ti nwọle.

Awọn paati Ingress Gateway ati iṣẹ ti o siwaju ni ita ni a fi sori ẹrọ ni iṣupọ lakoko fifi sori Istio. Lati wa adiresi IP ita ti iṣẹ naa, ṣiṣ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

A yoo tẹsiwaju lati wọle si ohun elo naa nipa lilo IP yii (Emi yoo tọka si bi EXTERNAL-IP), nitorinaa fun irọrun a yoo kọ iye naa sinu oniyipada kan:

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

Ti o ba gbiyanju lati wọle si IP yii nipasẹ ẹrọ aṣawakiri kan ni bayi, iwọ yoo gba aṣiṣe Iṣẹ Ko si, nitori nipa aiyipada Istio ṣe idiwọ gbogbo awọn ijabọ ti nwọle, Gateway ti ko sibẹsibẹ a ti telẹ.

Gateway awọn oluşewadi

Ẹnu-ọna jẹ CRD (Itumọ orisun orisun Aṣa) ni Kubernetes, ti ṣalaye lẹhin fifi sori Istio sinu iṣupọ ati muu ṣiṣẹ agbara lati pato awọn ebute oko oju omi, ilana ati awọn ogun fun eyiti a fẹ lati gba awọn ijabọ ti nwọle.

Ninu ọran wa, a fẹ lati gba ijabọ HTTP laaye lori ibudo 80 fun gbogbo awọn agbalejo. Iṣẹ naa jẹ imuse nipasẹ asọye atẹle (http-adena.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:
- "*"

Eto yii ko nilo alaye ayafi fun oluyan istio: ingressgateway. Pẹlu yiyan yii a le pato iru ẹnu-ọna Ingress lati lo iṣeto si. Ninu ọran wa, eyi ni oluṣakoso Gateway Ingress, eyiti a fi sori ẹrọ nipasẹ aiyipada ni Istio.

Iṣeto ni lilo nipa pipe pipaṣẹ atẹle:

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

Ẹnu-ọna bayi ngbanilaaye iwọle si ibudo 80, ṣugbọn ko ni imọran ibiti o le ṣe awọn ibeere. Fun eyi iwọ yoo nilo Foju Services.

Awọn oluşewadi Iṣẹ Iṣẹ

Iṣẹ Virtual sọ fun ẹnu-ọna Ingress bi o ṣe le ṣe itọsọna awọn ibeere ti o gba laaye laarin iṣupọ naa.

Awọn ibeere si ohun elo wa ti nbọ nipasẹ http-gateway gbọdọ wa ni fifiranṣẹ si sa-frontend, sa-web-app ati awọn iṣẹ esi-sa-e:

Pada si microservices pẹlu Istio. Apa 1
Awọn ipa ọna ti o nilo lati tunto pẹlu Awọn iṣẹ Virtual

Jẹ ki a wo awọn ibeere ti o yẹ ki o firanṣẹ si SA-Frontend:

  • Gangan baramu pẹlú awọn ọna / yẹ ki o firanṣẹ si SA-Frontend lati gba index.html;
  • Awọn ọna ti a ti sọ tẹlẹ /static/* gbọdọ wa ni fifiranṣẹ si SA-Frontend lati gba awọn faili aimi ti a lo ni iwaju iwaju, gẹgẹbi CSS ati JavaScript;
  • Awọn ọna ti o baamu nipasẹ ikosile deede '^.*.(ico|png|jpg)$', gbọdọ wa ni rán si SA-Frontend, nitori Awọn wọnyi ni awọn aworan ti o han loju iwe.

Awọn imuse ti waye nipasẹ awọn wọnyi iṣeto ni (sa-virtualservice-ode.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)$'
    route:
    - destination:
        host: sa-frontend             # 2
        port:
number: 80

Awọn aaye pataki:

  1. Iṣẹ Virtual yii tọka si awọn ibeere ti n bọ nipasẹ http-adena;
  2. В destination Iṣẹ ti a fi ranṣẹ si ti pinnu.

Daakọ: Iṣeto ni oke ti wa ni ipamọ ninu faili kan sa-virtualservice-external.yaml, eyiti o tun ni awọn eto fun lilọ kiri ni SA-WebApp ati SA-Feedback, ṣugbọn ti kuru nibi ni nkan fun kukuru.

Jẹ ki a lo VirtualService nipa pipe:

$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

Daakọ: Nigba ti a ba njẹ awọn orisun Istio, Kubernetes API Server ṣẹda iṣẹlẹ kan ti o ti gba nipasẹ Istio Iṣakoso ofurufu, ati lẹhin ti awọn titun iṣeto ni ti wa ni loo si kọọkan pod's Envoy proxies. Ati pe oluṣakoso Gateway Ingress han lati jẹ Aṣoju miiran ti a tunto ni Iṣakoso Iṣakoso. Gbogbo eyi dabi eyi ninu aworan atọka:

Pada si microservices pẹlu Istio. Apa 1
Istio-IngressGateway iṣeto ni fun afisona ìbéèrè

Ohun elo Analysis Sentiment wa bayi lori http://{EXTERNAL-IP}/. Maṣe yọ ara rẹ lẹnu ti o ba gba ipo Ko Ri: Nigba miiran o gba to gun diẹ fun iṣeto ni ipa ati awọn caches Envoy lati ṣe imudojuiwọn.

Ṣaaju ki o to tẹsiwaju, mu ṣiṣẹ pẹlu app diẹ lati ṣe ina ijabọ. (wiwa rẹ jẹ pataki fun mimọ ni awọn iṣe atẹle - isunmọ. transl.).

Kiali: akiyesi

Lati lọ si wiwo iṣakoso Kiali, ṣiṣe aṣẹ wọnyi:

$ kubectl port-forward 
    $(kubectl get pod -n istio-system -l app=kiali 
    -o jsonpath='{.items[0].metadata.name}') 
    -n istio-system 20001

... ati ṣii http://localhost:20001/, wíwọlé bi admin/admin. Nibi iwọ yoo wa ọpọlọpọ awọn ẹya ti o wulo, fun apẹẹrẹ, lati ṣayẹwo iṣeto ti awọn paati Istio, wo awọn iṣẹ nipa lilo alaye ti a gba lati awọn ibeere nẹtiwọọki idilọwọ, gba awọn idahun si awọn ibeere “Ta ni n kan si tani?”, “Ewo ni ẹya iṣẹ naa ni iriri. awọn ikuna?” ati bẹbẹ lọ. Ni gbogbogbo, ṣawari awọn agbara ti Kiali ṣaaju gbigbe siwaju si wiwo awọn metiriki pẹlu Grafana.

Pada si microservices pẹlu Istio. Apa 1

Grafana: iworan metiriki

Awọn wiwọn ti a gba ni Istio lọ sinu Prometheus ati pe a ṣe ojuran pẹlu Grafana. Lati lọ si wiwo iṣakoso Grafana, ṣiṣe aṣẹ ni isalẹ lẹhinna ṣii 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

Tite lori akojọ aṣayan Home oke apa osi ati yiyan Istio Service Dasibodu ni oke apa osi igun, bẹrẹ pẹlu iṣẹ sa-ayelujara-applati wo awọn metiriki ti a gba:

Pada si microservices pẹlu Istio. Apa 1

Ohun ti o duro de wa nibi jẹ iṣẹ ti o ṣofo ati alaidun patapata - iṣakoso kii yoo gba eyi rara. Jẹ ki a ṣẹda ẹru kekere kan pẹlu aṣẹ atẹle:

$ while true; do 
    curl -i http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

Bayi a ni awọn aworan ti o dara julọ, ati ni afikun si wọn, awọn irinṣẹ Prometheus iyanu fun ibojuwo ati Grafana fun wiwo awọn metiriki ti yoo gba wa laaye lati kọ ẹkọ nipa iṣẹ ṣiṣe, ilera, ilọsiwaju / ibajẹ ninu awọn iṣẹ ni akoko pupọ.

Ni ipari, jẹ ki a wo awọn ibeere wiwa kakiri ni awọn iṣẹ.

Jaeger: wiwa

A yoo nilo wiwa kakiri nitori pe awọn iṣẹ diẹ sii ti a ni, diẹ sii nira lati de idi ti ikuna naa. Jẹ ki a wo ọran ti o rọrun lati aworan ni isalẹ:

Pada si microservices pẹlu Istio. Apa 1
Apeere aṣoju ti ibeere ti kuna laileto

Ibeere naa wa, ṣubu - kini idi? Iṣẹ akọkọ? Tabi keji? Awọn imukuro wa ninu mejeeji - jẹ ki a wo awọn akọọlẹ ti ọkọọkan. Igba melo ni o ti mu ara rẹ ni ṣiṣe eyi? Iṣẹ wa dabi awọn aṣawari sọfitiwia ju awọn olupilẹṣẹ lọ…

Eyi jẹ iṣoro ti o wọpọ ni awọn iṣẹ microservices ati pe o yanju nipasẹ awọn ọna ṣiṣe wiwa kaakiri, ninu eyiti awọn iṣẹ n kọja akọsori alailẹgbẹ si ara wọn, lẹhin eyi ti a firanṣẹ alaye yii si eto wiwa, nibiti o ti ṣe afiwe pẹlu data ibeere. Àpèjúwe kan nìyí:

Pada si microservices pẹlu Istio. Apa 1
TraceId ni a lo lati ṣe idanimọ ibeere naa

Istio nlo Jaeger Tracer, eyiti o ṣe imuse ilana OpenTracing API olominira ataja. O le wọle si wiwo olumulo Jaeger pẹlu aṣẹ atẹle:

$ kubectl port-forward -n istio-system 
    $(kubectl get pod -n istio-system -l app=jaeger 
    -o jsonpath='{.items[0].metadata.name}') 16686

Bayi lọ si http://localhost:16686/ ko si yan iṣẹ kan sa-ayelujara-app. Ti iṣẹ naa ko ba han ni akojọ aṣayan-isalẹ, ṣafihan/ṣe ipilẹṣẹ iṣẹ ṣiṣe lori oju-iwe ki o ṣe imudojuiwọn wiwo naa. Lẹhin iyẹn, tẹ bọtini naa Wa Awọn itọpa, eyi ti yoo ṣe afihan awọn itọpa tuntun - yan eyikeyi - alaye alaye lori gbogbo awọn itọpa yoo han:

Pada si microservices pẹlu Istio. Apa 1

Itọpa yii fihan:

  1. Ibere ​​wa wọle istio-ingressgateway (Eyi ni ibaraenisepo akọkọ pẹlu ọkan ninu awọn iṣẹ naa, ati pe ID Trace kan ti ipilẹṣẹ fun ibeere naa), lẹhin eyi ẹnu-ọna fi ibeere ranṣẹ si iṣẹ naa. sa-ayelujara-app.
  2. Ninu iṣẹ sa-ayelujara-app Ibeere naa ni a gbe soke nipasẹ ọkọ ẹgbẹ Envoy, “ọmọ” kan ni a ṣẹda ni igba (eyi ni idi ti a fi rii ninu awọn itọpa) ati darí si apo eiyan sa-ayelujara-app. (igba - Ẹka ọgbọn ti iṣẹ ni Jaeger, eyiti o ni orukọ kan, akoko ibẹrẹ ti iṣẹ ati iye akoko rẹ. Awọn igba le jẹ itẹ-ẹiyẹ ati paṣẹ. Aworan acyclic ti a darí ti awọn igba ṣe itọpa kan. - isunmọ. itumọ.)
  3. Nibi ibeere naa ti ni ilọsiwaju nipasẹ ọna naa sentimentAnalysis. Awọn itọpa wọnyi ti jẹ ipilẹṣẹ nipasẹ ohun elo, i.e. wọn nilo awọn iyipada koodu.
  4. Lati akoko yii lọ, ibeere POST kan ti bẹrẹ ni sa-kannaa. ID itọpa gbọdọ wa ni ifiranšẹ siwaju lati sa-ayelujara-app.
  5. ...

Daakọ: Ni igbesẹ 4, ohun elo yẹ ki o wo awọn akọle ti ipilẹṣẹ nipasẹ Istio ki o fi wọn ranṣẹ si awọn ibeere ti o tẹle bi a ṣe han ninu aworan ni isalẹ:

Pada si microservices pẹlu Istio. Apa 1
(A) Istio jẹ iduro fun gbigbe awọn akọle; (B) Awọn iṣẹ jẹ iduro fun awọn akọle

Istio ṣe pupọ julọ iṣẹ nitori ... ṣe ipilẹṣẹ awọn akọle fun awọn ibeere ti nwọle, ṣẹda awọn aaye tuntun ni itọju ẹgbẹ kọọkan ati siwaju wọn. Sibẹsibẹ, laisi ṣiṣẹ pẹlu awọn akọsori inu awọn iṣẹ, ọna itọpa ibeere ni kikun yoo padanu.

Awọn akọle wọnyi gbọdọ wa ni akiyesi:

x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

Eyi kii ṣe iṣẹ-ṣiṣe ti o nira, ṣugbọn lati ṣe irọrun imuse rẹ wa tẹlẹ ọpọlọpọ awọn ikawe - fun apẹẹrẹ, ninu iṣẹ sa-web-app, Onibara RestTemplate dari awọn akọle wọnyi ti o ba kan ṣafikun Jaeger ati awọn ile-ikawe OpenTracing si rẹ addictions.

Ṣe akiyesi pe ohun elo Analysis Sentiment ṣe afihan awọn imuse ni Flask, Orisun omi, ati ASP.NET Core.

Ni bayi pe o han ohun ti a gba lati inu apoti (tabi o fẹrẹ jade kuro ninu apoti), jẹ ki a wo ipa-ọna aifwy daradara, iṣakoso ijabọ nẹtiwọki, aabo, ati bẹbẹ lọ!

Akiyesi. itumọ.: Ka nipa eyi ni apakan atẹle ti awọn ohun elo lori Istio lati Rinor Maloku, awọn itumọ eyiti yoo tẹle lori bulọọgi wa ni ọjọ iwaju to sunmọ. Imudojuiwọn (Oṣu Kẹta Ọjọ 14th): Apa keji ti a ti tẹjade tẹlẹ.

PS lati onitumọ

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun