Tamsus paleidimas Istio: slaptosios tarnybos

„Pavojus yra mano antrasis vardas“, – sakydavo Ostinas Powersas, tarptautinis paslapčių žmogus. Tačiau tai, ką labai vertina superagentai ir žvalgybos tarnybos, visiškai netinka kompiuterinėms paslaugoms, kur nuobodulys yra daug geriau nei pavojus.

Tamsus paleidimas Istio: slaptosios tarnybos

O „Istio“ kartu su „OpenShift“ ir „Kubernetes“ mikropaslaugų diegimą padaro tikrai nuobodu ir nuspėjamu – ir tai puiku. Apie tai ir dar daugiau kalbėsime ketvirtajame ir paskutiniame Istio serijos įraše.

Kai nuobodulys yra teisingas

Mūsų atveju nuobodulys atsiranda tik paskutinėje fazėje, kai belieka sėdėti ir stebėti procesą. Bet tam pirmiausia reikia viską sukonfigūruoti, ir čia jūsų laukia daug įdomių dalykų.

Diegiant naują programinės įrangos versiją, verta apsvarstyti visas rizikos mažinimo galimybes. Veikimas lygiagrečiai yra labai galingas ir patikrintas būdas išbandyti, o „Istio“ leidžia naudoti „slaptąją paslaugą“ (paslėptą jūsų mikropaslaugos versiją), kad tai padarytumėte netrukdant gamybos sistemai. Tam netgi yra specialus terminas - „Dark Launch“, kurį savo ruožtu suaktyvina funkcija su tokiu pat šnipinėjimo pavadinimu „eismo atspindėjimas“.

Atkreipkite dėmesį, kad pirmame ankstesnės pastraipos sakinyje vartojamas terminas „diegti“, o ne „išleisti“. Jūs tikrai turėtumėte turėti galimybę diegti ir, žinoma, naudoti savo mikropaslaugą tiek dažnai, kiek norite. Ši paslauga turi turėti galimybę priimti ir apdoroti srautą, pateikti rezultatus, taip pat rašyti į žurnalus ir stebėti. Tačiau tuo pačiu metu pati ši paslauga nebūtinai turi būti išleista į gamybą. Programinės įrangos diegimas ir išleidimas ne visada yra tas pats dalykas. Galite įdiegti bet kada, bet išleisti tik tada, kai būsite pasiruošę.

Organizuoti nuobodulį įdomu

Pažvelkite į šią Istio maršruto parinkimo taisyklę, kuri nukreipia visas HTTP užklausas į mikroserviso rekomendaciją v1 (visi pavyzdžiai paimti iš Istio Tutorial GitHub repo), tuo pat metu atspindi juos rekomendacijos v2 mikropaslaugoje:

Tamsus paleidimas Istio: slaptosios tarnybos
Atkreipkite dėmesį į etiketę mirror: ekrano apačioje – būtent tai nustato eismo atspindėjimą. Taip, tai taip paprasta!

Šios taisyklės rezultatas bus toks, kad jūsų gamybinė sistema (v1) ir toliau apdoros gaunamas užklausas, tačiau pačios užklausos bus asinchroniškai atspindimos į v2, ty ten pateks visos jų dublikatai. Tokiu būdu galite išbandyti v2 realiomis sąlygomis – realiais duomenimis ir srautu – jokiu būdu netrukdydami gamybinės sistemos veikimui. Ar dėl to bandymų organizavimas tampa nuobodus? Taip, būtinai. Bet tai daroma įdomiai.

Pridėkime dramą

Atkreipkite dėmesį, kad v2 kode būtina numatyti situacijas, kai dėl gaunamų užklausų gali pasikeisti duomenys. Patys užklausos atspindimos lengvai ir skaidriai, tačiau apdorojimo metodo pasirinkimas teste priklauso nuo jūsų – ir tai kelia nerimą.

Pakartokime svarbų dalyką

Slaptas paleidimas su srauto atspindžiu (Dark Launch / Request Mirroring) gali būti atliktas nepažeidžiant kodo.

Maisto apmąstymams

