Redeo ad microservices cum Istio. Pars II

Redeo ad microservices cum Istio. Pars II

Nota. transl.: Reticuli servitii certae solutionis in recentioribus infrastructuris ad applicationes quae sequuntur architecturae microserviae factae sunt. Dum Istio in ore plurium fabrum DevOps esse potest, satis novum productum est quod, cum comprehensivum secundum facultates quas praebet, notabile temporis spatium requiret ut ad familiaritatem accedat. Ingenium Germanicum Rinor Maloku, qui nubem computandi pro magnis clientibus apud telecommunicationum societatis Networks Aureum est, scripsit mirabilem seriem materiarum quae te cito et alte in Istio intendere permittit. Historiam suam incipit quanam Istio generaliter facere possit et quomodo oculis tuis eam cito videre possis.

Istio β€” An Open Source project in collaboratione cum iugis a Google, IBM et Lyft evoluta. Complicationes solvit quae in applicationibus microservis substructio oriuntur, ut sunt:

  • Negotiatio Management: timeouts, retries, pondera librans;
  • salutem: finis user authenticas et auctoritas;
  • Observabilitas: typum, vigilantia, logging.

Haec omnia in gradu applicationis solvi possunt, sed postea officia tua "micro" non amplius erunt. Omnes extra conatum ad has difficultates solvendas superfluum est copiarum societatum quae directe ad valorem negotii adhiberi possunt. Intueamur exemplum:

Project Procurator: Quousque capit plumam addere?
Elit: Duo sprints.

MP: Quid?.. Crud iustus!
R: Crud facere est facilis pars, sed adhuc opus est ut users et officia authentice confirmes. Cum reticulum leve est, postulationibus crebris ad efficiendum opus erit, sicut etiam circa ruptor exemplaris in clientibus. Item, fac ut tota ratio non fragorem, timeoutibus indigebit bulkheads (per plura de utroque exempla memorata vide infra in art. - approx. transl.)atque ut problemata, vigilantia, pervestiganda deprehendas, […]

MP: Oh, mox inseramus hanc plumam in servitium Producti.

Patet notionem meam sententiam: moles gressus et conatus ad unum opus permagnum addecet. In hoc articulo, videbimus quomodo Istio omnem complexionem, de qua supra (id est negotium logicae non destinatum esse) a officiis removet, intueamur.

Redeo ad microservices cum Istio. Pars II

illud: Hic articulus ponit te scire Kubernetes opus habere. Alioquin commendo Lectio meam introductio ad Kubernetes nec nisi post hanc materiam continue legentes.

Istio idea

In mundo sine Istio, officium unum alteri directam postulat, et in casu defectio, servitium se ipsum tractare debet: fac novum conatum, praestitutum tempus, aperturas praevaricatoris ambitum, etc.

Redeo ad microservices cum Istio. Pars II
Retiacula negotiatio in Kubernetes

Istio peculiarem solutionem praebet, ab officiis omnino separatam et per communicationem retis seiunctam. Et sic est utensilia;

  • culpa tolerantia: Fundatur in codice status responsionis, intellegit an petitio defecerit et re-exsequatur.
  • Canariae rollouts: redirects only fixa recipis petitionum ad novam servitii versionem.
  • Cras et metrics: Quamdiu accepit pro servitio respondere?
  • typum et Observabilitatem: Adiungit speciales capita singula petita et perscrutans eos per botrum.
  • salutem: receptat JWT indicium, authenticas et auctoritates utentes.

Hae possibilitates paucae sunt (realiter paucae!) insidiandi tibi. Nunc in singula technicas intendere!

Istio architectura

Istio omnia retis negotiatio intercipit ac regulas ei applicat, procuratorem callidum in modum vasculi sidecaris in singulas podagras inserens. Proxies ut strenuus omnes facultates formet a Data Planeac dynamice conformari possunt Imperium Planum.

Data Plane

Procuratores siliquas inseri sinunt Istio ut facile metus, quae nobis necessaria sunt. Exempli gratia, retry et functiones ruptor ambitus cohibeamus.

