Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar

"Xavf - bu mening ikkinchi ismim", - deydi Ostin Pauers, xalqaro sirli odam. Ammo super agentlar va razvedka xizmatlari tomonidan yuqori baholanadigan narsa kompyuter xizmatlari uchun umuman mos kelmaydi, bu erda zerikish xavfdan ko'ra yaxshiroqdir.

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar

Va Istio, OpenShift va Kubernetes bilan birgalikda mikroservislarni o'rnatishni haqiqatan ham zerikarli va oldindan aytib bo'ladigan qiladi - va bu ajoyib. Bu va boshqa ko'p narsalar haqida biz Istio seriyasining to'rtinchi va oxirgi postida gaplashamiz.

Zerikish to'g'ri bo'lganda

Bizning holatda, zerikish faqat yakuniy bosqichda sodir bo'ladi, faqat o'tirish va jarayonni kuzatish qoladi. Ammo buning uchun siz avval hamma narsani sozlashingiz kerak va bu erda sizni juda ko'p qiziqarli narsalar kutmoqda.

Dasturiy ta'minotingizning yangi versiyasini o'rnatishda xavflarni minimallashtirish uchun barcha variantlarni ko'rib chiqishga arziydi. Parallel ishlash - bu sinovning juda kuchli va tasdiqlangan usuli va Istio ishlab chiqarish tizimiga aralashmasdan buni amalga oshirish uchun "maxfiy xizmat" (mikroservisingizning yashirin versiyasi) dan foydalanishga imkon beradi. Buning uchun hatto maxsus atama ham mavjud - "Dark Launch", bu o'z navbatida "trafikni aks ettirish" ayg'oqchi nomiga ega funksiya bilan faollashtirilgan.

E'tibor bering, oldingi bandning birinchi jumlasi "ozod qilish" emas, balki "joylashtirish" atamasidan foydalanadi. Siz haqiqatan ham mikroservisingizni xohlagancha tez-tez o'rnatishingiz va, albatta, foydalanishingiz mumkin. Ushbu xizmat trafikni qabul qilish va qayta ishlash, natijalarni ishlab chiqarish, shuningdek, jurnallarga yozish va monitoring qilish imkoniyatiga ega bo'lishi kerak. Ammo shu bilan birga, ushbu xizmatning o'zi ishlab chiqarishga chiqarilishi shart emas. Dasturiy ta'minotni joylashtirish va chiqarish har doim ham bir xil narsa emas. Siz xohlagan vaqtda joylashtirishingiz mumkin, lekin faqat tayyor bo'lganingizda qo'yib yuboring.

Zerikishni tashkil qilish qiziq

Quyidagi Istio marshrutlash qoidasini ko'rib chiqing, u barcha HTTP so'rovlarini mikroservis tavsiyasi v1 ga yo'naltiradi (barcha misollar GitHub repo bo'yicha qo'llanma), ularni bir vaqtning o'zida tavsiya etilgan v2 mikroxizmatiga aks ettirish:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
Yorliqga e'tibor bering mirror: ekranning pastki qismida - bu trafik aks ettirishni o'rnatadi. Ha, bu juda oddiy!

Ushbu qoidaning natijasi shundaki, ishlab chiqarish tizimingiz (v1) kiruvchi so'rovlarni qayta ishlashni davom ettiradi, lekin so'rovlarning o'zi asinxron ravishda v2 ga aks ettiriladi, ya'ni ularning to'liq dublikatlari u erga boradi. Shunday qilib, siz v2 ni real sharoitda - real ma'lumotlar va trafikda - ishlab chiqarish tizimining ishlashiga hech qanday aralashmasdan sinab ko'rishingiz mumkin. Bu testlarni tashkil qilishni zerikarli qiladimi? Ha, albatta. Lekin bu qiziqarli tarzda qilingan.

Keling, drama qo'shamiz

E'tibor bering, v2 kodida kiruvchi so'rovlar ma'lumotlar o'zgarishiga olib kelishi mumkin bo'lgan vaziyatlarni ko'rsatish kerak. So'rovlarning o'zi osongina va shaffof tarzda aks ettiriladi, ammo testda ishlov berish usulini tanlash sizga bog'liq - va bu biroz tashvishli.

Keling, bir muhim fikrni takrorlaylik

Trafik aks ettirish (Dark Launch/Request Mirroring) bilan maxfiy ishga tushirish kodga hech qanday ta'sir qilmasdan amalga oshirilishi mumkin.

O'ylash uchun ovqat

