Deui ka microservices kalawan Istio. Bagian 1

Deui ka microservices kalawan Istio. Bagian 1

Catetan. narjamahkeun.: Service meshes geus pasti jadi solusi relevan dina infrastruktur modern pikeun aplikasi handap arsitéktur microservice. Sanaos Istio tiasa aya dina biwir seueur insinyur DevOps, éta mangrupikeun produk anu cukup énggal anu, sanaos komprehensif dina hal kamampuan anu disayogikeun, peryogi waktos anu ageung pikeun akrab. Insinyur Jérman Rinor Maloku, anu tanggung jawab komputasi awan pikeun klien ageung di perusahaan telekomunikasi Oranyeu Jaringan, parantos nyerat séri bahan anu saé anu ngamungkinkeun anjeun gancang sareng jero teuleum ka Istio. Anjeunna ngamimitian carita na sareng naon anu tiasa dilakukeun ku Istio sacara umum sareng kumaha anjeun tiasa gancang ningali ku panon anjeun nyalira.

Istio - Proyék Open Source dikembangkeun ku kolaborasi sareng tim ti Google, IBM sareng Lyft. Éta ngarengsekeun pajeulitna anu timbul dina aplikasi basis microservices, sapertos:

  • Manajemén Lalu Lintas: timeouts, retries, load balancing;
  • kasalametan: auténtikasi pamaké tungtung na otorisasina;
  • Observability: nyukcruk, ngawaskeun, logging.

Sadaya ieu tiasa direngsekeun dina tingkat aplikasi, tapi saatos éta jasa anjeun moal deui "mikro". Sadaya usaha tambahan pikeun ngabéréskeun masalah ieu mangrupikeun runtah sumber daya perusahaan anu tiasa dianggo langsung pikeun nilai bisnis. Hayu urang nempo conto:

Manajer Proyék: Sabaraha lami kanggo nambihan fitur eupan balik?
pamekar: Dua sprints.

MP : Naon?.. CRUD euy!
Urang Sunda: Ngalakukeun CRUD mangrupikeun bagian anu gampang, tapi urang tetep kedah nga-asténtikasi sareng otorisasi pangguna sareng jasa. Kusabab jaringan teu bisa dipercaya, anjeun bakal kudu nerapkeun requests diulang, kitu ogé pola circuit breaker dina klien. Ogé, pikeun mastikeun yén sakabéh sistem teu ngadat, anjeun bakal kudu timeouts na gegedéan (pikeun leuwih rinci ngeunaan duanana pola disebutkeun, tingali engké dina artikel - approx. transl.), sareng pikeun ngadeteksi masalah, ngawaskeun, ngalacak, […]

MP: Oh, teras hayu urang lebetkeun fitur ieu kana jasa Produk.

Jigana gagasan jelas: jumlah léngkah jeung usaha diperlukeun pikeun nambahkeun hiji layanan loba pisan. Dina tulisan ieu, urang bakal ningali kumaha Istio ngaleungitkeun sagala pajeulitna anu disebatkeun di luhur (anu henteu dimaksudkeun pikeun logika bisnis) tina jasa.

Deui ka microservices kalawan Istio. Bagian 1

nyarios: Artikel ieu nganggap yén anjeun gaduh pangaweruh ngeunaan Kubernetes. Upami teu kitu, kuring nyarankeun maca bubuka abdi Kubernetes sarta ngan sanggeus éta neruskeun maca bahan ieu.

Istio gagasan

Di dunya tanpa Istio, hiji layanan naroskeun langsung ka anu sanés, sareng upami aya kagagalan, palayanan kedah nanganan nyalira: ngadamel usaha énggal, nyayogikeun waktosna, muka pemutus sirkuit, jsb.

Deui ka microservices kalawan Istio. Bagian 1
Lalu lintas jaringan di Kubernetes

Istio nawiskeun solusi khusus, lengkep dipisahkeun tina jasa sareng fungsina ku ngaganggu komunikasi jaringan. Ku kituna eta ngalaksanakeun:

  • toleransi kasalahan: Dumasar kodeu status dina respon, eta understands naha pamundut nu gagal sarta ulang executes eta.
  • Kanaria rollouts: alihan ngan perséntase tetep tina requests ka versi anyar tina jasa.
  • Pangimeutan sareng métrik: Sabaraha lami éta jasa ngabales?
  • Tracing jeung Observability: Nambahkeun headers husus ka unggal pamundut na ngambah aranjeunna sakuliah kluster.
  • kasalametan: Retrieves token JWT, authenticates na authorizes pamaké.

