Istio bilan mikroservislarga qaytish. 1-qism

Istio bilan mikroservislarga qaytish. 1-qism

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.

Istio bilan mikroservislarga qaytish. 1-qism

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.

Istio bilan mikroservislarga qaytish. 1-qism
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.

Istio bilan mikroservislarga qaytish. 1-qism
Qayta urinishlar va elektron uzilishlar Envoyda qanday amalga oshiriladi

Xulosa:

  1. elchisi (biz tarqatiladigan yonbosh konteynerida joylashgan proksi-server haqida gapiramiz alohida mahsulot - taxminan. tarjima.) B xizmatining birinchi instantsiyasiga so'rov yuboradi va bajarilmaydi.
  2. Elchi Sidecar yana urinib ko'radi (qayta urinish). (1)
  3. So'rov bajarilmadi va uni chaqirgan proksi-serverga qaytariladi.
  4. 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:

Istio bilan mikroservislarga qaytish. 1-qism
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.

Istio bilan mikroservislarga qaytish. 1-qism
Illustration Viktoriya Dimitrakopulos: - 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. 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:

$ 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.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:

  1. xizmat SA-Frontend, bu Reactjs ilovasining old qismiga xizmat qiladi;
  2. xizmat SA-WebApp, bu his-tuyg'ularni tahlil qilish so'rovlariga xizmat qiladi;
  3. xizmat SA-Mantiq, bu o'zini o'zi bajaradi hissiyotlarni tahlil qilish;
  4. xizmat SA - fikr-mulohaza, bu foydalanuvchilarning tahlilning to'g'riligi haqida fikr-mulohazalarini oladi.

Istio bilan mikroservislarga qaytish. 1-qism

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:

$ 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:

Istio bilan mikroservislarga qaytish. 1-qism
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):

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:

Istio bilan mikroservislarga qaytish. 1-qism
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 (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)

Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  1. Π­Ρ‚ΠΎΡ‚ VirtualService относится ΠΊ запросам, приходящим Ρ‡Π΅Ρ€Π΅Π· http-gateway;
  2. Π’ 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. Π§Π°ΡΡ‚ΡŒ 1
ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ 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

… ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ http://localhost:20001/, залогинившись ΠΏΠΎΠ΄ admin/admin. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ мноТСство ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… возмоТностСй, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Istio, Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвисов ΠΏΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, собранной ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π΅ сСтСвых запросов, получСния ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π½Π° вопросы Β«ΠšΡ‚ΠΎ ΠΊ ΠΊΠΎΠΌΡƒ обращаСтся?Β», Β«Π£ ΠΊΠ°ΠΊΠΎΠΉ вСрсии сСрвиса Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ сбои?Β» ΠΈ Ρ‚.ΠΏ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ возмоТности Kiali ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС β€” ΠΊ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ с Grafana.

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1

Grafana: визуализация ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ

Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ Π² Istio ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Prometheus ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с Grafana. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² административный интСрфСйс Grafana, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½ΠΈΠΆΠ΅, послС Ρ‡Π΅Π³ΠΎ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ 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

ΠšΠ»ΠΈΠΊΠ½ΡƒΠ² Π½Π° мСню Home слСва свСрху ΠΈ Π²Ρ‹Π±Ρ€Π°Π² Istio Service Dashboard Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ, Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с сСрвиса sa-web-app, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° собранныС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1

Π—Π΄Π΅ΡΡŒ нас ΠΆΠ΄Ρ‘Ρ‚ пустоС ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ скучноС прСдставлСниС β€” руководство Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΆΠ΅ создадим Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$ 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β€Š: трассировка

Врассировка Π½Π°ΠΌ потрСбуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ большС Ρƒ нас сСрвисов, Ρ‚Π΅ΠΌ слоТнСС Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ сбоя. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° простой случай ΠΈΠ· ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½ΠΈΠΆΠ΅:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1
Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ случайного Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ запроса

Запрос ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚, ΠΏΠ°Π΄Π°Π΅Ρ‚ β€” Π² Ρ‡Ρ‘ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°? ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ сСрвис? Или Π²Ρ‚ΠΎΡ€ΠΎΠΉ? Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΅ΡΡ‚ΡŒ Π² ΠΎΠ±ΠΎΠΈΡ… β€” Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π»ΠΎΠ³ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ. Как часто Π²Ρ‹ Π»ΠΎΠ²ΠΈΠ»ΠΈ сСбя Π·Π° Ρ‚Π°ΠΊΠΈΠΌ занятиСм? Наша Ρ€Π°Π±ΠΎΡ‚Π° большС ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π° Π½Π΅ разработчиков…