Redeo ad microservices cum Istio. Pars II
Quomodo retriae et ambitus fractionis in Envoye impleantur

Summatim,

  1. envoy (loquimur de procuratore in vase sidecaro sito, quod est distributum separatum productum β€” proxime. transl.) instantia mandati ad primam instantiam officii B et deficit.
  2. Legatus Sidecar iterum conatur (Retry). (1)
  3. Postulatio deficit et redditur procuratorio qui vocatur fr.
  4. Circuit Breaker aperit et vocat proximum ministerium pro petitionibus subsequentibus. (2)

Hoc significat quod alia bibliotheca Retry utendi non habes, non habes exsecutionem Circuitus Fractio et servitii Inventionis in programmando sermone X, Y vel Z. Haec omnia et multo plura praesto sunt ex archa in Istio et non requirit nihil mutatur in codice.

Magna! Nunc cum Istio navigare vis, sed dubitationes adhuc habes, apertas interrogationes. Si haec solutio universalis est pro omnibus occasionibus in vita, tunc habes naturalem suspicionem; tamen omnes huiusmodi solutiones in re eveniunt ad omnem casum idoneae.

Denique quaeris: "Numquid est vestibulum?"

Nunc paratus es ad navigationem maritimam, cognoscamus Planum Imperium.

Imperium Planum

Constat ex tribus partibus; Corporation, blender ΠΈ arxquae cooperantur Legati ad iter negotiationis, ad rationes cogendas, et ad data telemetria colligenda. Schematice hoc totum spectat sic:

Redeo ad microservices cum Istio. Pars II
Commercium Imperium plane cum Data Plane

Legati (i.e. planum datae) configurantur utendo Kubernetes CRD (Custom Resource Definitions) ab Istio definita et ad hoc specialiter destinata. Quid hoc sit vobis, ut videamini aliud esse auxilium in Kubernetes cum nota syntaxi. Postquam creata, haec subsidia a plano moderatio colligentur et legatis applicabuntur.

Relatio officiorum ad Istio

Istio relationem ad officia diximus, sed non vicissim: quomodo officia Istio referuntur?

Esse honestum, officia Isti praesentiae conscia sunt sicut pisces aquae, cum se interrogant, "Quid est usquam aqua?"

Redeo ad microservices cum Istio. Pars II
illustratio Victoria Dimitrakopoulos: - Quomodo aqua tibi placet? - Quid est usquam aqua?

Sic, botrum operarium poteris et postquam Istio partes explicas, officia in ea locata operare perseverent, et, remotis his elementis, omnia denique iterum erunt. Plane in hoc casu facultates ab Istio amittes.

Satis theoriam - hanc scientiam in praxim induamus!

Istio in usu

Istio botrum requirit Kubernetes cum saltem 4 vCPUs et 8 GB ipsius RAM in promptu. Ut celeriter botrum erigas et ex articulo praecepta sequaris, suadeo utens Google Cloud Platform, quod novos usores offert liberum $ CCC.

Post botrum creavisti et accessum ad Kubernetes per utilitatem consolatorium condens, Istio per involucrum Helm procurator instituere potes.

Galea institutionem

Helm clientem install computatrum tuum, de quo in officialis documenta. Formulas generandi hoc utemur ad Istio in altera sectione inaugurandi.

installing Istio

Download Istio resources from tardus release (originis auctoris nexus cum versione 1.0.5 in hodiernam mutata est, i.e. 1.0.6 - approx. transl.)excerpe contenta in unum presul, quem ego posthac voco [istio-resources].

Ut facultates Istio facile cognoscantur, spatium spatii in botro K8s efficiunt istio-system:

$ kubectl create namespace istio-system

Perficere institutionem eundo ad indicem [istio-resources] et currit mandatum;

$ 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