Agar so'rovlar aks ettirilgan joy ularning ba'zilarini v1 ga emas, balki v2 ga yuborsa-chi? Misol uchun, barcha so'rovlarning bir foizi yoki faqat ma'lum bir foydalanuvchilar guruhining so'rovlari. Va keyin, v2 qanday ishlashiga qarab, asta-sekin barcha so'rovlarni yangi versiyaga o'tkazing. Yoki aksincha, v1 da biror narsa noto'g'ri bo'lsa, hamma narsani v2 ga qaytaring. Menimcha, bu Canary Deployment deb ataladi. konchilikka qaytadi, va agar u rus tilidan bo'lsa, unda havola bo'lishi mumkin mushuklar), va endi biz buni batafsil ko'rib chiqamiz.

Istio-da Canary Deployment: ishga tushirishni soddalashtirish

Ehtiyotkorlik bilan va asta-sekin

Canary Deployment deployment modelining mohiyati juda oddiy: dasturiy ta'minotingizning yangi versiyasini ishga tushirganingizda (bizning holimizda, mikroservis), avval siz kichik foydalanuvchilar guruhiga unga kirish huquqini berasiz. Agar hamma narsa yaxshi bo'lsa, siz yangi versiya ishlay boshlagunga qadar bu guruhni asta-sekin oshirasiz yoki agar bo'lmasa - oxir-oqibat barcha foydalanuvchilarni unga ko'chirasiz. O'ylab va asta-sekin yangi versiyani joriy qilish va foydalanuvchilarni unga boshqariladigan tarzda almashtirish orqali siz xavflarni kamaytirishingiz va fikr-mulohazalarni maksimal darajada oshirishingiz mumkin.

Albatta, Istio so'rovlarni aqlli marshrutlash uchun bir nechta yaxshi variantlarni taklif qilish orqali Canary Deployment-ni soddalashtiradi. Va ha, bularning barchasi sizning manba kodingizga hech qanday tarzda tegmasdan amalga oshirilishi mumkin.

Brauzerni filtrlash

Один ΠΈΠ· самых простых ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ – это ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² зависимости ΠΎΡ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Допустим, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° v2 ΡƒΡ…ΠΎΠ΄ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ запросы ΠΈΠ· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² Safari. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это дСлаСтся:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
Keling, ushbu marshrutlash qoidasini qo'llaymiz va keyin buyruqni ishlatamiz curl Biz mikroservisga real so'rovlarni tsiklda simulyatsiya qilamiz. Skrinshotda ko'rib turganingizdek, ularning barchasi v1 ga o'tadi:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
v2 da trafik qayerda? Bizning misolimizda barcha so'rovlar faqat o'z buyruq satridan kelganligi sababli, u oddiygina mavjud emas. Ammo yuqoridagi ekranning pastki satrlariga e'tibor bering: bu biz Safari brauzeridan so'rovni bajarganimizga reaktsiya bo'lib, u o'z navbatida buni amalga oshirdi:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar

Cheksiz quvvat

Biz allaqachon yozgan edikki, muntazam ifodalar marshrutlash so'rovlari uchun juda kuchli imkoniyatlar beradi. Quyidagi misolni ko'rib chiqing (u nima qilishini tushunasiz deb o'ylaymiz):

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
Hozircha siz oddiy iboralar nima qilishi mumkinligi haqida tasavvurga egasiz.

Aqlli harakat qiling

Aqlli marshrutlash, xususan muntazam iboralar yordamida paket sarlavhalarini qayta ishlash trafikni o'zingiz xohlagan tarzda boshqarish imkonini beradi. Va bu yangi kodni amalga oshirishni sezilarli darajada osonlashtiradi - bu oddiy, kodning o'zini o'zgartirishni talab qilmaydi va agar kerak bo'lsa, hamma narsani tezda avvalgidek qaytarish mumkin.

Qiziqmi?

Kompyuteringizda Istio, Kubernetes va OpenShift bilan tajriba qilishni xohlaysizmi? Jamoa Red Hat dasturchilar jamoasi ajoyib tayyorladi darslik Ushbu mavzu bo'yicha va barcha qo'shilgan fayllarni hamma uchun ochiq qildi. Shunday qilib, davom eting va o'zingizdan hech narsani rad qilmang.
 

Istio Egress: yodgorlik do'koni orqali chiqing

Red Hat OpenShift va Kubernetes bilan birgalikda Istio-dan foydalanib, siz mikroservislar bilan hayotingizni ancha osonlashtirasiz. Istio-ning xizmat ko'rsatish tarmog'i Kubernetes podslarida yashiringan va sizning kodingiz (asosan) izolyatsiyada ishlaydi. Ishlash, o'zgartirish qulayligi, kuzatuv va boshqalar - bularning barchasi yonbosh konteynerlaridan foydalanish tufayli foydalanish oson. Ammo agar sizning mikroservisingiz OpenShift-Kubernetes tizimidan tashqarida joylashgan boshqa xizmatlar bilan bog'lanishi kerak bo'lsa-chi?

Bu erda Istio Egress yordamga keladi. Xulosa qilib aytganda, bu sizga Kubernetes pods tizimingizning bir qismi bo'lmagan resurslarga (o'qing: "xizmatlar") kirish imkonini beradi. Agar siz qo'shimcha konfiguratsiyani amalga oshirmasangiz, Istio Egress muhitida trafik faqat podalar klasteri ichida va ichki IP-jadvallarga asoslangan bunday klasterlar o'rtasida yo'naltiriladi. Va bunday pupatsiya, agar siz tashqaridan xizmatlarga kirishga muhtoj bo'lmasangiz, ajoyib ishlaydi.