Ieu ngan sababaraha kamungkinan (bener ngan sababaraha!) Pikeun intrik anjeun. Ayeuna hayu urang teuleum kana detil téknis!

Arsitéktur Istio

Istio nyegat sadaya lalu lintas jaringan sareng nerapkeun sakumpulan aturan pikeun éta, nyelapkeun proxy pinter dina bentuk wadah sidecar kana unggal pod. Proksi anu ngaktifkeun sadaya kamampuan ngabentuk a Data Plane, sareng aranjeunna tiasa dikonpigurasikeun sacara dinamis nganggo Pesawat kontrol.

Data Plane

Proxies diselapkeun kana pods ngidinan Istio pikeun gampang minuhan sarat urang butuh. Contona, hayu urang pariksa coba deui jeung fungsi circuit breaker.

Deui ka microservices kalawan Istio. Bagian 1
Kumaha retries na circuit megatkeun dilaksanakeun dina Utusan

Pikeun nyimpulkeun:

  1. utusan (urang ngobrol ngeunaan proxy anu aya dina wadah sidecar, anu disebarkeun salaku produk misah - kira-kira. tarjamah.) ngirimkeun pamundut ka conto mimiti layanan B sarta gagal.
  2. Utusan Sidecar nyobian deui (coba deui). (1)
  3. Paménta gagal sareng dipulangkeun ka proxy anu nyauran éta.
  4. Ieu ngabuka Circuit Breaker sareng nyauran jasa salajengna pikeun pamundut salajengna. (2)

Ieu ngandung harti yén anjeun teu kudu make perpustakaan Retry sejen, anjeun teu kudu nyieun palaksanaan sorangan Circuit megatkeun jeung Service Discovery dina basa programming X, Y atawa Z. Sadaya ieu jeung loba deui sadia out of the box. di Istio jeung teu merlukeun teu parobahan dina kode.

Hebat! Ayeuna anjeun badé angkat sareng Istio, tapi anjeun masih gaduh sababaraha mamang, patarosan terbuka. Upami ieu mangrupikeun solusi universal pikeun sadaya kaayaan dina kahirupan, maka anjeun gaduh kacurigaan alami: saatosna, sadaya solusi sapertos kanyataanna tétéla henteu cocog pikeun sagala hal.

Sareng tungtungna anjeun naros: "Naha tiasa disaluyukeun?"

Ayeuna anjeun parantos siap pikeun perjalanan laut, hayu urang kenal sareng Control Plane.

Pesawat kontrol

Ieu diwangun ku tilu komponén: Pilot, alat keur nyampur и Citadel, nu gawé bareng pikeun ngonpigurasikeun Envoys ka lalulintas ruteu, ngalaksanakeun kawijakan, sarta ngumpulkeun data telemetry. Schematically eta sadayana kasampak kawas kieu:

Deui ka microservices kalawan Istio. Bagian 1
Interaksi tina Control Plane jeung Data Plane

Envoys (i.e. pesawat data) dikonpigurasi ngagunakeun Kubernetes CRD (Definisi Sumberdaya Adat) didefinisikeun ku Istio sareng ditujukeun khusus pikeun tujuan ieu. Naon hartosna pikeun anjeun nyaéta aranjeunna sigana ngan ukur sumber daya sanés dina Kubernetes kalayan sintaksis anu akrab. Sakali dijieun, sumberdaya ieu bakal dijemput ku pesawat kontrol jeung dilarapkeun ka Envoys.

Hubungan jasa pikeun Istio

Kami parantos ngajelaskeun hubungan Istio sareng jasa, tapi sanés sabalikna: kumaha hubungan jasa sareng Istio?

Jujur, jasa sadar kana ayana Istio sapertos lauk tina cai nalika aranjeunna nanya ka diri, "Naon sih cai?"

Deui ka microservices kalawan Istio. Bagian 1
Ilustrasi Victoria Dimitrakopoulos: - Kumaha anjeun resep cai? - Naon waé cai?