Hoc mandatum clavem partium Istio ad limam outputet istio.yaml. Formulam normae mutavimus ad nos aptam, parametris sequentibus denotans:

  • global.mtls.enabled installed in false (i.e. mTLS authenticas is disabled - approx).ad simpliciorem reddere nostri Morbi processum;
  • tracing.enabled includit petitionem Jaeger repetens;
  • kiali.enabled Kiali in botrum instituit ut operas visualise et negotiationes;
  • grafana.enabled Installsway Grafana ad visualise collecta metrice.

Utamur genitis opibus cum imperio;

$ kubectl apply -f istio.yaml

Institutionem Istio in botro completam est! Exspecta donec omnes siliquae in spatio nominali sunt istio-system poterit Running aut Completedper currendo mandatum inferius:

$ kubectl get pods -n istio-system

Nunc parati sumus in altera sectione pergere, ubi applicationem dabimus et currendo.

Architecture SENTENTIAE Analysis application

Utamur exemplo Sentis Analysis microservice adhibitis in iam dictis Introductio articulus ad Kubernetes. Intricata est satis ostendere facultates Istio in usu.

Applicatio quattuor microservices consistit:

  1. obsequium SA-Frontendqui servit frontendi Reactjs applicatione;
  2. obsequium SA-WebAppquae sentienti Analysis queritur;
  3. obsequium SA-Logicqui se ipsum sensus analysis;
  4. obsequium SA-Feedbackquae opiniones ab utentibus accipit de subtilitate analysi.

Redeo ad microservices cum Istio. Pars II

In hoc schemate, praeter officia, etiam videmus Ingress Controllerem, qui in Kubernetes itinerum petitionum opportunis servitiis ineuntis. Istio simili notione utitur in porta sua Ingress, de quibus plura sequentur.

Currens applicationem cum procuratorio ab Istio

Ad ulteriores operationes, de quibus in articulo, repositio clone istio-dominium. Usus continet et manifestat Kubernetes et Istio.

illigat sidecars

Potest fieri insertio automatice aut manually. Ut automatice vasa sidecara inserere, pittacium nomine spatii imponere necesse erit istio-injection=enabledquod fit cum tali imperio;

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

Nunc unumquodque vasculum quod in spatio nominali enucleatur (default) sidecar continens ejus accipiet. Ad hoc comprobandum, experimentum explicamus eundo ad directorium radicis repositorii [istio-mastery] et currit mandatum hoc;

$ 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

Explicatis officiis, scriptor reprehendo siliquas duas vasculas habere (cum ipso servitio et eius sidecaro) per currendo mandatum. kubectl get pods ac certam sub columna READY certum valorem 2/2significans quod utrumque vas currit;

$ 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

Visu spectat sic:

Redeo ad microservices cum Istio. Pars II
Internuntius procuratorem in uno siliquae

Nunc applicationis sursum et cursus, necesse est ut advenientis negotiatio in applicatione venire sinat.

Ingress Gateway

Praxi ad hoc assequendum (permittit negotiationis in botro) est per Ingress Gateway in Istio, quae ad "ora" botri sita est et permittit tibi ut lineamenta Istio efficias ut routing, onere conpensationis, securitatis ac vigilantiae negotiationis advenientis.

Componentes portae Ingress et ministerium quod extrinsecus promovetur in botro per institutionem Istio installati sunt. Ut invenias IP oratio externa servitii, currite:

$ 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

Applicationem utendo hoc IP (ut EXTERNUM-IP referam) pergamus accedere, ut commodum scribemus valorem in variabilem:

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

Si hoc IP per pasco nunc accedere coneris, Service Unavailable errorem accipies, quia per defaltam Istio impedit omnes advenientis negotiationisNullam porta nulla sed dictum finibus.

Porta resource

Porta est CRD (Consuetudine Resource Definition) in Kubernetes, definita insertis Istio in botro et facultas specificandi portus, protocollum et exercitum pro quibus ineuntes mercaturam facere volumus.

