"Xavf - bu mening ikkinchi ismim", dedi Ostin Pauers, xalqaro sirli odam. Ammo super-agentlar va razvedka agentliklari ma'qullaydigan narsa kiberxavfsizlik uchun mutlaqo mos emas, bu erda zerikish xavfdan afzalroqdir.

Istio, OpenShift va Kubernetes bilan birgalikda mikroservislarni o'rnatishni haqiqatan ham zerikarli va oldindan aytib bo'ladigan qiladi - va bu ajoyib narsa. Bu va boshqa ko'p narsalarni Istio seriyasining to'rtinchi va oxirgi postida muhokama qilamiz.
Zerikish to'g'ri bo'lganda
Bizning holatda, zerikish faqat oxirgi bosqichda sodir bo'ladi, bunda siz faqat o'tirib, jarayonni kuzatishingiz mumkin. Lekin buning uchun avval hamma narsani sozlashingiz kerak va u yerda sizni juda ko‘p qiziqarli narsalar kutmoqda.
Dasturiy ta'minotingizning yangi versiyasini o'rnatayotganda, xavfni kamaytirishning barcha variantlarini ko'rib chiqishga arziydi. Parallel ishlash juda kuchli va tasdiqlangan sinov usuli bo'lib, Istio bu maqsadda ishlab chiqarish tizimiga aralashmasdan "maxfiy xizmat" (mikroservisingizning yashirin versiyasi) dan foydalanish imkonini beradi. Buning uchun hatto maxsus atama ham mavjud: "Dark Launch", bu o'z navbatida "trafikni aks ettirish" kabi josuslarga o'xshash xususiyat bilan faollashtirilgan.
E'tibor bering, oldingi bandning birinchi jumlasi "ozod qilish" emas, balki "joylashtirish" atamasidan foydalanadi. Siz haqiqatan ham o'zingizning mikroservisingizni xohlagancha joylashtirishingiz va, albatta, foydalanishingiz mumkin. Ushbu xizmat trafikni qabul qilish va qayta ishlash, natijalarni ishlab chiqarish, jurnalga kirish va kuzatish imkoniyatiga ega bo'lishi kerak. Biroq, 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 chiqarishingiz mumkin.
Zerikishni tashkil qilish qiziq
Quyidagi Istio marshrutlash qoidasini ko'rib chiqing, u barcha HTTP so'rovlarini tavsiya etilgan v1 mikroxizmatiga yo'naltiradi (barcha misollar quyidagilardan olingan) ), ularni bir vaqtning o'zida tavsiya etilgan v2 mikroxizmatiga aks ettirish:

Yorliqga e'tibor bering mirror: Ekranning pastki qismidagi tugma trafikni aks ettirishni o'rnatadi. Ha, bu juda oddiy!
Ushbu qoidaning natijasi shundan iboratki, ishlab chiqarish tizimingiz (v1) kiruvchi so'rovlarni qayta ishlashda davom etadi, lekin so'rovlarning o'zi asinxron tarzda v2 ga aks ettiriladi, ya'ni ular to'liq dublikat sifatida yuboriladi. Shunday qilib, siz v2 ni ishlab chiqarish tizimiga xalaqit bermasdan real sharoitlarda - real ma'lumotlar va trafik bilan sinab ko'rishingiz mumkin. Bu sinovni qiyinchilikka aylantiradimi? Ha, mutlaqo. Lekin buni qilish qiziqarli.
Keling, drama qo'shaylik
Esda tutingki, v2 kodi kiruvchi soʻrovlar maʼlumotlar oʻzgarishiga olib kelishi mumkin boʻlgan holatlarni hisobga olishi kerak. So'rovlarning o'zi osongina va shaffof tarzda aks ettiriladi, ammo ularni sinov muhitida qanday hal qilishni tanlash sizga bog'liq - va bu erda narsalar biroz asabiylashadi.
Keling, bir muhim fikrni takrorlaylik
Dark Launch/Request Mirroring hech qanday kodga tegmasdan amalga oshirilishi mumkin.
O'ylash uchun ovqat
Agar so'rovni aks ettirish joylashuvi ularning ba'zilarini v1 o'rniga v2 ga yuborsa nima bo'ladi? Misol uchun, barcha so'rovlarning bir foizi yoki faqat ma'lum bir foydalanuvchilar guruhining so'rovlari. Keyin, v2 qanday ishlashiga qarab, barcha so'rovlarni asta-sekin yangi versiyaga ko'chiring. Yoki aksincha, v2 da biror narsa noto'g'ri bo'lsa, hamma narsani v1 ga qaytaring. Menimcha, bu Canary Deployment deb ataladi. , va agar u rus tilidan bo'lsa, unda havola bo'lishi mumkin ), va endi biz buni batafsil ko'rib chiqamiz.
Istio-da Canary Deployment: ishga tushirishni soddalashtirish
Ehtiyotkorlik bilan va asta-sekin
Canary Deployment modeli oddiy: dasturiy ta'minotingizning yangi versiyasini ishga tushirganingizda (bizning holimizda, mikroservis), avval siz uni kichik foydalanuvchilar guruhiga berasiz. Agar hamma narsa yaxshi bo'lsa, siz yangi versiya noto'g'ri ishlamaguncha ushbu guruhni asta-sekin oshirasiz yoki - agar bu hech qachon sodir bo'lmasa - oxir-oqibat barcha foydalanuvchilarni unga ko'chirasiz. Yangi versiyani o'ylab va asta-sekin ishlab chiqarish 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 ajoyib variantlarni taklif qilish orqali Canary Deployment-ni soddalashtiradi. Va ha, bularning barchasi sizning manba kodingizga tegmasdan amalga oshirilishi mumkin.
Brauzerni filtrlash
Eng oddiy marshrutlash mezonlaridan biri brauzerga xos qayta yo'naltirishdir. Aytaylik, siz faqat Safari brauzerlaridan v2 ga o'tish so'rovlarini xohlaysiz. Buni qanday qilish kerak:

Keling, ushbu marshrutlash qoidasini qo'llaymiz va keyin buyruqni ishlatamiz curl Biz mikroservisga real so‘rovlarni simulyatsiya qilamiz. Skrinshotda ko'rib turganingizdek, ularning barchasi v1 ga o'tadi:

v2 uchun trafik qayerda? Bizning misolimizdagi barcha so'rovlar buyruq satridan kelganligi sababli, u erda emas. Ammo yuqoridagi skrinshotdagi pastki qatorlarga e'tibor bering: bu bizning Safari brauzeridan so'rovimizga javob bo'lib, u o'z navbatida buni qaytardi:

Cheksiz quvvat
Biz allaqachon marshrutlash so'rovlari uchun oddiy iboralar qanchalik kuchli ekanligi haqida yozgan edik. Quyidagi misolni ko'rib chiqing (u nima qilishini tushunasiz deb o'ylaymiz):

Hozircha siz oddiy iboralar nimaga qodirligi haqida tasavvurga ega bo'lsangiz kerak.
Aqlli harakat qiling
Aqlli marshrutlash, shu jumladan oddiy iboralar yordamida paket sarlavhalarini qayta ishlash, trafikni aynan siz xohlagancha boshqarish imkonini beradi. Bu yangi kodni amalga oshirishni sezilarli darajada osonlashtiradi - bu oddiy, kodning o'ziga hech qanday o'zgartirish kiritishni talab qilmaydi va kerak bo'lganda tezda tiklanishi mumkin.
Qiziqmi?
O'zingizning kompyuteringizda Istio, Kubernetes va OpenShift bilan tajriba o'tkazishni xohlaysizmi? Jamoa ajoyib tayyorladi Men ushbu mavzu bo'yicha barcha tegishli fayllarni nashr qildim va ularni hammaga ochiq qildim. Shunday qilib, davom eting va qo'lingizdan kelganicha zavqlaning.
Istio Egress: yodgorlik do'koni orqali chiqing
Red Hat OpenShift va Kubernetes bilan Istio-dan foydalanish mikroservislar bilan hayotni ancha osonlashtirishi mumkin. Istio xizmat tarmog'i Kubernetes podslarida yashiringan va sizning kodingiz (asosan) izolyatsiyada ishlaydi. Ishlash, o'zgartirish qulayligi, kuzatuv va boshqalar yonbosh konteynerlaridan foydalanish orqali osonlik bilan foydalaniladi. Ammo agar sizning mikroservisingiz OpenShift-Kubernetes tizimidan tashqarida joylashgan boshqa xizmatlar bilan bog'lanishi kerak bo'lsa-chi?
Bu yerda Istio Egress keladi. Oddiy qilib aytganda, u sizga Kubernetes pod tizimingizga kirmaydigan resurslarga (o‘qing: “xizmatlar”) kirish imkonini beradi. Hech qanday qo'shimcha konfiguratsiyasiz Istio Egress trafikni faqat ichki IP-jadvallar asosida pod klasterlar ichida va o'rtasida yo'naltiradi. Chetdan xizmatlarga kirishga hojat qolmasa, bu pilla tayyorlash juda yaxshi 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:

Yoki brauzeringizda xuddi shu manzilni ochishingiz mumkin:

Ko'rib turganimizdek, u erda joylashgan xizmat shunchaki unga o'tkazilgan sarlavhalarni qaytaradi.
Biz import o'rnini bosuvchimiz
Keling, ushbu xizmat uchun tizimimizdan tashqaridagi Java kodini olamiz va uni bizning tizimimizda ishga tushiramiz, bu erda eslatib o'tamiz, Istio o'rnatilgan. (Buni o'zingiz qilishingiz mumkin .) Tegishli tasvirni qurib, 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:

Voy, nima bo'ldi? Bu shunchaki ishlayotgan edi. "Topilmadi" nimani anglatadi? Biz shunchaki buning uchun nimadir qildik. curl.
IP jadvallarini butun Internetga kengaytirish
Buning uchun Istio aybdor (yoki rahmat). Axir, Istio shunchaki kashfiyot va marshrutlash uchun mas'ul bo'lgan yonbosh konteyneridir (va biz ilgari ko'rib chiqqan boshqa bir qancha narsalar). Shuning uchun IP-jadvallar faqat sizning klaster tizimingizda nima borligini biladi. httpbin.org tashqarida joylashgan va shuning uchun unga kirish imkoni yo'q. Bu erda Istio Egress keladi - manba kodingizga zarracha o'zgarishsiz.
Quyidagi Egress qoidasi Istio-ni kerakli xizmatni qidirishga majbur qiladi (agar kerak bo'lsa, butun internet), bu holda httpbin.org. Ushbu fayldan (egress_httpbin.yml) ko'rib turganingizdek, bu erda funksionallik juda oddiy:

Faqatgina ushbu qoidani qo'llash qoladi:
istioctl create -f egress_httpbin.yml -n istioegress
Buyruq yordamida chiqish qoidalarini ko'rishingiz mumkin istioctl get egressrules:

Va nihoyat, biz yana buyruqni bajaramiz kıvrım - va biz hamma narsa ishlayotganini ko'ramiz:

Ochiq o'ylab ko'ring
Ko'rib turganingizdek, Istio sizga tashqi dunyo bilan muloqot 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 kattalashtiradigan va kichraytiruvchi podslarda saqlaysiz. Va shu bilan birga, siz atrof-muhitingizdan tashqari xizmatlarga osongina kirishingiz mumkin. Ha, yana bir bor bularning barchasini kodingizga tegmasdan qilishingiz mumkin.
Bu Istio turkumidagi oxirgi post edi. Bizni kuzatishda davom eting - oldinda hali ko'p!
Manba: www.habr.com
