Шарҳ. тарҷума.: Шабакаҳои хидматрасонӣ бешубҳа як ҳалли мувофиқ дар инфрасохтори муосир барои замимаҳои пас аз меъмории микросервис табдил ёфтанд. Гарчанде ки Истио метавонад дар забони бисёре аз муҳандисони DevOps бошад, он як маҳсулоти хеле нав аст, ки гарчанде аз ҷиҳати қобилиятҳои пешниҳодкардаи он ҳамаҷониба бошад ҳам, барои шинос шудан бо вақти зиёд лозим аст. Муҳандиси олмонӣ Ринор Малоку, ки масъули роёниши абрӣ барои муштариёни калон дар ширкати телекоммуникатсионии Orange Networks мебошад, як қатор маводҳои олиҷанобро навиштааст, ки ба шумо имкон медиҳанд, ки ба Истио зуд ва амиқ ғарқ шавед. Вай саргузашти худро аз он оғоз мекунад, ки Истио умуман чӣ кор карда метавонад ва чӣ тавр шумо онро бо чашмони худ зуд дидан мумкин аст.
Истио — Лоиҳаи кушодаасос, ки дар ҳамкорӣ бо дастаҳои Google, IBM ва Lyft таҳия шудааст. Он мушкилотеро, ки дар барномаҳои микросервисҳо ба вуҷуд меоянд, ҳал мекунад, ба монанди:
- Идоракунии трафик: танаффусҳо, кӯшишҳои такрорӣ, мувозинати сарборӣ;
- Амният: аутентификатсия ва иҷозати корбари ниҳоӣ;
- Мушоҳидашаванда: пайгирӣ, назорат, сабт.
Ҳамаи инҳоро дар сатҳи барнома ҳал кардан мумкин аст, аммо баъд аз он хидматҳои шумо дигар “микро” нестанд. Ҳама кӯшишҳои иловагӣ барои ҳалли ин мушкилот сарфи беҳудаи захираҳои ширкат мебошанд, ки метавонанд мустақиман барои арзиши тиҷорат истифода шаванд. Биёед як мисолро дида бароем:
Менеҷери лоиҳа: Барои илова кардани хусусияти фикру мулоҳиза чӣ қадар вақт лозим аст?
Таҳиягар: Ду спринт.Депутат: Чӣ?.. Ин танҳо CRUD аст!
R: Иҷрои CRUD қисми осон аст, аммо мо ба ҳар ҳол бояд корбарон ва хидматҳоро тасдиқ ва иҷозат диҳем. Азбаски шабака эътимоднок аст, шумо бояд дархостҳои такрориро иҷро кунед, инчуниннамунаи барқгиранда дар мизоҷон. Инчунин, барои боварӣ ҳосил кардани он, ки тамоми система аз кор набарояд, ба шумо мӯҳлатҳои вақт ваболопӯшҳо (барои тафсилоти бештар дар бораи ҳарду намунаи зикршуда, ба баъд дар мақола нигаред - тақрибан тарҷума.), ва барои ошкор кардани мушкилот, мониторинг, пайгирӣ, […]Депутат: Оҳ, биёед ин хусусиятро ба хидмати Маҳсулот ворид кунем.
Ман фикр мекунам, ки идея равшан аст: миқдори қадамҳо ва кӯшишҳо барои илова кардани як хидмат хеле бузург аст. Дар ин мақола, мо дида мебароем, ки чӣ тавр Istio тамоми мураккабии дар боло зикршударо (ки барои мантиқи тиҷорат пешбинӣ нашудааст) аз хидматҳо хориҷ мекунад.
эрод гирифтан: Ин мақола тахмин мекунад, ки шумо дониши кории Kubernetes доред. Дар акси ҳол, ман хонданро тавсия медиҳам
Истио идея
Дар ҷаҳони бидуни Истио як хидмат ба дигараш дархостҳои мустақим мекунад ва дар сурати ноком шудан, хидмат бояд онро худаш ҳал кунад: кӯшиши нав кунад, вақтро таъмин кунад, сӯзандоруро кушояд ва ғайра.
Трафики шабакавӣ дар Кубернетес
Истио як ҳалли махсусеро пешниҳод мекунад, ки комилан аз хидматҳо ҷудо карда шудааст ва бо дахолат ба алоқаи шабакавӣ фаъолият мекунад. Ва ин тавр амал мекунад:
- таҳаммулпазирии хатогиҳо: Дар асоси рамзи вазъ дар посух, он мефаҳмад, ки оё дархост ноком шудааст ва онро дубора иҷро мекунад.
- Намоиши канарӣ: танҳо фоизи муайяни дархостҳоро ба версияи нави хидмат равона мекунад.
- Мониторинг ва ченакҳо: Барои посух додан ба хидмат чанд вақт лозим шуд?
- Мушоҳида ва пайгирӣ: Ба ҳар як дархост сарлавҳаҳои махсус илова мекунад ва онҳоро дар саросари кластер пайгирӣ мекунад.
- Амният: Токени JWT-ро дарёфт мекунад, корбаронро тасдиқ мекунад ва иҷозат медиҳад.
Инҳо танҳо чанде аз имкониятҳо ҳастанд (дар ҳақиқат танҳо чанде!) Акнун биёед ба тафсилоти техникӣ ғарқ шавем!
Меъмории Истио
Истио тамоми трафики шабакаро боздошта, ба он як қатор қоидаҳоро татбиқ намуда, прокси интеллектуалиро дар шакли контейнери паҳлӯ ба ҳар як подкаст ворид мекунад. Прокси-проксиҳо, ки тамоми қобилиятҳоро фаъол мекунанд, a Ҳавопаймои маълумот, ва онҳо метавонанд бо истифода аз динамикӣ танзим карда шаванд Ҳавопаймои идоракунӣ.
Ҳавопаймои маълумот
Проксиҳои ба pods воридшуда имкон медиҳанд, ки Istio ба осонӣ ба талаботҳои ба мо ниёздошта ҷавобгӯ бошад. Масалан, биёед функсияҳои такрорӣ ва ноқилро тафтиш кунем.
Чӣ тавр озмоишҳои такрорӣ ва шикастани схемаҳо дар Envoy амалӣ карда мешаванд
Барои ҷамъбаст:
- Энди (мо дар бораи прокси воқеъ дар як контейнери паҳлӯӣ, ки ҳамчун тақсим карда мешавад
маҳсулоти алоҳида - тахминан. тарҷума.) дархостро ба марҳилаи якуми хидмати B мефиристад ва ноком мешавад. - Фиристодаи Сидекар бори дигар кӯшиш мекунад (аз нав кӯшиш кунед). (1)
- Дархост ноком мешавад ва ба прокси, ки онро даъват кардааст, баргардонида мешавад.
- Ин Circuit Breaker-ро мекушояд ва хидмати навбатиро барои дархостҳои минбаъда даъват мекунад. (2)
Ин маънои онро дорад, ки ба шумо лозим нест, ки китобхонаи дигари Retry -ро истифода баред, ба шумо лозим нест, ки амалисозии Circuit Breaking and Service Discovery-ро бо забони барномасозии X, Y ё Z созед. Ҳамаи ин ва бисёр чизҳои дигар аз қуттӣ дастрасанд дар Истио ва талаб намекунад Не тағйирот дар код.
Аҷоиб! Акнун шумо метавонед бо Истио ба саёҳат рафтан мехоҳед, аммо шумо ҳоло ҳам шубҳа доред, саволҳои кушод доред. Агар ин як ҳалли универсалӣ барои ҳама ҳолатҳои ҳаёт бошад, пас шумо шубҳаи табиӣ доред: дар ниҳоят, ҳамаи ин гуна қарорҳо дар асл барои ҳама ҳолатҳо мувофиқ нестанд.
Ва дар ниҳоят шумо мепурсед: "Оё онро танзим кардан мумкин аст?"
Акнун шумо ба сафари бахрй тайёред, биёед бо самолёти идоракунй шинос шавем.
Ҳавопаймои идоракунӣ
Он аз се ҷузъ иборат аст: Pilot, Миксер и Citadel, ки якҷоя кор мекунанд, то фиристодагонро барои масири трафик, татбиқи сиёсатҳо ва ҷамъоварии маълумоти телеметрӣ танзим кунанд. Схематикӣ ҳамааш чунин менамояд:
Таъсири мутақобилаи ҳавопаймои идоракунӣ бо ҳавопаймои додаҳо
Фиристодагон (яъне ҳавопаймои маълумот) бо истифода аз танзим карда мешаванд
Муносибати хизматрасонӣ ба Истио
Мо муносибати Истиро бо хадамот тавсиф кардем, аммо баръакс: хидматҳо ба Истио чӣ гуна иртибот доранд?
Рости гап, хадамот аз ҳузури Истио чун моҳӣ аз об огоҳанд, вақте аз худ мепурсанд: «Ба ҳар ҳол об чист?».
Масал
Ҳамин тариқ, шумо метавонед як кластери корӣ гиред ва пас аз ҷойгиркунии ҷузъҳои Istio, хидматҳои дар он ҷойгиршуда корро идома медиҳанд ва пас аз нест кардани ин ҷузъҳо ҳама чиз дубора хуб мешавад. Маълум аст, ки дар ин ҳолат шумо имкониятҳои пешниҳодкардаи Истиоро аз даст медиҳед.
Назарияи кифоя — биёед ин донишро дар амал татбик кунем!
Истио дар амал
Истио кластери Kubernetes бо ҳадди ақал 4 vCPU ва 8 ГБ RAM дастрасро талаб мекунад. Барои зуд таъсис додани кластер ва риояи дастурҳои мақола, ман тавсия медиҳам Google Cloud Platform, ки ба корбарони нав пешниҳод мекунад
Пас аз сохтани кластер ва танзими дастрасӣ ба Kubernetes тавассути утилитаи консол, шумо метавонед Istio -ро тавассути мудири бастаи Helm насб кунед.
Монтажи руль
Мизоҷи Helm -ро дар компютери худ насб кунед, тавре ки дар
Насб кардани Istio
Захираҳои Истиро аз [istio-resources]
.
Барои ба осонӣ муайян кардани захираҳои Istio, дар кластери K8s фазои ном эҷод кунед istio-system
:
$ kubectl create namespace istio-system
Бо рафтан ба директория насбро анҷом диҳед [istio-resources]
ва иҷро кардани фармон:
$ 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
Ин фармон ҷузъҳои асосии Istio-ро ба файл мебарорад istio.yaml
. Мо қолаби стандартиро барои мувофиқ кардани худ тағир додем ва параметрҳои зеринро муайян кардем:
-
global.mtls.enabled
дар насб карда шудаастfalse
(яъне аутентификатсияи mTLS ғайрифаъол аст - тақрибан.)барои содда кардани раванди шиносоӣ мо; -
tracing.enabled
пайгирии дархостро бо истифода аз Jaeger дар бар мегирад; -
kiali.enabled
Kiali-ро ба кластер барои визуализатсияи хадамот ва трафик насб мекунад; -
grafana.enabled
Grafana-ро барои визуалии ченакҳои ҷамъшуда насб мекунад.
Биёед захираҳои тавлидшударо бо фармон истифода барем:
$ kubectl apply -f istio.yaml
Насбкунии Истио дар кластер анҷом ёфт! То он даме, ки ҳамаи подкҳо дар фазои ном ҳастанд, интизор шавед istio-system
қодир мешавад Running
ё Completed
бо иҷро кардани фармони зерин:
$ kubectl get pods -n istio-system
Ҳоло мо омодаем, ки дар фасли оянда идома диҳем, ки дар он ҷо мо барномаро ба кор меандозем.
Архитектураи барномаи таҳлили эҳсосот
Биёед мисоли барномаи microservice Analysis Sentiment Analysis-ро истифода барем, ки дар боло зикр шудааст
Ин барнома аз чаҳор хидматрасонии хурд иборат аст:
- хизматрасонӣ SA-Фронтенд, ки ба фронти барномаи Reactjs хизмат мерасонад;
- хизматрасонӣ SA-WebApp, ки ба дархостҳои Таҳлили эҳсосот хидмат мекунад;
- хизматрасонӣ SA-Мантиқ, ки худаш ичро мекунад
таҳлили эҳсосот ; - хизматрасонӣ SA-Мулоқот, ки аз корбарон дар бораи дурустии таҳлил фикру мулоҳизаҳо мегирад.
Дар ин диаграмма, ба ғайр аз хидматҳо, мо инчунин Controller Ingress-ро мебинем, ки дар Кубернетес дархостҳои воридотӣ ба хидматҳои мувофиқро равона мекунад. Истио як консепсияи шабеҳро дар дохили Gateway Ingress-и худ истифода мебарад, ки тафсилоти бештари он пас аз он хоҳад буд.
Иҷрои барнома бо прокси аз Istio
Барои амалиёти минбаъдаи дар мақола зикршуда, анбори худро клон кунед
Ҷойгиркунии варақаҳои паҳлӯ
Ворид кардан мумкин аст худкор ё дастӣ. Барои ба таври худкор ворид кардани контейнерҳои паҳлӯ, шумо бояд ба фазои ном нишона гузоред istio-injection=enabled
, ки бо фармони зерин анҷом дода мешавад:
$ kubectl label namespace default istio-injection=enabled
namespace/default labeled
Акнун ҳар як подкале, ки дар фазои номи пешфарз ҷойгир карда мешавад (default
) контейнери канории худро мегирад. Барои тасдиқи ин, биёед барномаи санҷиширо тавассути рафтан ба директорияи решаи анбор ҷойгир кунем [istio-mastery]
ва фармони зеринро иҷро кунед:
$ 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
Пас аз ҷойгиркунии хидматҳо, биёед тафтиш кунем, ки подкҳо ду контейнер доранд (бо худи хидмат ва паҳлӯи он) бо иҷро кардани фармон kubectl get pods
ва боварӣ ҳосил кунед, ки дар зери сутун READY
арзиши муайяншуда 2/2
, рамзи он аст, ки ҳарду контейнер кор мекунанд:
$ 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
Ба таври визуалӣ он чунин менамояд:
Прокси фиристода дар яке аз подкастҳо
Ҳоло, ки барнома кор мекунад ва кор мекунад, мо бояд иҷозат диҳем, ки трафики воридотӣ ба барнома ворид шавад.
Дарвозаи воридшавӣ
Таҷрибаи беҳтарин барои ноил шудан ба ин (иҷозат додани трафик дар кластер) тавассути Дарвозаи воридшавӣ дар Istio, ки дар "канори" кластер ҷойгир аст ва ба шумо имкон медиҳад, ки хусусиятҳои Istio ба монанди масир, мувозинати сарборӣ, амният ва мониторинги трафики даромадро фаъол созед.
Ҷузъи Ingress Gateway ва хидмате, ки онро ба берун интиқол медиҳад, дар кластер ҳангоми насби Istio насб карда шуданд. Барои дарёфти суроғаи IP-и берунаи хидмат, иҷро кунед:
$ 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
Мо дастрасӣ ба барномаро бо истифода аз ин IP идома медиҳем (ман онро ҳамчун EXTERNAL-IP меномам), аз ин рӯ, барои роҳат мо арзишро ба тағирёбанда менависем:
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
Агар шумо ҳоло кӯшиш кунед, ки ба ин IP тавассути браузер дастрасӣ пайдо кунед, шумо хатогии хидмати дастнорасро мегиред, зеро бо нобаёнӣ Istio ҳама трафики воридотро маҳкам мекунад, Дарвоза ҳанӯз муайян нашудааст.
Манбаи дарвоза
Gateway як CRD (Таърифи захираҳои фармоишӣ) дар Kubernetes мебошад, ки пас аз насб кардани Istio дар кластер муайян карда мешавад ва имкон медиҳад, ки бандарҳо, протоколҳо ва ҳостҳоро муайян кунад, ки мо мехоҳем трафики даромадро иҷозат диҳем.
Дар ҳолати мо, мо мехоҳем трафики HTTP-ро дар порти 80 барои ҳама ҳостҳо иҷозат диҳем. Вазифа бо таърифи зерин амалӣ карда мешавад (
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
Ин конфигуратсия ба ҷуз аз селектор ба тавзеҳот ниёз надорад istio: ingressgateway
. Бо ин селектор мо метавонем муайян кунем, ки конфигуратсияро ба кадом Gateway ворид кардан лозим аст. Дар ҳолати мо, ин контролери Gateway Ingress аст, ки ба таври нобаёнӣ дар Istio насб шудааст.
Конфигуратсия тавассути занги фармони зерин татбиқ карда мешавад:
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created
Дарвоза ҳоло имкон медиҳад, ки ба порти 80 дастрасӣ пайдо кунад, аммо намедонад, ки дархостҳоро ба куҷо равона кунад. Барои ин ба шумо лозим меояд Хидматҳои виртуалӣ.
Манбаи VirtualService
VirtualService ба Ingress Gateway мегӯяд, ки чӣ гуна масири дархостҳоеро, ки дар дохили кластер иҷозат дода шудаанд, нишон медиҳад.
Дархостҳо ба замимаи мо, ки тавассути http-gateway меоянд, бояд ба хадамоти sa-frontend, sa-web-app ва sa-feedback фиристода шаванд:
Роҳҳое, ки бояд бо VirtualServices танзим карда шаванд
Биёед дархостҳоеро бубинем, ки бояд ба SA-Frontend фиристода шаванд:
- Мутобиқати дақиқ дар роҳ
/
бояд ба SA-Frontend барои гирифтани index.html фиристода шавад; - Роҳҳои пешакӣ
/static/*
бояд ба SA-Frontend фиристода шавад, то файлҳои статикиро, ки дар фронт истифода мешаванд, ба монанди CSS ва JavaScript; - Роҳҳое, ки бо ифодаи муқаррарӣ мувофиқанд
'^.*.(ico|png|jpg)$'
, бояд ба СА-Фронтенд фиристода шавад, зеро Инҳо тасвирҳое ҳастанд, ки дар саҳифа нишон дода шудаанд.
Амалисозӣ тавассути конфигуратсияи зерин ба даст оварда мешавад (
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
Нуқтаҳои муҳим:
- Ин VirtualService ба дархостҳои воридшаванда ишора мекунад http-дарвоза;
- В
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 ҳодисаеро эҷод мекунад, ки аз ҷониби ҳавопаймои идоракунии Istio қабул карда мешавад ва пас аз он конфигуратсияи нав ба ҳар як прокси фиристодаи подшоҳ татбиқ мешавад. Ва нозири Gateway Ingress ба назар мерасад, ки фиристодаи дигаре аст, ки дар ҳавопаймои идоракунӣ танзим карда шудааст. Ҳамаи ин дар диаграмма чунин менамояд:
Конфигуратсияи Istio-IngressGateway барои масири дархост
Замимаи таҳлили эҳсосот ҳоло дастрас аст http://{EXTERNAL-IP}/
. Парво накунед, агар шумо ҳолати ёфт нашуд: Баъзан барои эътибор пайдо кардани конфигуратсия ва навсозии кэшҳои Envoy каме бештар вақт лозим мешавад.
Пеш аз идома додан, барои тавлиди трафик каме бо барнома бозӣ кунед. (ҳузури он барои возеҳият дар амалҳои минбаъда зарур аст - тақрибан тарҷума.).
Киали: мушоҳидашаванда
Барои ворид шудан ба интерфейси маъмурии Kiali, фармони зеринро иҷро кунед:
$ kubectl port-forward
$(kubectl get pod -n istio-system -l app=kiali
-o jsonpath='{.items[0].metadata.name}')
-n istio-system 20001
... ва кушода
Grafana: визуализатсияи метрикӣ
Метрикҳои дар Истио ҷамъовардашуда ба Prometheus дохил мешаванд ва бо Grafana визуалӣ карда мешаванд. Барои ворид шудан ба интерфейси маъмурии Grafana, фармони зерро иҷро кунед ва сипас кушоед
$ kubectl -n istio-system port-forward
$(kubectl -n istio-system get pod -l app=grafana
-o jsonpath={.items[0].metadata.name}) 3000
Ба меню пахш кунед хона чапи боло ва интихоб Панели хидматрасонии Истио дар кунҷи чапи боло, бо хидмат оғоз кунед sa-web-appБарои дидани нишондиҳандаҳои ҷамъоварӣ:
Он чизе ки моро дар ин ҷо интизор аст, иҷрои холӣ ва комилан дилгиркунанда аст - роҳбарият ҳеҷ гоҳ инро тасдиқ намекунад. Биёед бо фармони зерин як бори хурд эҷод кунем:
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
Ҳоло мо графикҳои хеле зебо дорем ва илова бар онҳо, асбобҳои аҷоиби Prometheus барои мониторинг ва Grafana барои визуализатсияи ченакҳо, ки ба мо имкон медиҳанд, ки дар бораи кор, саломатӣ, беҳбудиҳо / таназзули хидматҳо бо мурури замон маълумот гирем.
Ниҳоят, биёед ба пайгирии дархостҳо дар хидматҳо назар андозем.
Ҷейгер: пайгирӣ
Мо ба пайгирӣ ниёз дорем, зеро чӣ қадаре ки хидматҳои мо бештар бошанд, расидан ба сабаби нокомӣ ҳамон қадар мушкилтар мешавад. Биёед як парвандаи оддиро аз расми зер бубинем:
Намунаи маъмулии дархости тасодуфии ноком
Дархост меояд, меафтад - сабаб чист? Аввалин хидмат? Ё дуюм? Дар ҳарду истисноҳо мавҷуданд - биёед ба гузоришҳои ҳар як назар андозем. Шумо чанд вақт худро бо ин кор дастгир кардаед? Кори мо назар ба таҳиягарон бештар ба детективҳои нармафзор монанд аст...
Ин як мушкили маъмул дар хидматрасонии микросервис аст ва тавассути системаҳои пайгирии тақсимшуда ҳал карда мешавад, ки дар он хидматҳо сарлавҳаи беназирро ба ҳамдигар мегузаранд ва пас аз он ин маълумот ба системаи пайгирӣ интиқол дода мешавад, ки он бо маълумоти дархост муқоиса карда мешавад. Инак як мисол:
TraceId барои муайян кардани дархост истифода мешавад
Istio Jaeger Tracer-ро истифода мебарад, ки чаҳорчӯбаи API-и аз фурӯшанда мустақили OpenTracing -ро амалӣ мекунад. Шумо метавонед ба интерфейси корбари Jaeger бо фармони зерин дастрасӣ пайдо кунед:
$ kubectl port-forward -n istio-system
$(kubectl get pod -n istio-system -l app=jaeger
-o jsonpath='{.items[0].metadata.name}') 16686
Акнун ба
Ин нишон медиҳад:
- Дархост ворид мешавад истио-ingressgateway (ин аввалин муомила бо яке аз хадамот аст ва барои дархост ID Trace тавлид мешавад), пас аз он шлюз дархостро ба хидмат мефиристад sa-web-app.
- Дар хидмат sa-web-app дархост аз ҷониби мошини фиристодашуда гирифта мешавад, дар фосила "кӯдак" эҷод карда мешавад (бинобар ин мо онро дар пайҳо мебинем) ва ба контейнер равона карда мешавад. sa-web-app. (
Span - воҳиди мантиқии кор дар Jaeger, ки дорои ном, вақти оғози амалиёт ва давомнокии он мебошад. Фосилаҳо метавонанд лона ва фармоиш дода шаванд. Графикаи асикликии равонашуда пайро ташкил медиҳад. — тахминан. тарҷума.) - Дар ин ҷо дархост бо усул коркард карда мешавад Таҳлили эҳсосот. Ин пайҳо аллакай аз ҷониби барнома тавлид шудаанд, яъне. онҳо тағйироти кодро талаб мекарданд.
- Аз ин лаҳза дархости POST оғоз мешавад са-мантик. ID Trace бояд аз sa-web-app.
- ...
эрод гирифтан: Дар қадами 4, барнома бояд сарлавҳаҳои аз ҷониби Istio тавлидшударо бубинад ва онҳоро ба дархостҳои минбаъда, тавре ки дар тасвири зер нишон дода шудааст, интиқол диҳад:
$A) Истио барои интиқоли сарлавҳаҳо масъул аст; (B) Хизматҳо барои сарлавҳаҳо масъуланд
Истио аксари корҳоро иҷро мекунад, зеро ... сарлавҳаҳоро барои дархостҳои воридотӣ тавлид мекунад, дар ҳар як паҳлӯи паҳлӯӣ фосилаҳои нав эҷод мекунад ва онҳоро интиқол медиҳад. Аммо, бидуни кор бо сарлавҳаҳои дохили хидматҳо, роҳи пайгирии дархост пурра гум мешавад.
Сарлавҳаҳои зерин бояд ба назар гирифта шаванд:
x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context
Ин кори душвор нест, аммо барои содда кардани татбиқи он аллакай вуҷуд дорад
Дар хотир доред, ки барномаи таҳлили эҳсосот амалияҳоро дар Flask, Spring ва ASP.NET Core нишон медиҳад.
Акнун, ки маълум аст, ки мо аз қуттӣ чӣ мебароем (ё қариб аз қуттӣ), биёед ба масири дақиқи танзимшуда, идоракунии трафики шабака, амният ва ғайра назар кунем!
Шарҳ. тарҷума.: Дар ин бора дар қисми навбатии маводҳои Истио аз Ринор Малоку мутолиа кунед, ки тарҷумаҳои онҳо дар ояндаи наздик дар блоги мо хоҳанд буд. UPDATE (14 март):
PS аз тарҷумон
Инчунин дар блоги мо хонед:
- "Бозгашт ба microservices бо Istio":
қисми 2 (маршрут, назорати ҳаракат) ,қисми 3 (тасдиқ ва иҷозат) ; - «
Conduit - шабакаи хидматрасонии сабук барои Kubernetes »; - «
Шабакаи хидматрасонӣ чист ва чаро ба ман ба он ниёз дорам [барои барномаи абрӣ бо микросервисҳо]? »; - «
Дастури тасвирӣ барои шабака дар Кубернетес. Қисмҳои 1 ва 2 »; - «
Чӣ тавр ин контейнери паҳлӯ ба ин ҷо [дар Кубернетес] расид? ".
Манбаъ: will.com