Ku kituna, anjeun tiasa nyandak klaster gawé sarta sanggeus deploying komponén Istio, jasa ayana di dinya bakal neruskeun jalan, sarta sanggeus nyoplokkeun komponén ieu, sagalana bakal rupa deui. Ieu jelas yén dina hal ieu anjeun bakal leungit kamampuhan nu disadiakeun ku Istio.

Cukup téori - hayu urang nempatkeun pangaweruh ieu kana prakték!

Istio dina prakna

Istio merlukeun klaster Kubernetes kalawan sahenteuna 4 vCPUs sarta 8 GB RAM sadia. Pikeun gancang nyetél klaster sareng turutan pitunjuk tina tulisan éta, kuring nyarankeun ngagunakeun Google Cloud Platform, anu nawiskeun pangguna énggal bebas $300.

Saatos nyiptakeun klaster sareng ngonpigurasikeun aksés ka Kubernetes ngalangkungan utilitas konsol, anjeun tiasa masang Istio ngalangkungan manajer pakét Helm.

Pamasangan helm

Pasang klien Helm dina komputer anjeun, sakumaha dijelaskeun dina dokuméntasi resmi. Kami bakal ngagunakeun ieu pikeun ngahasilkeun témplat pikeun masang Istio dina bagian salajengna.

Masang Istio

Ngundeur sumberdaya Istio ti release panganyarna (Tumbu pangarang asli ka versi 1.0.5 parantos dirobih kana anu ayeuna, nyaéta 1.0.6 - kira-kira transl.), nimba eusi kana hiji diréktori, nu ayeuna mah bakal nelepon [istio-resources].

Pikeun gampang ngaidentipikasi sumberdaya Istio, nyieun ngaranspasi dina klaster K8s istio-system:

$ kubectl create namespace istio-system

Lengkepan pamasangan ku angkat ka diréktori [istio-resources] sareng ngajalankeun paréntah:

$ 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

Paréntah ieu bakal ngaluarkeun komponén konci Istio kana file istio.yaml. Kami ngarobih template standar pikeun nyocogkeun ka diri urang sorangan, netepkeun parameter ieu:

  • global.mtls.enabled dipasang di false (nyaéta auténtikasi mTLS ditumpurkeun - kira-kira.)pikeun simplify prosés dating urang;
  • tracing.enabled ngawengku nyukcruk pamundut maké Jaeger;
  • kiali.enabled installs Kiali kana klaster pikeun visualize jasa jeung lalulintas;
  • grafana.enabled installs Grafana pikeun visualize metrics dikumpulkeun.

Hayu urang nganggo sumber anu dihasilkeun ku paréntah:

$ kubectl apply -f istio.yaml

Pamasangan Istio dina kluster parantos réngsé! Antosan dugi sadayana pods aya dina namespace istio-system bakal tiasa Running atawa Completedku ngajalankeun paréntah di handap ieu:

$ kubectl get pods -n istio-system

Ayeuna kami parantos siap neraskeun dina bagian salajengna, dimana kami bakal ngamimitian aplikasina.

Arsitéktur aplikasi Analisis Sentimen

Hayu urang nganggo conto aplikasi microservice Analisis Sentimen dipaké dina geus disebutkeun Artikel bubuka pikeun Kubernetes. Éta cukup rumit pikeun nunjukkeun kamampuan Istio dina prakna.

Aplikasi ieu diwangun ku opat jasa mikro:

  1. palayanan SA-Pahareup, nu ngalayanan frontend hiji aplikasi Reactjs;
  2. palayanan SA-WebApp, nu ngalayanan queries Analisis Sentimen;
  3. palayanan SA-Logika, nu ngalakukeun sorangan analisis sentimen;
  4. palayanan SA-Eupan Balik, nu narima eupan balik ti pamaké ngeunaan akurasi analisis.

Deui ka microservices kalawan Istio. Bagian 1

Dina diagram ieu, salian ti jasa, urang ogé ningali Ingress Controller, anu dina Kubernetes ngarutekeun pamundut anu asup kana jasa anu cocog. Istio nganggo konsép anu sami dina Ingress Gateway na, langkung rinci anu bakal nuturkeun.

Ngajalankeun aplikasi sareng proxy ti Istio

Pikeun operasi salajengna disebutkeun dina artikel, clone gudang Anjeun istio-ngawasaan. Éta ngandung aplikasi sareng manifes pikeun Kubernetes sareng Istio.