In nostro casu volumus ut negotiatio HTTP in portu 80 pro omnibus exercitibus permittat. Negotium impletur hac definitione (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:
- "*"

Haec conformatio nulla explicatione indiget nisi ad electrix istio: ingressgateway. Hoc selectore exprimere possumus quem ingressum portae ad conformationem applicandam. In casu nostro, hic est moderator Gateway Ingress, qui per defaltam Istio constitutus est.

Configuratio applicatur sequens mandatum vocando;

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

Porta nunc aditus ad portum 80 permittit, sed nescit unde petit iter itineris. Hoc enim tibi opus est Virtual Services.

VirtualService resource

VirtualService narrat Ingress Gateway quomodo petitiones viae quae intra botrum permittuntur sunt.

Petitiones ad applicationem nostram venientem per http-portam mittendae sunt ad frontem, sa-textus app et sa-feedback officia;

Redeo ad microservices cum Istio. Pars II
Itinera quae cum VirtualServices configurari necesse habent

Inspiciamus petitiones quae ad SA-Frontend mittendas:

  • Exigito par per viam / mittendus ad SA-Frontend ut index.html;
  • Viae praefixae /static/* mittendus est ad SA-Frontend ad recipiendas staticas usus in frontend, ut CSS et JavaScript;
  • Iustis verbis aequavit semitas '^.*.(ico|png|jpg)$'mittendus ad SA-Frontend, eo . Hae sunt imagines in pagina pictae.

Effectum exsequendam configuratione sequenti (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)$'
    route:
    - destination:
        host: sa-frontend             # 2
        port:
number: 80

Praecipua puncta:

  1. Hoc VirtualService refert ad petitiones venientes http porta;
  2. Π’ destination Ministerium ad quod preces mittuntur, determinatur.

illud: Configuratio supra reposita in tabella sa-virtualservice-external.yaml, quod etiam in SA-WebApp et SA-Feedback occasus continet, sed hic in articulo brevitatis est abbreviatus.

VirtualService applicamus vocando:

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

illud: Cum Istio facultates consumimus, Kubernetes API Servo eventum creat qui ab Istio Imperium Plane accipitur, et postea nova schematis de singulis procuratoribus podagrae applicatur. Et Gateway moderatoris Ingress alius Legatus in Plano Imperium figuratus esse videtur. Haec omnia in schemate similia sunt:

Redeo ad microservices cum Istio. Pars II
Istio-IngressGateway conformationem petentibus fuso

Sententia Analysis applicationem nunc praesto est http://{EXTERNAL-IP}/. Nolite ergo solliciti esse si status Non Inventum adepto: Interdum paulo longiorem accipit pro conformatione ad effectum et ad thesauros Internuntius renovandos.

Priusquam progrediar, ludere cum app frenum ad mercaturam generandam. praesentia eius necessaria est ad claritatem in actionibus subsequentibus - approx. transl..

Kiali: observability

Ut ad interfacem administrativam Kiali pervenias, hoc mandatum curre;

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

... and open http://localhost:20001/, logging in as admin/admin. Multa hic invenies lineamenta utilia, exempli gratia, ad reprimendam Istio partium figurationem, operas visualize utentes informationes a retis intercipiendis postulationibus collectas, responde quaestionibus "Quis est contactus quos?", "Quae versio muneris experitur? defectis? " et sic porro. In genere explora facultatem Kiali antequam movendi ad metricos visualisandi cum Grafana.

Redeo ad microservices cum Istio. Pars II

Grafana: metrics visualisation

Metrica collecta in Istio in Prometheum et subjiciuntur apud Grafana. Ut Grafana ad interfacem administrativam pervenias, imperium inferius curre et deinde aperire 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

Clicking in menu domum summo sinistram et eligens Istio Service Dashboard in summo angulo sinistro committitur servitium sa-textus-app-collecta metrice intueri:

Redeo ad microservices cum Istio. Pars II

Quod hic nos manet, inanis est et omnino taediosa effectus - hoc procuratio numquam probabit. Creamus parvum onus cum hoc imperio:

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

Nunc graphas multo meliores habemus, et praeter ea mirabilia Promethei instrumenta vigilantia et Grafana ad metri visualisandi quae nos permittit discere de observantia, sanitate, melioramentis / degradationibus in servitiis per tempus.

Denique petitiones in officiis repetamus.

Jaeger: typum

Quia quanto plura officia habemus, tanto difficilius est causa defectui. Intueamur casum simplicem e pictura infra:

Redeo ad microservices cum Istio. Pars II
Exemplum de temere defecit petitionem

Venit petitio, cadit - quae ratio est? Primum officium? an secundum? In utroque sunt exceptiones β€” trabes inspiciamus singulorum. Quoties hoc teipsum cepisti? Nostrum opus magis simile est detectores luctus quam tincidunt...

Haec quaestio communis in microservices est et a systematibus vestigationibus distributis solvitur, in quibus officia inter se unum caput transeunt, post quod haec informationes ad typum systematis transmittuntur, ubi cum notitia petitionis confertur. Hic exemplum est:

Redeo ad microservices cum Istio. Pars II
TraceId est ad petitionem identify

Istio Jaeger Tracer utitur, qui instrumentum venditoris independens OpenTracing API compage conficit. Jaeger usor interfacetum accedere potes cum sequenti imperio:

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

Nunc ad http://localhost:16686/ et eligere servitium sa-textus-app-. Si ministerium in tabula gutta-down non ostenditur, actionem in pagina generare ostende ac interfaciem renovare. Post hoc, preme in puga pyga Vestigia invenire, qui recentissimas vestigia - selectas quaslibet - informationes in omnibus vestigiis ostendet;

Redeo ad microservices cum Istio. Pars II

Vestigium hoc ostendit:

  1. Petitio venit in istio-ingressgateway (hoc est primum commercium cum uno servitiorum, et Vestigium ID generatur pro petitione), post quod porta petit ad servitium. sa-textus-app-.
  2. In servitium sa-textus-app- petitio ab Legato sidecar delectatur, "puer" in spatio creatur (id est quod in vestigiis videmus) et ad continentem redirected. sa-textus-app-. (span β€” Unitas logica operis in Jaeger, quae nomen habet, tempus incipit operationis et eius durationis. Spanis nidificari et ordinari possunt. A graphi acyclici directi palmorum vestigium formant. β€” proxime. transl.)
  3. Hic petitio processit per modum sentimentAnalysis. Haec vestigia jam in applicatione generata sunt, i.e. codice mutationes non requiritur.
  4. Ex hoc tempore, postulatio cursorium initiatur sa-logica. Trace id est transmittantur a sa-textus-app-.
  5. ...

illud: In gradu 4, applicatio videre debet capita ab Istio generata et eas ad subsequentes petitiones transmittere ut in imagine infra ostendetur;

Redeo ad microservices cum Istio. Pars II
(a) Istio procuret capitis curam habere; (B) Services sunt responsible pro capitis

Istio maxime laboris quia... Capitulos generat ad petitiones advenientes, novas palmos in unaquaque parte laterum creat et eas promovet. Sed sine operando cum capitis intus operas, vestigium plenum petitionis iter peribit.

Sequentia capitis ratio habenda est:

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

Hoc non est arduum opus, sed ad simpliciorem eius exsecutionem iam est plures bibliothecas - exempli gratia, in servitio sa-textus appli, RestTemplate cliens hos principes promovet si simpliciter addas bibliothecas Jaeger et OpenTracing ad eius Acta.

Nota quod applicatio Sententiae demonstrat exsecutiones in Flask, Ver, et ASP.NET Core.

Nunc perspicuum est quid e cista (vel prope ex cista eximus), inspiciamus fuso modulate, retis mercaturae administratione, securitate, etc.

Nota. transl.Lege de hoc in altera parte materiarum Istio a Rinor Maloku, quarum translationes in nostro diario proximo sequentur. UPDATE (14 Martii): In secunda parte, iam editae sunt.

PS ab translator

Lege etiam in nostro diario:

Source: www.habr.com