Π­Ρ‚ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространённая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² микросСрвисах ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠ½Π° распрСдСлёнными систСмами трассировки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сСрвисы ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, послС Ρ‡Π΅Π³ΠΎ эта информация пСрСнаправляСтся Π² систСму трассировки, Π³Π΄Π΅ ΠΎΠ½Π° сопоставляСтся с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ запроса. Π’ΠΎΡ‚ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1
Для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ запроса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° http://localhost:16686/ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ сСрвис sa-web-app. Если сСрвис Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΌ мСню β€” проявитС/сгСнСрируйтС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π½Π° страницС ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ интСрфСйс. ПослС этого Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Find Traces, которая ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ самыС послСдниС трСйсы β€” Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ любой β€” покаТСтся дСтализированная информация ΠΏΠΎ всСм трСйсам:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1

Π­Ρ‚ΠΎΡ‚ трСйс ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚:

  1. Запрос ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² istio-ingressgateway (это ΠΏΠ΅Ρ€Π²ΠΎΠ΅ взаимодСйствиС с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· сСрвисов, ΠΈ для запроса гСнСрируСтся Trace ID), послС Ρ‡Π΅Π³ΠΎ шлюз направляСт запрос Π² сСрвис sa-web-app.
  2. Π’ сСрвисС sa-web-app запрос подхватываСтся Envoy sidecar'ΠΎΠΌ, создаётся Β«Ρ€Π΅Π±Ρ‘Π½ΠΎΠΊΒ» Π² span'Π΅ (поэтому ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π² трСйсах) ΠΈ пСрСнаправляСтся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ sa-web-app. (Span β€” логичСская Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Jaeger, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, врСмя Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π΅Ρ‘ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Span'Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ упорядочСнными. ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ацикличСский Π³Ρ€Π°Ρ„ ΠΈΠ· span'ΠΎΠ² ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ trace. β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².)
  3. Π—Π΄Π΅ΡΡŒ запрос обрабатываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ sentimentAnalysis. Π­Ρ‚ΠΈ трСйсы ΡƒΠΆΠ΅ сгСнСрированы ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‚.Π΅. для Π½ΠΈΡ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ измСнСния Π² ΠΊΠΎΠ΄Π΅.
  4. Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° инициируСтся POST-запрос Π² sa-logic. Trace ID Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡˆΠ΅Π½ ΠΈΠ· sa-web-app.
  5. …

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: На 4 шагС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, сгСнСрированныС Istio, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ запросы, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΆΠ΅:

Назад ΠΊ микросСрвисам вмСстС с Istio. Π§Π°ΡΡ‚ΡŒ 1
(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. ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

route:
- destination:
host: sa-frontend # 2
port:
number: 80

Muhim fikrlar:

  1. Ushbu VirtualXizmat orqali kelgan so'rovlarga ishora qiladi http-shlyuz;
  2. Π’ 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:

Istio bilan mikroservislarga qaytish. 1-qism
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.

Istio bilan mikroservislarga qaytish. 1-qism

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:

Istio bilan mikroservislarga qaytish. 1-qism

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:

Istio bilan mikroservislarga qaytish. 1-qism
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:

Istio bilan mikroservislarga qaytish. 1-qism
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:

Istio bilan mikroservislarga qaytish. 1-qism

Bu iz ko'rsatadi:

  1. 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.
  2. 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.)
  3. 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.
  4. Shu paytdan boshlab POST so'rovi boshlanadi sa-mantiq. Trace ID dan yuborilishi kerak sa-veb-ilova.
  5. ...

nota: 4-bosqichda dastur Istio tomonidan yaratilgan sarlavhalarni ko'rishi va ularni quyidagi rasmda ko'rsatilganidek, keyingi so'rovlarga o'tkazishi kerak:

Istio bilan mikroservislarga qaytish. 1-qism
(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.

Tarjimondan PS

Shuningdek, bizning blogimizda o'qing:

Manba: www.habr.com