Nyelapkeun sidecars

Insersi tiasa dilakukeun автоматически atawa sacara manual. Pikeun otomatis nyelapkeun peti sidecar, anjeun bakal kedah nyetel labél ka namespace nu istio-injection=enabled, anu dilakukeun ku paréntah di handap ieu:

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

Ayeuna unggal pod anu bakal disebarkeun dina rohangan ngaran standar (default) bakal nampa wadah sidecar na. Pikeun pariksa ieu, hayu urang nyebarkeun aplikasi uji ku jalan ka diréktori akar gudang [istio-mastery] sareng ngajalankeun paréntah di handap ieu:

$ 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

Saatos nyebarkeun jasa, hayu urang pariksa yén pods gaduh dua wadah (kalayan jasa sorangan sareng sidecar na) ku ngajalankeun paréntah kubectl get pods sarta mastikeun yén handapeun kolom READY nilai dieusian 2/2, ngalambangkeun yén duanana wadahna jalan:

$ 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

Sacara visual sigana kieu:

Deui ka microservices kalawan Istio. Bagian 1
Proksi utusan dina salah sahiji pods

Ayeuna yén aplikasina parantos dijalankeun, urang kedah ngijinkeun lalu lintas anu asup kana aplikasi éta.

Gerbang Ingress

Praktek pangalusna pikeun ngahontal ieu (ngawenangkeun lalulintas di kluster) nyaéta ngaliwatan Gerbang Ingress di Istio, anu lokasina di "ujung" klaster sarta ngidinan Anjeun pikeun ngaktipkeun fitur Istio kayaning routing, beban balancing, kaamanan sarta ngawas pikeun lalulintas asup.

Komponén Ingress Gateway sareng jasa anu diteruskeun sacara éksternal dipasang dina kluster nalika instalasi Istio. Pikeun milarian alamat IP éksternal tina jasa, jalankeun:

$ 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

Kami bakal teras-terasan ngaksés aplikasi nganggo IP ieu (kuring bakal ngarujuk kana EXTERNAL-IP), ku kituna pikeun genah kami bakal nyerat nilai kana variabel:

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

Upami anjeun nyobian ngaksés IP ieu ngalangkungan browser ayeuna, anjeun bakal nampi kasalahan Service Unavailable, sabab sacara standar Istio meungpeuk sadaya lalulintas asup, Gateway teu acan diartikeun.

sumberdaya gateway

Gateway mangrupakeun CRD (Custom Resource Definition) dina Kubernetes, diartikeun sanggeus masang Istio dina kluster jeung sangkan kamampuhan pikeun nangtukeun palabuhan, protokol jeung host nu urang hoyong ngidinan lalulintas asup.