Ką daryti, jei užklausų atspindėjimo vieta kai kurias iš jų siunčia ne į v1, o į v2? Pavyzdžiui, vienas procentas visų užklausų arba tik tam tikros vartotojų grupės užklausos. Ir tada, jau žiūrint, kaip veikia v2, palaipsniui perkelkite visas užklausas į naują versiją. Arba atvirkščiai, grąžinkite viską į v1, jei kažkas negerai su v2. Manau, kad tai vadinama „Canary Deployment“. grįžta į kasybą, o jei būtų rusiškos kilmės, greičiausiai jame būtų nuoroda į katės), o dabar panagrinėsime tai išsamiau.

Kanarų diegimas Istio mieste: supaprastintas paleidimas

Atsargiai ir palaipsniui

„Canary Deployment“ diegimo modelio esmė itin paprasta: paleidę naują programinės įrangos versiją (mūsų atveju – mikropaslaugą), pirmiausia suteikiate prieigą prie jos nedidelei vartotojų grupei. Jei viskas klostosi gerai, lėtai padidinkite šią grupę, kol pradės veikti nauja versija, arba, jei ne, galiausiai į ją perkelkite visus vartotojus. Apgalvotai ir palaipsniui pristatydami naują versiją ir valdomu būdu į ją perjungdami vartotojus, galite sumažinti riziką ir maksimaliai padidinti grįžtamąjį ryšį.

Žinoma, „Istio“ supaprastina „Canary Deployment“ siūlydama keletą gerų intelektualaus užklausų nukreipimo variantų. Ir taip, visa tai galima padaryti jokiu būdu neliečiant šaltinio kodo.

Naršyklės filtravimas

Vienas iš paprasčiausių maršruto parinkimo kriterijų yra peradresavimas naršyklėje. Tarkime, kad norite, kad tik „Safari“ naršyklių užklausos būtų nukreiptos į 2 versiją. Štai kaip tai daroma:

Tamsus paleidimas Istio: slaptosios tarnybos
Taikykime šią maršruto parinkimo taisyklę ir naudokite komandą curl Mes modeliuosime realias užklausas mikro tarnybai cikle. Kaip matote ekrano kopijoje, jie visi pereina į v1:

Tamsus paleidimas Istio: slaptosios tarnybos
Kur vyksta eismas v2? Kadangi mūsų pavyzdyje visos užklausos buvo gautos tik iš mūsų pačių komandinės eilutės, jos tiesiog nėra. Tačiau atkreipkite dėmesį į apatines aukščiau esančio ekrano eilutes: tai yra reakcija į tai, kad įvykdėme „Safari“ naršyklės užklausą, kuri savo ruožtu sukūrė tai:

Tamsus paleidimas Istio: slaptosios tarnybos

Neribota galia

Jau rašėme, kad įprastos išraiškos suteikia labai galingas galimybes nukreipti užklausas. Pažvelkite į šį pavyzdį (manome, kad suprasite, ką jis daro):

Tamsus paleidimas Istio: slaptosios tarnybos
Iki šiol tikriausiai jau žinote, ką gali padaryti reguliarios išraiškos.

Elkis protingai

Išmanusis maršrutas, ypač paketų antraščių apdorojimas naudojant reguliariąsias išraiškas, leidžia nukreipti srautą taip, kaip norite. Ir tai labai supaprastina naujo kodo įgyvendinimą - tai paprasta, nereikia keisti paties kodo, o prireikus viską galima greitai grąžinti taip, kaip buvo.

Suinteresuotas?

Ar norite savo kompiuteryje eksperimentuoti su Istio, Kubernetes ir OpenShift? Komanda Red Hat kūrėjų komanda paruošė puikų vadovėlis apie šią temą ir padarė visus pridedamus failus viešai prieinamus. Taigi pirmyn ir nieko sau neneigk.

Istio Egress: išeikite per suvenyrų parduotuvę

Naudodami „Istio“ kartu su „Red Hat OpenShift“ ir „Kubernetes“, galite žymiai palengvinti savo gyvenimą naudodamiesi mikro paslaugomis. „Istio“ paslaugų tinklelis yra paslėptas „Kubernetes“ rinkiniuose, o jūsų kodas (dažniausiai) veikia atskirai. Našumas, paprastas keitimas, sekimas ir tt – visa tai lengva naudoti dėl šoninių priekabų konteinerių. Bet ką daryti, jei jūsų mikro paslaugai reikia susisiekti su kitomis paslaugomis, esančiomis už jūsų „OpenShift-Kubernetes“ sistemos ribų?