Egress sizga yuqoridagi IP-jadvallarni chetlab o'tishga imkon beradi, Egress qoidalari yoki bir qator IP manzillar asosida.

Aytaylik, bizda httpbin.org/headers manziliga GET so'rovini yuboradigan Java dasturi bor.

(httpbin.org - bu chiquvchi xizmat so'rovlarini sinab ko'rish uchun qulay manba.)

Agar siz buyruq satriga kirsangiz curl http://httpbin.org/headers, biz quyidagilarni ko'ramiz:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
Yoki brauzerda xuddi shu manzilni ochishingiz mumkin:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
Ko'rib turganingizdek, u erda joylashgan xizmat shunchaki unga o'tkazilgan sarlavhalarni qaytaradi.

Biz importni to'g'ridan-to'g'ri almashtiramiz

Keling, ushbu xizmatning tizimimizdan tashqaridagi Java kodini olamiz va uni o'zimiz ishga tushiramiz, eslaylik, Istio o'rnatilgan. (Muloqot orqali buni o'zingiz qilishingiz mumkin bizning Istio qo'llanmamiz.) Tegishli tasvirni yaratib, uni OpenShift platformasida ishga tushirgandan so'ng, biz ushbu xizmatni buyruq bilan chaqiramiz. curl egresshttpbin-istioegress.$(minishift ip).nip.io, shundan so'ng biz buni ekranda ko'ramiz:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
Voy, nima bo'ldi? Hammasi shunchaki ishladi. Topilmadi nimani anglatadi? Biz buni faqat uning uchun qildik curl.

IP jadvallarini butun Internetga kengaytirish

Buning uchun Istioni ayblash (yoki rahmat qilish) kerak. Axir, Istio - bu aniqlash va marshrutlash uchun mas'ul bo'lgan yonbosh konteynerlari (va biz avvalroq gaplashgan boshqa ko'p narsalar). Shu sababli, IP-jadvallar faqat sizning klaster tizimingizda nima borligini biladi. Va httpbin.org tashqarida joylashgan va shuning uchun unga kirish mumkin emas. Va bu erda Istio Egress yordamga keladi - manba kodingizga zarracha o'zgarishsiz.

Quyidagi Egress qoidasi Istio-ni kerakli xizmatni qidirishga majbur qiladi (agar kerak bo'lsa, butun Internet bo'ylab), bu holda httpbin.org. Ushbu fayldan (egress_httpbin.yml) ko'rib turganingizdek, bu erda funksionallik juda oddiy:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
Faqatgina ushbu qoidani qo'llash qoladi:

istioctl create -f egress_httpbin.yml -n istioegress

Buyruq yordamida chiqish qoidalarini ko'rishingiz mumkin istioctl get egressrules:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
Va nihoyat, biz yana buyruqni bajaramiz kΔ±vrΔ±m - va biz hamma narsa ishlayotganini ko'ramiz:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar

Biz ochiq fikrdamiz

Ko'rib turganingizdek, Istio sizga tashqi dunyo bilan o'zaro aloqani tashkil qilish imkonini beradi. Boshqacha qilib aytadigan bo'lsak, siz hali ham OpenShift xizmatlarini yaratishingiz va ularni Kubernetes orqali boshqarishingiz mumkin, bunda hamma narsani kerak bo'lganda kattalashadigan va kichraytiradigan podslarda saqlaysiz. Va shu bilan birga, siz atrof-muhitingizdan tashqari xizmatlarga xavfsiz kirishingiz mumkin. Ha, yana bir bor takrorlaymizki, bularning barchasi sizning kodingizga hech qanday tegmasdan amalga oshirilishi mumkin.

Bu Istio-dagi seriyadagi so'nggi post edi. Bizni kuzatib boring - oldinda juda ko'p qiziqarli narsalar bor!

Manba: www.habr.com

a Izoh qo'shish