Eslatma. tarjima.: Xizmat tarmoqlari, albatta, mikroservis arxitekturasidan keyingi ilovalar uchun zamonaviy infratuzilmada tegishli yechimga aylandi. Istio ko'plab DevOps muhandislarining og'zida bo'lishi mumkin bo'lsa-da, bu juda yangi mahsulot bo'lib, u taqdim etayotgan imkoniyatlar jihatidan har tomonlama bo'lsa-da, tanishish uchun ko'p vaqt talab qilishi mumkin. Orange Networks telekommunikatsiya kompaniyasida yirik mijozlar uchun bulutli hisoblash uchun mas'ul bo'lgan nemis muhandisi Rinor Maloku Istio-ga tez va chuqur sho'ng'ish imkonini beruvchi ajoyib materiallar seriyasini yozdi. U o'z hikoyasini Istio umuman nima qila olishi va qanday qilib tezda o'z ko'zingiz bilan ko'rishingiz mumkinligi bilan boshlaydi.
Istio β Google, IBM va Lyft jamoalari bilan hamkorlikda ishlab chiqilgan Ochiq manba loyihasi. U mikroservislarga asoslangan ilovalarda yuzaga keladigan murakkabliklarni hal qiladi, masalan:
transport boshqaruvi: vaqt tugashi, qayta urinishlar, yuklarni muvozanatlash;
Xavfsizlik: oxirgi foydalanuvchi autentifikatsiyasi va avtorizatsiyasi;
Kuzatish qobiliyati: kuzatish, kuzatish, jurnalga yozish.
Bularning barchasi dastur darajasida hal qilinishi mumkin, ammo bundan keyin sizning xizmatlaringiz endi "mikro" bo'lmaydi. Ushbu muammolarni hal qilish uchun barcha qo'shimcha harakatlar to'g'ridan-to'g'ri biznes qiymati uchun ishlatilishi mumkin bo'lgan kompaniya resurslarini behuda sarflashdir. Keling, bir misolni ko'rib chiqaylik:
Loyiha menejeri: Fikr-mulohaza funksiyasini kiritish qancha vaqt oladi?
Tuzuvchi: Ikkita sprint.
Deputat: Nima?.. Bu shunchaki CRUD!
Javob: CRUDni amalga oshirish oson qism, lekin biz hali ham foydalanuvchilar va xizmatlarni autentifikatsiya qilishimiz va avtorizatsiya qilishimiz kerak. Tarmoq ishonchsiz bo'lgani uchun siz takroriy so'rovlarni amalga oshirishingiz kerak bo'ladi, shuningdek elektron to'xtatuvchining namunasi mijozlarda. Bundan tashqari, butun tizim ishdan chiqmasligiga ishonch hosil qilish uchun sizga vaqt autlari kerak bo'ladi va bulkheadlar(ikkalasi eslatib o'tilgan naqshlar haqida batafsil ma'lumot olish uchun maqolaning keyingi qismiga qarang - taxminan tarjimasi.), va muammolarni aniqlash, monitoring qilish, kuzatish, [β¦]
MP: Oh, keling, ushbu xususiyatni Mahsulot xizmatiga kiritaylik.
Menimcha, fikr aniq: bitta xizmatni qo'shish uchun zarur bo'lgan qadamlar va harakatlar juda katta. Ushbu maqolada biz Istio yuqorida aytib o'tilgan barcha murakkabliklarni (bu biznes mantig'i uchun mo'ljallanmagan) xizmatlardan qanday olib tashlashini ko'rib chiqamiz.
nota: Ushbu maqolada siz Kubernetes bo'yicha amaliy ma'lumotlarga ega ekanligingizni taxmin qiladi. Aks holda, men o'qishni tavsiya qilaman mening Kubernetesga kirishim va shundan keyingina ushbu materialni o'qishni davom eting.
Istio g'oya
Istio bo'lmagan dunyoda bir xizmat boshqasiga to'g'ridan-to'g'ri so'rovlar yuboradi va ishlamay qolganda, xizmat uni o'zi hal qilishi kerak: yangi urinishni amalga oshirish, kutish vaqtini ta'minlash, o'chirgichni ochish va hokazo.
Kubernetesdagi tarmoq trafigi
Istio xizmatlardan butunlay ajratilgan va tarmoq aloqasiga xalaqit beradigan ixtisoslashtirilgan yechimni taklif etadi. Va shunday qilib, u amalga oshiradi:
xatolarga chidamlilik: Javobdagi holat kodiga asoslanib, so'rov bajarilmaganligini tushunadi va uni qayta bajaradi.
Kanareykalarni tarqatish: so'rovlarning faqat belgilangan foizini xizmatning yangi versiyasiga yo'naltiradi.
Monitoring va ko'rsatkichlar: Xizmat javob berish uchun qancha vaqt kerak bo'ldi?
Kuzatish va kuzatish: Har bir so'rovga maxsus sarlavhalar qo'shadi va ularni klaster bo'ylab kuzatib boradi.
Xavfsizlik: JWT tokenini oladi, foydalanuvchilarni autentifikatsiya qiladi va avtorizatsiya qiladi.
Bular sizni qiziqtiradigan imkoniyatlarning bir nechtasi (haqiqatdan ham bir nechtasi!). Endi texnik tafsilotlarga o'taylik!
Istio arxitekturasi
Istio barcha tarmoq trafigini to'xtatadi va unga bir qator qoidalarni qo'llaydi, har bir podkaga yonbosh konteyner ko'rinishidagi aqlli proksi-serverni kiritadi. Barcha imkoniyatlarni faollashtiradigan proksi-serverlar a hosil qiladi Ma'lumotlar tekisligi, va ular yordamida dinamik ravishda sozlanishi mumkin Boshqaruv tekisligi.
Ma'lumotlar tekisligi
Podkalarga kiritilgan proksi-serverlar Istio-ga bizga kerakli talablarni osongina qondirish imkonini beradi. Misol uchun, qayta urinish va o'chirgich funktsiyalarini tekshiramiz.
Qayta urinishlar va elektron uzilishlar Envoyda qanday amalga oshiriladi
Xulosa:
elchisi (biz tarqatiladigan yonbosh konteynerida joylashgan proksi-server haqida gapiramiz alohida mahsulot - taxminan. tarjima.) B xizmatining birinchi instantsiyasiga so'rov yuboradi va bajarilmaydi.
Elchi Sidecar yana urinib ko'radi (qayta urinish). (1)
So'rov bajarilmadi va uni chaqirgan proksi-serverga qaytariladi.
Bu Circuit Breakerni ochadi va keyingi so'rovlar uchun keyingi xizmatni chaqiradi. (2)
Bu shuni anglatadiki, siz boshqa Qayta urinish kutubxonasidan foydalanishingiz shart emas, X, Y yoki Z dasturlash tillarida o'chirish va xizmat ko'rsatishni ochishni o'zingiz amalga oshirishingiz shart emas. Bularning barchasi va yana ko'p narsalarni qutidan tashqarida topish mumkin. Istio-da va talab qilmaydi Yo'q koddagi o'zgarishlar.
Ajoyib! Endi siz Istio bilan sayohatga chiqmoqchi bo'lishingiz mumkin, ammo sizda hali ham shubhalar, ochiq savollar bor. Agar bu hayotdagi barcha holatlar uchun universal echim bo'lsa, unda sizda tabiiy shubha bor: aslida bunday echimlarning barchasi har qanday vaziyat uchun yaroqsiz bo'lib chiqadi.
Va nihoyat siz so'raysiz: "Uni sozlash mumkinmi?"
Endi siz dengiz sayohatiga tayyorsiz, keling, boshqaruv samolyoti bilan tanishamiz.
Boshqaruv tekisligi
U uchta komponentdan iborat: Uchuvchi, Mikser ΠΈ Citadel, ular Envoyslarni trafikni yo'naltirish, siyosatlarni amalga oshirish va telemetriya ma'lumotlarini yig'ish uchun sozlash uchun birgalikda ishlaydi. Sxematik ravishda hammasi quyidagicha ko'rinadi:
Boshqaruv tekisligining ma'lumotlar tekisligi bilan o'zaro ta'siri
Elchilar (ya'ni ma'lumotlar tekisligi) yordamida tuzilgan Kubernetes CRD (Maxsus Resurs Ta'riflari) Istio tomonidan belgilangan va shu maqsadda maxsus mo'ljallangan. Bu siz uchun nimani anglatadi, ular Kubernetesdagi tanish sintaksisga ega bo'lgan boshqa manba bo'lib ko'rinadi. Yaratilgandan so'ng, ushbu resurs boshqaruv samolyoti tomonidan olinadi va Elchilarga qo'llaniladi.
Xizmatlarning Istio bilan aloqasi
Biz Istio-ning xizmatlarga bo'lgan munosabatini tasvirlab berdik, lekin aksincha emas: xizmatlar Istio bilan qanday bog'liq?
Toβgβrisini aytsam, xizmatlar oβzlariga βSuv nima?β deb soβrashganda, Istio borligini baliq suvdagidek bilishadi.
Shunday qilib, siz ishlaydigan klasterni olishingiz mumkin va Istio komponentlarini joylashtirgandan so'ng, unda joylashgan xizmatlar ishlashni davom ettiradi va ushbu komponentlarni olib tashlaganingizdan so'ng, hamma narsa yana yaxshi bo'ladi. Bu holda siz Istio tomonidan taqdim etilgan imkoniyatlardan mahrum bo'lishingiz aniq.
Yetarlicha nazariya - keling, bu bilimlarni amalda qo'llaylik!
Istio amalda
Istio kamida 4 vCPU va 8 GB operativ xotiraga ega Kubernetes klasterini talab qiladi. Klasterni tezda o'rnatish va maqoladagi ko'rsatmalarga amal qilish uchun men yangi foydalanuvchilarni taklif qiladigan Google Cloud Platform-dan foydalanishni tavsiya qilaman. bepul $ 300.
Klaster yaratgandan va konsol yordam dasturi orqali Kubernetes-ga kirishni sozlaganingizdan so'ng, Istio-ni Helm paket menejeri orqali o'rnatishingiz mumkin.
Rulda o'rnatish
Helm mijozini bo'limda tavsiflanganidek kompyuteringizga o'rnating rasmiy hujjatlar. Biz bundan keyingi bo'limda Istio-ni o'rnatish uchun shablonlarni yaratish uchun foydalanamiz.
Istio o'rnatilmoqda
Istio resurslarini yuklab oling oxirgi reliz(asl muallifning 1.0.5 versiyasiga havolasi hozirgisiga o'zgartirildi, ya'ni 1.0.6 - taxminan tarjimasi), tarkibni bitta katalogga chiqarib oling, men bundan buyon chaqiraman [istio-resources].
Istio resurslarini osongina aniqlash uchun K8s klasterida nom maydoni yarating istio-system:
$ kubectl create namespace istio-system
Katalogga o'tish orqali o'rnatishni yakunlang [istio-resources] va buyruqni ishga tushirish:
Bu buyruq Istio ning asosiy komponentlarini faylga chiqaradi istio.yaml. Biz quyidagi parametrlarni belgilab, standart shablonni o'zimizga mos ravishda o'zgartirdik:
global.mtls.enabled ichida o'rnatilgan false(ya'ni, mTLS autentifikatsiyasi o'chirilgan - taxminan)tanishish jarayonini soddalashtirish;
tracing.enabled Jaeger yordamida so'rovlarni kuzatishni o'z ichiga oladi;
kiali.enabled xizmatlar va trafikni ko'rish uchun Kiali'ni klasterga o'rnatadi;
grafana.enabled yig'ilgan ko'rsatkichlarni ko'rish uchun Grafana-ni o'rnatadi.
Yaratilgan resurslardan buyruq bilan foydalanamiz:
$ kubectl apply -f istio.yaml
Istio-ni klasterga o'rnatish tugallandi! Barcha podlar nomlar maydonida bo'lguncha kuting istio-system qila oladi Running yoki Completedquyidagi buyruqni ishga tushirish orqali:
$ kubectl get pods -n istio-system
Endi biz dasturni ishga tushiradigan keyingi bo'limda davom etishga tayyormiz.
Sentiment Analysis ilovasining arxitekturasi
Keling, yuqorida aytib o'tilganda ishlatiladigan Sentiment Analysis mikroservis ilovasi misolidan foydalanaylik Kubernetesga kirish maqolasi. Bu Istioning imkoniyatlarini amalda ko'rsatish uchun etarlicha murakkab.
Ilova to'rtta mikroservisdan iborat:
xizmat SA-Frontend, bu Reactjs ilovasining old qismiga xizmat qiladi;
xizmat SA-WebApp, bu his-tuyg'ularni tahlil qilish so'rovlariga xizmat qiladi;
xizmat SA - fikr-mulohaza, bu foydalanuvchilarning tahlilning to'g'riligi haqida fikr-mulohazalarini oladi.
Ushbu diagrammada xizmatlarga qo'shimcha ravishda biz Kubernetes-da kiruvchi so'rovlarni tegishli xizmatlarga yo'naltiradigan Ingress Controller-ni ham ko'ramiz. Istio o'zining kirish shlyuzida shunga o'xshash kontseptsiyadan foydalanadi, bu haqda batafsilroq ma'lumot beriladi.
Ilovani Istio proksi-server bilan ishga tushirish
Maqolada aytib o'tilgan boshqa operatsiyalar uchun omboringizni klonlang ustalik. Unda Kubernetes va Istio uchun dastur va manifatlar mavjud.
Yon vagonlarni o'rnatish
Kiritish amalga oshirilishi mumkin avtomatik ravishda yoki qo'lda. Avtomatik ravishda yonbosh konteynerlarini kiritish uchun siz nomlar maydoniga yorliq o'rnatishingiz kerak bo'ladi istio-injection=enabled, bu quyidagi buyruq bilan amalga oshiriladi:
Endi standart nom maydonida joylashtiriladigan har bir pod (default) o'zining yonbosh konteynerini oladi. Buni tekshirish uchun, keling, omborning ildiz katalogiga o'tish orqali test dasturini joylashtiramiz [istio-mastery] va quyidagi buyruqni ishga tushiring:
$ 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
Xizmatlarni ishga tushirgandan so'ng, keling, buyruqni ishga tushirish orqali podkalarda ikkita konteyner (xizmatning o'zi va uning yonboshi bilan) mavjudligini tekshiramiz. kubectl get pods va ustun ostida ekanligiga ishonch hosil qiling READY belgilangan qiymat 2/2, ikkala konteyner ishlayotganini bildiradi:
$ 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
Vizual ravishda u quyidagicha ko'rinadi:
Podkalardan birida elchi proksi-server
Endi ilova ishga tushdi va biz kiruvchi trafikni ilovaga kirishiga ruxsat berishimiz kerak.
Kirish shlyuzi
Bunga erishish uchun eng yaxshi amaliyot (klasterdagi trafikka ruxsat berish) orqali Kirish shlyuzi Istio-da, bu klasterning "chekkasida" joylashgan va Istio-ning marshrutlash, yukni muvozanatlash, xavfsizlik va kiruvchi trafikni kuzatish kabi xususiyatlarini yoqish imkonini beradi.
Ingress Gateway komponenti va uni tashqariga yo'naltiruvchi xizmat Istio o'rnatilishi vaqtida klasterga o'rnatilgan. Xizmatning tashqi IP manzilini bilish uchun quyidagilarni bajaring:
$ 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
Biz ushbu IP-dan foydalanib dasturga kirishni davom ettiramiz (men uni EXTERNAL-IP deb nomlayman), shuning uchun qulaylik uchun qiymatni o'zgaruvchiga yozamiz:
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
Agar siz hozirda ushbu IP-ga brauzer orqali kirishga harakat qilsangiz, siz "Xizmat mavjud emas" xatosini olasiz, chunki sukut bo'yicha Istio barcha kiruvchi trafikni bloklaydi, Gateway hali aniqlanmagan.
Gateway resursi
Gateway Kubernetesdagi CRD (Maxsus Resurs Ta'rifi) bo'lib, Istio-ni klasterga o'rnatgandan so'ng aniqlanadi va biz kiruvchi trafikka ruxsat bermoqchi bo'lgan portlar, protokollar va xostlarni belgilash imkoniyatini beradi.
Bizning holatda, biz barcha xostlar uchun 80-portda HTTP trafigiga ruxsat berishni xohlaymiz. Vazifa quyidagi ta'rif bilan amalga oshiriladi (http-gateway.yaml):
Ushbu konfiguratsiya selektordan tashqari hech qanday tushuntirishga muhtoj emas istio: ingressgateway. Ushbu selektor yordamida biz konfiguratsiyani qaysi Ingress Gatewayga qo'llashni belgilashimiz mumkin. Bizning holatda, bu Istio-da sukut bo'yicha o'rnatilgan Ingress Gateway kontrolleri.
Konfiguratsiya quyidagi buyruqni chaqirish orqali qo'llaniladi:
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created
Shlyuz endi 80-portga kirish imkonini beradi, lekin soβrovlarni qayerga yoβnaltirishni bilmaydi. Buning uchun sizga kerak bo'ladi Virtual xizmatlar.
VirtualService resursi
VirtualService kirish shlyuziga klaster ichida ruxsat etilgan so'rovlarni qanday yo'naltirish kerakligini aytadi.
Ilovaga http-shlyuz orqali keladigan so'rovlar sa-frontend, sa-web-app va sa-feedback xizmatlariga yuborilishi kerak:
VirtualServices bilan sozlanishi kerak bo'lgan marshrutlar
Keling, SA-Frontendga yuborilishi kerak bo'lgan so'rovlarni ko'rib chiqaylik:
Yo'lda aniq moslik / index.html olish uchun SA-Frontendga yuborilishi kerak;
Prefiksli yo'llar /static/* CSS va JavaScript kabi frontendda ishlatiladigan statik fayllarni olish uchun SA-Frontendga yuborilishi kerak;
Muntazam ifoda bilan mos keladigan yo'llar '^.*.(ico|png|jpg)$', SA-Frontendga yuborilishi kerak, chunki Bu sahifada ko'rsatilgan rasmlar.
Ushbu VirtualXizmat orqali kelgan so'rovlarga ishora qiladi http-shlyuz;
Π destination So'rovlar yuboriladigan xizmat aniqlanadi.
nota: Yuqoridagi konfiguratsiya faylda saqlanadi sa-virtualservice-external.yaml, unda SA-WebApp va SA-Feedback-da marshrutlash sozlamalari ham mavjud, ammo bu yerda qisqachalik uchun maqolada qisqartirilgan.
Keling, qo'ng'iroq qilish orqali VirtualService-dan foydalanamiz:
nota: Istio resurslarini iste'mol qilganimizda, Kubernetes API Server Istio Control Plane tomonidan qabul qilinadigan voqea yaratadi va shundan so'ng yangi konfiguratsiya har bir pod's Envoy proksi-serverlariga qo'llaniladi. Va Ingress Gateway kontrolleri Boshqaruv tekisligida sozlangan boshqa elchi bo'lib ko'rinadi. Bularning barchasi diagrammada shunday ko'rinadi:
So'rovni yo'naltirish uchun Istio-IngressGateway konfiguratsiyasi
Sentiment Analysis ilovasi endi mavjud http://{EXTERNAL-IP}/. Agar topilmadi maqomini olsangiz, tashvishlanmang: Ba'zan konfiguratsiya kuchga kirishi va Envoy keshlarini yangilash uchun biroz ko'proq vaqt ketadi.
Davom etishdan oldin, trafik yaratish uchun ilova bilan biroz o'ynang. (uning mavjudligi keyingi harakatlarda aniqlik uchun zarur - taxminan. Tarjima.).
Kiali: kuzatuvchanlik
Kiali ma'muriy interfeysiga kirish uchun quyidagi buyruqni bajaring:
... va oching http://localhost:20001/, admin/admin sifatida tizimga kiring. Bu erda siz ko'plab foydali funktsiyalarni topasiz, masalan, Istio komponentlari konfiguratsiyasini tekshirish, tarmoq so'rovlarini ushlab qolish natijasida to'plangan ma'lumotlardan foydalangan holda xizmatlarni vizualizatsiya qilish, "Kim kim bilan bog'lanmoqda?", "Xizmatning qaysi versiyasini boshdan kechirmoqda?" Degan savollarga javob olasiz. muvaffaqiyatsizliklar?" va h.k. Umuman olganda, Grafana yordamida ko'rsatkichlarni vizualizatsiya qilishga o'tishdan oldin Kiali imkoniyatlarini o'rganing.
Grafana: o'lchovlarni vizualizatsiya qilish
Istio-da to'plangan ko'rsatkichlar Prometeyga kiradi va Grafana yordamida ingl. Grafana ma'muriy interfeysiga kirish uchun quyidagi buyruqni ishga tushiring va keyin oching http://localhost:3000/:
Menyuni bosish Bosh sahifa yuqori chap va tanlash Istio xizmati asboblar paneli yuqori chap burchakda, xizmat bilan boshlang sa-veb-ilovato'plangan ko'rsatkichlarni ko'rish uchun:
Bu erda bizni bo'sh va mutlaqo zerikarli ishlash kutmoqda - rahbariyat buni hech qachon ma'qullamaydi. Quyidagi buyruq bilan kichik yuk yaratamiz:
Endi bizda ancha yaxshi grafikalar mavjud va ularga qo'shimcha ravishda monitoring uchun ajoyib Prometey vositalari va ko'rsatkichlarni vizualizatsiya qilish uchun Grafana mavjud bo'lib, ular vaqt o'tishi bilan xizmatlarning ishlashi, sog'lig'i, yaxshilanishlari / degradatsiyasi haqida bilib olishimizga imkon beradi.
Va nihoyat, xizmatlardagi so'rovlarni kuzatishni ko'rib chiqaylik.
Jaeger: kuzatish
Bizga kuzatuv kerak bo'ladi, chunki bizda qancha ko'p xizmatlar mavjud bo'lsa, muvaffaqiyatsizlik sababini aniqlash shunchalik qiyin bo'ladi. Keling, quyidagi rasmdagi oddiy holatni ko'rib chiqaylik:
Tasodifiy bajarilmagan so'rovning odatiy misoli
So'rov keladi, tushadi - sababi nima? Birinchi xizmat? Yoki ikkinchisimi? Ikkalasida ham istisnolar mavjud - keling, har birining jurnalini ko'rib chiqaylik. Qanchalik tez-tez o'zingizni shunday qilyapsiz? Bizning ishimiz ishlab chiquvchilardan ko'ra ko'proq dasturiy ta'minot detektivlariga o'xshaydi...
Bu mikroservislarda keng tarqalgan muammo bo'lib, taqsimlangan kuzatuv tizimlari tomonidan hal qilinadi, bunda xizmatlar bir-biriga noyob sarlavhani uzatadi, shundan so'ng bu ma'lumot kuzatuv tizimiga uzatiladi va u erda so'rov ma'lumotlari bilan taqqoslanadi. Mana bir misol:
TraceId so'rovni aniqlash uchun ishlatiladi
Istio sotuvchidan mustaqil OpenTracing API asosini amalga oshiradigan Jaeger Tracerdan foydalanadi. Jaeger foydalanuvchi interfeysiga quyidagi buyruq bilan kirishingiz mumkin:
Endi o'ting http://localhost:16686/ va xizmatni tanlang sa-veb-ilova. Agar xizmat ochiladigan menyuda ko'rsatilmasa, sahifada faoliyatni ko'rsating/yarating va interfeysni yangilang. Shundan so'ng, tugmani bosing Izlarni toping, bu eng so'nggi izlarni ko'rsatadi - istalganini tanlang - barcha izlar haqida batafsil ma'lumot paydo bo'ladi:
Bu iz ko'rsatadi:
So'rov keladi istio-ingressgateway (bu xizmatlardan biri bilan birinchi o'zaro aloqadir va so'rov uchun Trace ID yaratiladi), shundan so'ng shlyuz so'rovni xizmatga yuboradi. sa-veb-ilova.
Xizmatda sa-veb-ilova so'rov Elchining yon mashinasi tomonidan qabul qilinadi, oraliqda "bola" yaratiladi (shuning uchun biz uni izlarda ko'ramiz) va konteynerga yo'naltiriladi sa-veb-ilova. (span - Jaegerdagi mantiqiy ish birligi, uning nomi, operatsiyaning boshlanish vaqti va uning davomiyligi. Oraliqlarni joylashtirish va buyurtma qilish mumkin. oraliqlarning yo'naltirilgan asiklik grafigi iz hosil qiladi. - taxminan. tarjima.)
Bu erda so'rov usul bilan qayta ishlanadi hissiyotlarni tahlil qilish. Ushbu izlar allaqachon dastur tomonidan yaratilgan, ya'ni. ular kodni o'zgartirishni talab qildilar.
Shu paytdan boshlab POST so'rovi boshlanadi sa-mantiq. Trace ID dan yuborilishi kerak sa-veb-ilova.
...
nota: 4-bosqichda dastur Istio tomonidan yaratilgan sarlavhalarni ko'rishi va ularni quyidagi rasmda ko'rsatilganidek, keyingi so'rovlarga o'tkazishi kerak:
(A) Istio sarlavhalarni yuborish uchun javobgardir; (B) Xizmatlar sarlavhalar uchun javobgardir
Istio ishning ko'p qismini bajaradi, chunki ... kiruvchi so'rovlar uchun sarlavhalarni yaratadi, har bir yonboshda yangi oraliqlarni yaratadi va ularni yo'naltiradi. Biroq, xizmatlar ichidagi sarlavhalar bilan ishlamasdan, to'liq so'rovni kuzatish yo'li yo'qoladi.
Quyidagi sarlavhalarni hisobga olish kerak:
Bu qiyin ish emas, lekin uni amalga oshirishni soddalashtirish allaqachon mavjud ko'plab kutubxonalar - masalan, sa-web-app xizmatida, agar siz shunchaki Jaeger va OpenTracing kutubxonalarini qo'shsangiz, RestTemplate mijozi ushbu sarlavhalarni yo'naltiradi. uning qaramliklari.
E'tibor bering, Sentiment Analysis ilovasi Flask, Spring va ASP.NET Core-da ilovalarni namoyish etadi.
Endi biz qutidan (yoki deyarli qutidan) nima olishimiz aniq bo'lsa, keling, nozik sozlangan marshrutlash, tarmoq trafigini boshqarish, xavfsizlik va hokazolarni ko'rib chiqaylik!
Eslatma. tarjima.: Bu haqda Rinor Malokudan olingan Istio materiallarining keyingi qismida o'qing, tarjimalari yaqin kelajakda bizning blogimizda bo'ladi. UPDATE (14 mart): Ikkinchi qism allaqachon nashr etilgan.