Čia į pagalbą ateina Istio Egress. Trumpai tariant, tai tiesiog leidžia pasiekti išteklius (skaitykite: „paslaugas“), kurie nėra jūsų „Kubernetes“ podelių sistemos dalis. Jei neatliksite papildomos konfigūracijos, tada Istio Egress aplinkoje srautas nukreipiamas tik podų klasteryje ir tarp tokių grupių pagal vidines IP lenteles. Ir toks lėliukas puikiai veikia tol, kol jums nereikia prieigos prie paslaugų iš išorės.

Egress leidžia apeiti aukščiau nurodytas IP lenteles, remiantis Egress taisyklėmis arba IP adresų diapazonu.

Tarkime, kad turime Java programą, kuri pateikia GET užklausą adresu httpbin.org/headers.

(httpbin.org yra tik patogus šaltinis siunčiamoms paslaugų užklausoms tikrinti.)

Jei įvesite komandų eilutėje curl http://httpbin.org/headers, pamatysime šiuos dalykus:

Tamsus paleidimas Istio: slaptosios tarnybos
Arba galite atidaryti tą patį adresą naršyklėje:

Tamsus paleidimas Istio: slaptosios tarnybos
Kaip matote, ten esanti paslauga tiesiog grąžina jai perduotas antraštes.

Importo pakaitalai

Dabar paimkime šios paslaugos „Java“ kodą, išorinį mūsų sistemoje, ir paleiskime jį patys, kur, prisiminkime, yra įdiegta „Istio“. (Tai galite padaryti patys susisiekę mūsų Istio pamoka.) Sukūrę atitinkamą vaizdą ir paleidę jį OpenShift platformoje, šią paslaugą iškviesime komanda curl egresshttpbin-istioegress.$(minishift ip).nip.io, po kurio ekrane pamatysime tai:

Tamsus paleidimas Istio: slaptosios tarnybos
Oi, kas atsitiko? Viskas tiesiog veikė. Ką reiškia nerasta? Mes tiesiog tai padarėme dėl jo curl.

IP lentelių išplėtimas visame internete

Istio turėtų būti kaltintas (arba padėkoti) už tai. Galų gale, „Istio“ yra tik šoninių priekabų konteineriai, atsakingi už aptikimą ir maršruto nustatymą (ir daugybę kitų dalykų, apie kuriuos kalbėjome anksčiau). Dėl šios priežasties IP lentelės žino tik tai, kas yra jūsų klasterio sistemoje. Ir httpbin.org yra lauke ir todėl nepasiekiamas. Ir čia į pagalbą ateina Istio Egress – be menkiausio šaltinio kodo pakeitimo.

Žemiau esanti „Egress“ taisyklė verčia „Istio“ ieškoti (jei reikia, tada visame internete) reikalingos paslaugos, šiuo atveju httpbin.org. Kaip matote iš šio failo (egress_httpbin.yml), funkcionalumas čia yra gana paprastas:

Tamsus paleidimas Istio: slaptosios tarnybos
Lieka tik taikyti šią taisyklę:

istioctl create -f egress_httpbin.yml -n istioegress

Išėjimo taisykles galite peržiūrėti naudodami komandą istioctl get egressrules:

Tamsus paleidimas Istio: slaptosios tarnybos
Ir galiausiai vėl vykdome komandą raitytis – ir matome, kad viskas veikia:

Tamsus paleidimas Istio: slaptosios tarnybos

Mes galvojame atvirai

Kaip matote, „Istio“ leidžia organizuoti sąveiką su išoriniu pasauliu. Kitaip tariant, vis tiek galite kurti „OpenShift“ paslaugas ir jas tvarkyti naudodami „Kubernetes“, laikant viską grupėse, kurios, jei reikia, didinamos ir mažinamos. Ir tuo pat metu galite saugiai pasiekti paslaugas, nepriklausančias jūsų aplinkai. Ir taip, dar kartą kartojame, kad visa tai galima padaryti niekaip neliečiant jūsų kodo.

Tai buvo paskutinis Istio serijos įrašas. Sekite naujienas – laukia daug įdomių dalykų!

Šaltinis: www.habr.com

Добавить комментарий