Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar

"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-da qorong'u ishga tushirish: Maxfiy xizmatlar

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

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
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:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
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:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar

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

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
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 Red Hat dasturchilar jamoasi ajoyib tayyorladi darslik 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:

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

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
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 bizning Istio qo'llanmamiz.) 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:

Istio-da qorong'u ishga tushirish: Maxfiy xizmatlar
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:

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

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

DDoS himoyasi, VPS VDS serverlari bo'lgan saytlar uchun ishonchli hosting sotib oling 🔥 DDoS himoyasi, VPS VDS serverlari bilan ishonchli veb-sayt xostingini sotib oling | ProHoster