Dina kasus urang, urang hoyong ngijinkeun lalu lintas HTTP dina port 80 pikeun sadaya host. tugas dilaksanakeun ku harti handap (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:
- "*"

Konfigurasi ieu henteu peryogi katerangan iwal pamilih istio: ingressgateway. Kalawan pamilih ieu urang bisa nangtukeun mana Ingress Gateway nerapkeun konfigurasi. Dina kasus urang, ieu mangrupikeun pengontrol Ingress Gateway, anu dipasang sacara standar di Istio.

Konfigurasi diterapkeun ku nelepon paréntah di handap ieu:

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

Gerbang ayeuna ngamungkinkeun aksés ka port 80, tapi henteu terang dimana rute anu dipénta. Pikeun ieu anjeun peryogi Layanan Virtual.

sumberdaya VirtualService

VirtualService nyarioskeun ka Ingress Gateway kumaha jalur pamundut anu diidinan dina kluster.

Paménta ka aplikasi kami anu ngalangkungan http-gateway kedah dikirim ka sa-frontend, sa-web-app sareng jasa sa-feedback:

Deui ka microservices kalawan Istio. Bagian 1
Rute anu kedah dikonpigurasikeun sareng VirtualServices

Hayu urang tingali pamundut anu kedah dikirim ka SA-Frontend:

  • Cocog persis sapanjang jalan / kudu dikirim ka SA-Frontend pikeun meunangkeun index.html;
  • Jalur anu diawalan /static/* kudu dikirim ka SA-Frontend pikeun nampa file statik dipaké dina frontend, kayaning CSS jeung JavaScript;
  • Jalur dicocogkeun ku éksprési biasa '^.*.(ico|png|jpg)$', kudu dikirim ka SA-Frontend, sabab Ieu mangrupikeun gambar-gambar anu dipidangkeun dina halaman.

palaksanaan kahontal ku konfigurasi handap (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

Poin penting:

  1. VirtualService ieu nujul kana requests datang ngaliwatan http-gateway;
  2. В destination Ladenan nu requests dikirim ditangtukeun.

nyarios: Konfigurasi di luhur disimpen dina file sa-virtualservice-external.yaml, nu ogé ngandung setélan pikeun routing di SA-WebApp jeung SA-Eupan Balik, tapi geus disingget didieu dina artikel pikeun brevity.

Hayu urang nerapkeun VirtualService ku nelepon:

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

nyarios: Nalika urang meakeun sumberdaya Istio, Kubernetes API Server nyieun hiji acara anu ditampi ku Istio Control Plane, sarta sanggeus éta konfigurasi anyar dilarapkeun ka unggal pod urang Utusan proxies. Jeung Ingress gateway controller nembongan jadi utusan sejen ngonpigurasi dina Control Plane. Sadaya ieu kasampak kawas ieu dina diagram:

Deui ka microservices kalawan Istio. Bagian 1
Konfigurasi Istio-IngressGateway pikeun routing pamundut

Aplikasi Analisis Sentimen ayeuna sayogi dina http://{EXTERNAL-IP}/. Tong hariwang upami anjeun nampi status Teu Kapanggih: Kadang-kadang peryogi sakedik deui kanggo konfigurasi tiasa dianggo sareng cache Envoy pikeun ngapdet.

Sateuacan neraskeun, ulin sareng aplikasi sakedik pikeun ngahasilkeun lalu lintas. (Kahadiranna dipikabutuh pikeun kajelasan dina tindakan anu salajengna - kira-kira transl.).

Kiali: katénjo

Pikeun kéngingkeun antarmuka administratif Kiali, jalankeun paréntah di handap ieu:

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

... jeung muka http://localhost:20001/, asup salaku admin/admin. Di dieu anjeun bakal manggihan loba fitur mangpaat, contona, pikeun pariksa konfigurasi komponén Istio, visualize jasa ngagunakeun informasi dikumpulkeun ti intercepting requests jaringan, meunang jawaban kana patarosan "Saha nu ngahubungan saha?", "Vérsi nu tina jasa ieu ngalaman. gagal?” teras salajengna. Sacara umum, ngajalajah kamampuan Kiali sateuacan ngaléngkah ka visualisasi métrik sareng Grafana.

Deui ka microservices kalawan Istio. Bagian 1

Grafana: métrik visualisasi

Métrik anu dikumpulkeun di Istio asup kana Prometheus sareng ditingali ku Grafana. Pikeun kéngingkeun antarmuka administratif Grafana, jalankeun paréntah di handap teras buka 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

Ngaklik dina ménu imah kénca luhur jeung milih Istio Service Dashboard di belah kénca juru luhur, mimitian ku layanan sa-web-aplikasipikeun ningali métrik anu dikumpulkeun:

Deui ka microservices kalawan Istio. Bagian 1

Anu ngantosan urang di dieu nyaéta pagelaran anu kosong sareng pikaboseneun - manajemén moal pernah nyatujuan ieu. Hayu urang ngadamel beban leutik kalayan paréntah di handap ieu:

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

Ayeuna kami gaduh grafik anu langkung saé, sareng salian ti éta, alat Prometheus anu saé pikeun ngawaskeun sareng Grafana pikeun ngabayangkeun métrik anu bakal ngamungkinkeun urang diajar ngeunaan kinerja, kaséhatan, perbaikan / degradasi jasa kana waktosna.

Tungtungna, hayu urang tingali ngalacak pamundut dina jasa.

Jaeger: nyukcruk

Urang bakal peryogi ngalacak sabab langkung seueur jasa anu urang gaduh, langkung sesah dugi ka anu nyababkeun gagalna. Hayu urang tingali kasus basajan tina gambar di handap ieu:

Deui ka microservices kalawan Istio. Bagian 1
conto has tina pamundut gagal acak

Paménta datang, ragrag - naon sababna? jasa munggaran? Atawa nu kadua? Aya pengecualian dina duanana - hayu urang tingali log masing-masing. Sabaraha sering anjeun nyekel diri anjeun ngalakukeun ieu? Karya urang leuwih kawas detektif software ti developer ...

Ieu masalah umum dina microservices sarta direngsekeun ku sistem tracing disebarkeun, nu jasa ngalirkeun header unik ka silih, nu satutasna informasi ieu diteruskeun ka sistem tracing, dimana eta dibandingkeun jeung data pamundut. Ieu ilustrasi:

Deui ka microservices kalawan Istio. Bagian 1
TraceId dipaké pikeun ngaidentipikasi pamundut

Istio nganggo Jaeger Tracer, anu ngalaksanakeun kerangka OpenTracing API anu mandiri. Anjeun tiasa ngaksés antarbeungeut pangguna Jaeger kalayan paréntah di handap ieu:

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

Ayeuna buka http://localhost:16686/ tur pilih jasa sa-web-aplikasi. Upami jasa éta henteu ditingalikeun dina ménu turun-handap, tunjukkeun / ngahasilkeun kagiatan dina halaman sareng ngapdet antarmuka. Sanggeus éta, klik dina tombol Manggihan Traces, anu bakal nunjukkeun jejak anu pang anyarna - pilih naon waé - inpormasi lengkep ngeunaan sadaya jejak bakal muncul:

Deui ka microservices kalawan Istio. Bagian 1

Tanda ieu nunjukkeun:

  1. Paménta asup istio-ingressgateway (ieu mangrupikeun interaksi munggaran sareng salah sahiji jasa, sareng ID Trace dibangkitkeun pikeun pamundut), saatos éta gateway ngirimkeun pamundut ka jasa. sa-web-aplikasi.
  2. Dina jasa sa-web-aplikasi Paménta dijemput ku sidecar Utusan, "anak" diciptakeun dina bentang (éta naha urang ningali dina ngambah) sareng dialihkeun ka wadahna. sa-web-aplikasi. (bentang - Unit logis gawé di Jaeger, nu boga ngaran, mimiti waktu operasi sarta durasi na. Spans bisa nested tur maréntahkeun. A diarahkeun grafik asiklik bentang ngabentuk renik. - kira-kira. tarjamah.)
  3. Di dieu pamundut diolah ku métode sentimenAnalysis. ngambah ieu geus dihasilkeun ku aplikasi, i.e. aranjeunna diperlukeun parobahan kode.
  4. Ti momen ieu, pamundut POST dimimitian dina sa-logika. Trace ID kudu diteruskeun ti sa-web-aplikasi.
  5. ...

nyarios: Dina lengkah 4, aplikasi kedah ningali lulugu anu dihasilkeun ku Istio sareng lulus kana pamundut salajengna sapertos anu dipidangkeun dina gambar di handap ieu:

Deui ka microservices kalawan Istio. Bagian 1
(A) Istio tanggung jawab pikeun neraskeun header; (B) Jasa nanggungjawaban kanggo headers

Istio ngalakukeun seueur padamelan kusabab ... dibangkitkeun header pikeun requests asup, nyiptakeun bentang anyar dina unggal sidecare tur diteruskeun aranjeunna. Nanging, tanpa damel sareng header di jero jasa, jalur ngambah pamundut lengkep bakal leungit.

Header di handap ieu kedah dipertimbangkeun:

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

Ieu sanés tugas anu sesah, tapi pikeun nyederhanakeun palaksanaanna parantos aya loba perpustakaan - contona, dina ladenan sa-web-app, klien RestTemplate neruskeun header ieu upami anjeun ngan saukur nambihan perpustakaan Jaeger sareng OpenTracing ka addictions na.

Catet yén aplikasi Analisis Sentimen nunjukkeun palaksanaan dina Flask, Spring, sareng ASP.NET Core.

Ayeuna geus jelas naon urang meunang out of the box (atawa ampir out of the box), hayu urang tingali dina fine-tuned routing, manajemén lalulintas jaringan, kaamanan, jsb!

Catetan. narjamahkeun.: Baca ngeunaan ieu dina bagian salajengna bahan on Istio ti Rinor Maloku, tarjamahan nu bakal nuturkeun dina blog urang dina mangsa nu bakal datang. Update (14 Maret): Bagian kadua geus diterbitkeun.

PS ti penerjemah

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar