
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 mijozlarda. Bundan tashqari, butun tizim ishdan chiqmasligiga ishonch hosil qilish uchun sizga vaqt autlari kerak bo'ladi va (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 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 - 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 (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.

Illustration : - Suvni qanday yoqtirasiz? - Suv nima?
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. .
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 . Biz bundan keyingi bo'limda Istio-ni o'rnatish uchun shablonlarni yaratish uchun foydalanamiz.
Istio o'rnatilmoqda
Istio resurslarini yuklab oling (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:
$ 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
Bu buyruq Istio ning asosiy komponentlarini faylga chiqaradi istio.yaml. Biz quyidagi parametrlarni belgilab, standart shablonni o'zimizga mos ravishda o'zgartirdik:
-
global.mtls.enabledichida o'rnatilganfalse(ya'ni, mTLS autentifikatsiyasi o'chirilgan - taxminan)tanishish jarayonini soddalashtirish; -
tracing.enabledJaeger yordamida so'rovlarni kuzatishni o'z ichiga oladi; -
kiali.enabledxizmatlar va trafikni ko'rish uchun Kiali'ni klasterga o'rnatadi; -
grafana.enabledyig'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 . 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-Mantiq, bu o'zini o'zi bajaradi ;
- 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 . 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:
$ kubectl label namespace default istio-injection=enabled
namespace/default labeled
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 ():
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
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.
Amalga oshirish quyidagi konfiguratsiya orqali amalga oshiriladi ():
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) ΠΠ°ΠΆΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ:ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²ΡΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅
- ΠΡΠΎΡ VirtualService ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π· http-gateway;
- Π
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 Server ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Istio Control Plane, ΠΈ ΡΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΏΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌ Envoy ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ pod'Π°. Π ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Ingress Gateway ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΠΌ Envoy, ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π² Control Plane. ΠΡΡ ΡΡΠΎ Π½Π° ΡΡ Π΅ΠΌΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Istio-IngressGateway Π΄Π»Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ²ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Sentiment Analysis ΡΡΠ°Π»ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΠΏΠΎ
http://{EXTERNAL-IP}/. ΠΠ΅ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²Π°ΠΉΡΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΡΠ°ΡΡΡ Not Found: ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²ΡΡΡΠΏΠΈΠ»Π° Π² ΡΠΈΠ»Ρ ΠΈ ΠΊΡΡΠΈ Envoy ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ.ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ, ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΠΊ (Π΅Π³ΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ β ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².).
Kialiβ: Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΡ
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΏΠ°ΡΡΡ Π² Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Kiali, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
$ kubectl port-forward $(kubectl get pod -n istio-system -l app=kiali -o jsonpath='{.items[0].metadata.name}') -n istio-system 20001β¦ ΠΈ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ , Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΠ²ΡΠΈΡΡ ΠΏΠΎΠ΄ admin/admin. ΠΠ΄Π΅ΡΡ Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Istio, Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΏΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠΎΠ² Π½Π° Π²ΠΎΠΏΡΠΎΡΡ Β«ΠΡΠΎ ΠΊ ΠΊΠΎΠΌΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ?Β», Β«Π£ ΠΊΠ°ΠΊΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΡΠ±ΠΎΠΈ?Β» ΠΈ Ρ.ΠΏ. Π ΠΎΠ±ΡΠ΅ΠΌ, ΠΈΠ·ΡΡΠΈΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Kiali ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π΄Π°Π»ΡΡΠ΅ β ΠΊ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΡΠΈΠΊ Ρ Grafana.
Grafana: Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΡΠΈΠΊ
Π‘ΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ Π² Istio ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² 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ΠΠ»ΠΈΠΊΠ½ΡΠ² Π½Π° ΠΌΠ΅Π½Ρ Home ΡΠ»Π΅Π²Π° ΡΠ²Π΅ΡΡ Ρ ΠΈ Π²ΡΠ±ΡΠ°Π² Istio Service Dashboard Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΠ³Π»Ρ, Π½Π°ΡΠ½ΠΈΡΠ΅ Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° 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 Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΡΠΈΠΊ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π½Π°ΠΌ ΡΠ·Π½Π°ΡΡ ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π·Π΄ΠΎΡΠΎΠ²ΡΡ, ΡΠ»ΡΡΡΠ΅Π½ΠΈΡΡ /Π΄Π΅Π³ΡΠ°Π΄Π°ΡΠΈΠΈ Π² ΡΠ°Π±ΠΎΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΡΠ²ΠΈΡΠ°Ρ .
Jaegerβ: ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Ρ Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΡΠ΅ΠΌ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΏΡΠΈΡΠΈΠ½Ρ ΡΠ±ΠΎΡ. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΈΠ· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π½ΠΈΠΆΠ΅:
Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°ΠΠ°ΠΏΡΠΎΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ, ΠΏΠ°Π΄Π°Π΅Ρ β Π² ΡΡΠΌ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π°? ΠΠ΅ΡΠ²ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ? ΠΠ»ΠΈ Π²ΡΠΎΡΠΎΠΉ? ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΅ΡΡΡ Π² ΠΎΠ±ΠΎΠΈΡ β Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π»ΠΎΠ³ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ. ΠΠ°ΠΊ ΡΠ°ΡΡΠΎ Π²Ρ Π»ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ΅Π±Ρ Π·Π° ΡΠ°ΠΊΠΈΠΌ Π·Π°Π½ΡΡΠΈΠ΅ΠΌ? ΠΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° Π΄Π΅ΡΠ΅ΠΊΡΠΈΠ²ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²β¦
ΠΡΠΎ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°Ρ ΠΈ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΠ½Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π³Π΄Π΅ ΠΎΠ½Π° ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΎΡ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ:
ΠΠ»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ TraceIdΠ Istio ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Jaeger Tracer, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ Π²Π΅Π½Π΄ΠΎΡΠΎΠ² ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ OpenTracing API. ΠΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Jaeger ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
$ kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΉΠ΄ΠΈΡΠ΅ Π½Π° ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡ sa-web-app. ΠΡΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ β ΠΏΡΠΎΡΠ²ΠΈΡΠ΅/ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Find Traces, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΡΡ β Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π»ΡΠ±ΠΎΠΉ β ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π΄Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ΅ΠΉΡΠ°ΠΌ:
ΠΡΠΎΡ ΡΡΠ΅ΠΉΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ:
- ΠΠ°ΠΏΡΠΎΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² istio-ingressgateway (ΡΡΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΈ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Trace ID), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ»ΡΠ· Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ Π² ΡΠ΅ΡΠ²ΠΈΡ sa-web-app.
- Π ΡΠ΅ΡΠ²ΠΈΡΠ΅ sa-web-app Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ΄Ρ Π²Π°ΡΡΠ²Π°Π΅ΡΡΡ Envoy sidecar'ΠΎΠΌ, ΡΠΎΠ·Π΄Π°ΡΡΡΡ Β«ΡΠ΅Π±ΡΠ½ΠΎΠΊΒ» Π² span'Π΅ (ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π² ΡΡΠ΅ΠΉΡΠ°Ρ ) ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ sa-web-app. ( β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΡ Π² Jaeger, ΠΈΠΌΠ΅ΡΡΠ°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π²ΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. Span'Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΌΠΈ. ΠΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π°ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Ρ ΠΈΠ· span'ΠΎΠ² ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ trace. β ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².)
- ΠΠ΄Π΅ΡΡ Π·Π°ΠΏΡΠΎΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ sentimentAnalysis. ΠΡΠΈ ΡΡΠ΅ΠΉΡΡ ΡΠΆΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ.Π΅. Π΄Π»Ρ Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅.
- Π‘ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΡΡΡ POST-Π·Π°ΠΏΡΠΎΡ Π² sa-logic. Trace ID Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠΎΠ±ΡΠΎΡΠ΅Π½ ΠΈΠ· sa-web-app.
- β¦
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ° 4 ΡΠ°Π³Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Istio, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΆΠ΅:
(A) ΠΠ° ΠΏΡΠΎΠ±ΡΠΎΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Istio; (B) ΠΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡΡIstio Π΄Π΅Π»Π°Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π±ΠΎΡΡ, Ρ.ΠΊ. Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ span'Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ sidecare'Π΅ ΠΈ ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΡ . ΠΠ΄Π½Π°ΠΊΠΎ Π±Π΅Π· ΡΠ°Π±ΠΎΡΡ Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ Π²Π½ΡΡΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π±ΡΠ΄Π΅Ρ ΡΡΠ΅ΡΡΠ½.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ (ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°ΡΡ) ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ:
x-request-id x-b3-traceid x-b3-spanid x-b3-parentspanid x-b3-sampled x-b3-flags x-ot-span-contextΠΡΠΎ Π½Π΅ΡΠ»ΠΎΠΆΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ΅ΡΠ²ΠΈΡΠ΅ sa-web-app ΠΊΠ»ΠΈΠ΅Π½Ρ RestTemplate ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΡΡΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Jaeger ΠΈ OpenTracing Π² .
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Sentiment Analysis Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Flask, Spring ΠΈ ASP.NET Core.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ°Π»ΠΎ ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ (ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠΈ Β«ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈΒ»), ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΠΎΠΏΡΠΎΡΡ ΡΠΎΠ½ΠΊΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π²ΡΠΌ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ Ρ.ΠΏ.!
ΠΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².: ΠΎΠ± ΡΡΠΎΠΌ ΡΠΈΡΠ°ΠΉΡΠ΅ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² ΠΏΠΎ Istio ΠΎΡ Rinor Maloku, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ. UPDATE (14 ΠΌΠ°ΡΡΠ°): ΡΠΆΠ΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π°.
P.S. ΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«ΠΠ°Π·Π°Π΄ ΠΊ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠ΅ Ρ IstioΒ»: , ;
- «»;
- «»;
- «»;
- «».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com
route:
- destination:
host: sa-frontend # 2
port:
number: 80
Muhim fikrlar:
- Ushbu VirtualXizmat orqali kelgan so'rovlarga ishora qiladi http-shlyuz;
- Π
destinationSo'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 konfiguratsiyasiSentiment 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 , 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 :
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 misoliSo'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 ishlatiladiIstio sotuvchidan mustaqil OpenTracing API asosini amalga oshiradigan Jaeger Tracerdan foydalanadi. Jaeger foydalanuvchi interfeysiga quyidagi buyruq bilan kirishingiz mumkin:
Endi o'ting 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. ( - 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 javobgardirIstio 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 - masalan, sa-web-app xizmatida, agar siz shunchaki Jaeger va OpenTracing kutubxonalarini qo'shsangiz, RestTemplate mijozi ushbu sarlavhalarni yo'naltiradi. .
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): allaqachon nashr etilgan.
Tarjimondan PS
Shuningdek, bizning blogimizda o'qing:
- "Istio bilan mikroservislarga qaytish": , ;
- Β«";
- Β«";
- Β«";
- Β«".
Manba: www.habr.com














