Pradedame įrašų seriją, kurioje pristatomos kai kurios iš daugelio „Istio Service Mesh“ galimybių, kai jos derinamos su „Red Hat OpenShift“ ir „Kubernetes“.
Pirma dalis šiandien:
Paaiškinkime Kubernetes šoninių priekabų konteinerių koncepciją ir suformuluosime šios pranešimų serijos leitmotyvą: „jums nereikia nieko keisti savo kode“.
Supažindinkime su esminiu Istio dalyku – maršruto parinkimo taisyklėmis. Visos kitos „Istio“ funkcijos yra sukurtos ant jų, nes būtent taisyklės leidžia nukreipti srautą į mikropaslaugas, naudojant YAML failus, esančius už paslaugos kodo. Taip pat svarstome Kanarų dislokavimo schemą. Naujųjų metų premija – 10 interaktyvių pamokų „Istio“.
Netrukus pasirodysianti antroji dalis jums pasakys:
Kaip Istio įgyvendina baseino išstūmimą kartu su grandinės pertraukikliu ir parodys, kaip Istio leidžia iš balansavimo grandinės pašalinti negyvą arba prastai veikiantį bloką.
Taip pat pažvelgsime į „Circuit Breaker“ temą iš pirmojo įrašo, kad pamatytume, kaip čia galima naudoti „Istio“. Parodysime, kaip nukreipti srautą ir tvarkyti tinklo klaidas naudojant YAML konfigūracijos failus ir terminalo komandas be menkiausių paslaugos kodo pakeitimų.
Trečia dalis:
Istorija apie sekimą ir stebėjimą, kurie jau yra integruoti arba lengvai pridedami prie Istio. Parodysime, kaip naudoti tokius įrankius kaip „Prometheus“, „Jaeger“ ir „Grafana“ kartu su „OpenShift“ mastelio keitimu, kad būtų galima lengvai valdyti mikro paslaugų architektūras.
Nuo klaidų stebėjimo ir tvarkymo pereiname prie sąmoningo jų įvedimo į sistemą. Kitaip tariant, išmokstame atlikti gedimų injekciją nekeičiant šaltinio kodo, o tai labai svarbu testavimo požiūriu – kadangi tam pakeitus patį kodą, kyla papildomų klaidų rizika.
Galiausiai paskutiniame „Istio Service Mesh“ įraše:
Eikime į Tamsiąją pusę. Tiksliau, išmoksime naudoti Dark Launch schemą, kai kodas yra įdiegtas ir testuojamas tiesiogiai ant gamybos duomenų, tačiau niekaip neįtakoja sistemos veikimo. Čia praverčia Istio galimybė padalyti srautą. O galimybė išbandyti gyvus gamybos duomenis niekaip nepaveikiant kovos sistemos veikimo yra įtikinamiausias patikrinimo būdas.
Remdamiesi „Dark Launch“, parodysime, kaip naudoti „Canary Deployment“ modelį, kad sumažintume riziką ir palengvintume naujo kodo įdiegimą į gamybą. Pats „Canary Deployment“ toli gražu nėra naujas, tačiau „Istio“ leidžia įgyvendinti šią schemą naudojant tik paprastus YAML failus.
Galiausiai parodysime, kaip naudoti Istio Egress, kad suteiktumėte prieigą prie paslaugų tiems, kurie nepriklauso jūsų klasteriams, kad dirbdami su internetu galėtų naudotis Istio galimybėmis.
Taigi, mes einame...
Istio stebėjimo ir valdymo įrankiai – viskas, ko reikia norint suorganizuoti mikropaslaugas paslaugų tinkle aptarnavimo tinklelis.
Kas yra „Istio Service Mesh“.
Paslaugų tinklelis įgyvendina tokias funkcijas kaip eismo stebėjimas, prieigos kontrolė, aptikimas, saugumas, atsparumas gedimams ir kiti paslaugų grupei naudingi dalykai. „Istio“ leidžia visa tai padaryti be menkiausių pačių paslaugų kodo pakeitimų. Kokia yra magijos paslaptis? „Istio“ prie kiekvienos paslaugos prideda savo įgaliotąjį serverį šoninės priekabos konteinerio pavidalu (šoninė priekaba yra motociklo priekaba), po kurio visas srautas į šią paslaugą eina per tarpinį serverį, kuris, vadovaudamasis nurodyta politika, nusprendžia, kaip, kada ir ar šis srautas. turėtų išvis pasiekti tarnybą. „Istio“ taip pat leidžia įdiegti pažangias „DevOps“ technologijas, tokias kaip „Canary“ diegimas, grandinės pertraukikliai, gedimų įpurškimas ir daugelis kitų.
Kaip „Istio“ dirba su konteineriais ir „Kubernetes“.
„Istio“ paslaugų tinklelis yra visko, ko reikia norint sukurti ir valdyti mikropaslaugas, įgyvendinimas: stebėjimas, sekimas, grandinės pertraukikliai, maršruto parinkimas, apkrovos balansavimas, gedimų įpurškimas, pakartotiniai bandymai, laikas, atspindėjimas, prieigos kontrolė, greičio ribojimas ir daug daugiau. Ir nors šiandien yra daugybė bibliotekų, skirtų šioms funkcijoms įgyvendinti tiesiogiai kode, naudodami Istio galite gauti visus tuos pačius dalykus nieko nekeisdami savo kode.
Pagal šoninio priekabos modelį Istio veikia Linux konteineryje, kuris yra viename Kubernetes-pod su kontroliuojama paslauga ir įveda bei ištraukia funkcionalumą ir informaciją pagal nurodytą konfigūraciją. Pabrėžiame, kad tai yra jūsų pačių konfigūracija ir ji veikia už jūsų kodo ribų. Todėl kodas tampa daug paprastesnis ir trumpesnis.
Svarbu ir tai, kad mikropaslaugų operacinis komponentas, pasirodo, niekaip nesusijęs su pačiu kodu, vadinasi, jų veikimas gali būti saugiai perduotas IT specialistams. Iš tiesų, kodėl kūrėjas turėtų būti atsakingas už grandinės pertraukiklius ir gedimų įvedimą? Reaguoti, taip, bet apdoroti juos ir sukurti? Jei visa tai pašalinsite iš kodo, programuotojai galės visą dėmesį skirti programos funkcionalumui. Ir pats kodas taps trumpesnis ir paprastesnis.
Serviso tinklelis
„Istio“, įgyvendinanti mikropaslaugų valdymo funkcijas už jų kodo ribų, yra „Service Mesh“ koncepcija. Kitaip tariant, tai yra koordinuota vieno ar kelių dvejetainių failų grupė, sudaranti tinklo funkcijų tinklelį.
Kaip „Istio“ dirba su mikropaslaugomis
Taip kartu atrodo šoninių priekabų konteinerių darbas Kubernetes и Mini pamainos Vaizdas iš paukščio skrydžio: paleiskite Minishift egzempliorių, sukurkite projektą Istio (vadinkime jį „istio-sistema“), įdiekite ir paleiskite visus su Istio susijusius komponentus. Tada kurdami projektus ir rinkinius pridedate konfigūracijos informaciją į diegimus, o pods pradeda naudoti „Istio“. Supaprastinta diagrama atrodo taip:
Dabar galite pakeisti Istio nustatymus, kad, pavyzdžiui, organizuotumėte gedimų injekciją, palaikymą Kanarų dislokavimas ar kitos Istio funkcijos – ir visa tai neliečiant pačių programų kodo. Tarkime, kad norite nukreipti visą žiniatinklio srautą iš didžiausio kliento („Foo Corporation“) naudotojų į naują svetainės versiją. Norėdami tai padaryti, tiesiog sukurkite Istio maršruto parinkimo taisyklę, kuri naudotojo ID ieškos @foocorporation.com ir atitinkamai peradresuos. Visiems kitiems vartotojams niekas nepasikeis. Tuo tarpu ramiai išbandysite naująją svetainės versiją. Ir atminkite, kad tam visai nereikia įtraukti kūrėjų.
Ir ar teks už tai brangiai mokėti?
Visai ne. Istio yra gana greitas ir parašytas Go ir sukuria labai mažai papildomų išlaidų. Be to, galimą interneto produktyvumo praradimą kompensuoja kūrėjų produktyvumo padidėjimas. Bent jau teoriškai: nepamirškite, kad kūrėjų laikas yra vertingas. Kalbant apie programinės įrangos išlaidas, Istio yra atvirojo kodo programinė įranga, todėl galite ją gauti ir naudoti nemokamai.
Įvaldyk pats
„Red Hat“ kūrėjų patirties komanda parengė išsamią praktinę patirtį vadovas pateikė Istio (anglų kalba). Jis veikia „Linux“, „MacOS“ ir „Windows“, o kodas yra „Java“ ir „Node.js“.
10 interaktyvių pamokų apie Istio
1 blokas – pradedantiesiems
Įvadas į Istio
30 minučių
Susipažinkime su „Service Mesh“, sužinokime, kaip įdiegti „Istio“ „OpenShift Kubernetes“ klasteryje. Pradėk
Mikropaslaugų diegimas Istio mieste
30 minučių
Mes naudojame „Istio“, kad įdiegtume tris mikropaslaugas su „Spring Boot“ ir „Vert.x“. Pradėk
2 blokas – vidutinis lygis
Stebėjimas ir sekimas Istio mieste
60 minučių
Išnagrinėsime „Istio“ integruotus stebėjimo įrankius, tinkintą metriką ir „OpenTracing“ naudodami „Prometheus“ ir „Grafana“. Pradėk
Paprastas maršrutas Istio mieste
60 minučių
Sužinokite, kaip valdyti maršrutą „Istio“ naudodami paprastas taisykles. Pradėk
Išplėstinės maršruto parinkimo taisyklės
60 minučių
Pažvelkime į „Istio“ išmanųjį maršruto parinkimą, prieigos kontrolę, apkrovos balansavimą ir greičio ribojimą. Pradėk
3 blokas – pažengęs vartotojas
Gedimo įpurškimas Istio
60 minučių
Studijuojame paskirstytų programų gedimų valdymo scenarijus, sukuriame HTTP klaidas ir tinklo vėlavimus bei mokomės naudoti chaoso inžineriją aplinkai atkurti. Pradėk
Grandinės pertraukiklis Istio mieste
30 minučių
Įdiegiame „Siege“ testavimo nepalankiausiomis sąlygomis svetaines ir mokomės, kaip užtikrinti vidinės sistemos gedimų toleranciją naudojant pakartojimus, grandinės pertraukiklį ir baseino išstūmimą. Pradėk
Egress ir Istio
10 minučių
Mes naudojame išėjimo maršrutus, kad sukurtume vidinių paslaugų sąveikos su išorinėmis API ir paslaugomis taisykles. Pradėk
Istio ir Kiali
15 minučių
Išmokite naudoti „Kiali“, kad gautumėte paslaugų tinklo apžvalgą ir tyrinėtumėte užklausų bei duomenų srautus. Pradėk
Abipusis TLS Istio mieste
15 minučių
Sukuriame „Istio Gateway“ ir „VirtualService“, tada išsamiai tiriame abipusį TLS (mTLS) ir jo nustatymus. Pradėk
3.1 blokas – gilus nardymas: „Istio Service Mesh“, skirtas mikropaslaugoms
Apie ka si knyga:
Kas yra paslaugų tinklelis?
Istio sistema ir jos vaidmuo mikro paslaugų architektūroje.
Istio naudojimas šioms problemoms išspręsti:
Gedimų tolerancija;
Maršrutas;
Chaoso testavimas;
Saugumas;
Telemetrijos rinkimas naudojant pėdsakus, metrikas ir Grafana.
Ši pranešimų serija nėra skirta giliai pasinerti į Istio pasaulį. Mes tiesiog norime jus supažindinti su koncepcija ir galbūt įkvėpti išbandyti Istio patiems. Tai padaryti visiškai nemokamai, o „Red Hat“ suteikia visus įrankius, kurių reikia norint pradėti naudoti „OpenShift“, „Kubernetes“, „Linux“ konteinerius ir „Istio“, įskaitant: „Red Hat“ kūrėjo „OpenShift“ konteinerių platforma, mūsų vadovas Istio ir kiti mūsų ištekliai mikro svetainė „Service Mesh“.. Nedelskite, pradėkite jau šiandien!
Istio maršruto parinkimo taisyklės: paslaugų užklausų nukreipimas ten, kur reikia
„OpenShift“ и Kubernetes puikiai atlieka kreipimosi darbą mikropaslaugos nukreipiama į reikiamas ankštis. Tai viena iš Kubernetes egzistavimo priežasčių – maršruto parinkimas ir apkrovos balansavimas. Bet ką daryti, jei jums reikia subtilesnio ir sudėtingesnio maršruto? Pavyzdžiui, vienu metu naudoti dvi mikropaslaugos versijas. Kuo čia gali padėti Istio maršruto taisyklės?
Maršruto taisyklės yra taisyklės, kurios iš tikrųjų lemia maršruto pasirinkimą. Nepriklausomai nuo sistemos sudėtingumo lygio, bendras šių taisyklių veikimo principas išlieka paprastas: užklausos nukreipiamos pagal tam tikrus parametrus ir HTTP antraštės reikšmes.
Pažiūrėkime į pavyzdžius:
Numatytasis „Kubernetes“: trivialus „50/50“
Mūsų pavyzdyje parodysime, kaip vienu metu naudoti dvi „OpenShift“ mikropaslaugos versijas, pavadinkime jas v1 ir v2. Kiekviena versija veikia savo „Kubernetes“ rinkinyje ir pagal numatytuosius nustatymus vykdo tolygiai subalansuotą apvalų maršrutą. Kiekvienas blokas gauna savo užklausų dalį pagal mikro paslaugų egzempliorių skaičių, kitaip tariant, kopijų. „Istio“ leidžia rankiniu būdu pakeisti šį balansą.
Tarkime, kad „OpenShift“ įdiegėme dvi rekomendacijos paslaugos versijas, rekomendacijos-v1 ir rekomendacijos-v2.
Fig. 1 paveiksle parodyta, kad kai kiekviena paslauga pateikiama viename egzemplioriuje, užklausos keičiasi tolygiai: 1-2-1-2-... Štai kaip Kubernetes maršrutizavimas veikia pagal numatytuosius nustatymus:
Svertinis paskirstymas tarp versijų
Fig. 2 paveiksle parodyta, kas atsitiks, jei padidinsite v2 paslaugų kopijų skaičių nuo vieno iki dviejų (tai daroma naudojant oc skalę —replicas=2 deployment/recommendation-v2 komanda). Kaip matote, užklausos tarp v1 ir v2 dabar yra padalintos santykiu vienas su trimis: 1-2-2-1-2-2-…:
Ignoruoti versiją naudojant Istio
„Istio“ leidžia lengvai pakeisti užklausų paskirstymą taip, kaip mums reikia. Pavyzdžiui, siųskite visą srautą tik į rekomendaciją-v1 naudodami šį Istio yaml failą:
Čia reikia atkreipti dėmesį į tai: ankštys parenkamos pagal etiketes. Mūsų pavyzdyje naudojama etiketė v1. Parametras „svoris: 100“ reiškia, kad 100 % srauto bus nukreipta į visus paslaugų blokus, turinčius v1 etiketę.
Direktyvos paskirstymas tarp versijų (Canary Deployment)
Tada naudodami svorio parametrą galite nukreipti srautą į abu blokus, nekreipdami dėmesio į kiekvienoje iš jų veikiančių mikro paslaugų egzempliorių skaičių. Pavyzdžiui, čia mes nukreipiame 90 % srauto į v1 ir 10 % į v2:
Atskiras maršrutas mobiliojo ryšio vartotojams
Pabaigoje parodysime, kaip priversti mobiliojo ryšio naudotojų srautą nukreipti į paslaugą v2, o visus kitus – į v1. Norėdami tai padaryti, naudojame įprastus posakius, kad analizuotume vartotojo agento reikšmę užklausos antraštėje:
Dabar tavo eilė
Pavyzdys su reguliariosiomis išraiškomis, skirtas analizuoti antraštes, turėtų paskatinti jus rasti Istio maršruto parinkimo taisyklių naudojimo būdus. Be to, galimybės čia yra gana plačios, nes antraštės reikšmes galima suformuoti programos šaltinio kode.
Ir atminkite, kad Ops, o ne Dev
Viskas, ką parodėme aukščiau esančiuose pavyzdžiuose, daroma be menkiausių šaltinio kodo pakeitimų, na, išskyrus tuos atvejus, kai reikia sugeneruoti specialių užklausų antraštes. Istio bus naudingas tiek kūrėjams, kurie, pavyzdžiui, galės juo naudotis testavimo etape, tiek IT sistemų eksploatavimo specialistams, kuriems labai pagelbės gamyboje.
Taigi pakartokime šios įrašų serijos leitmotyvą: jums nereikia nieko keisti savo kode. Nereikia kurti naujų vaizdų ar paleisti naujų konteinerių. Visa tai įgyvendinama už kodo ribų.
Pasitelk savo vaizduotę
Įsivaizduokite antraštės analizės galimybes naudojant reguliariąsias išraiškas. Norite nukreipti savo didžiausią klientą į specialią savo versiją mikropaslaugos? Lengvai! Reikia atskiros „Chrome“ naršyklės versijos? Jokiu problemu! Eismą galite nukreipti pagal beveik bet kurią charakteristiką.
Išbandykite save
Skaityti apie „Istio“, „Kubernetes“ ir „OpenShift“ yra viena, bet kodėl gi visko nepalietus pačiam? Komanda „Red Hat“ kūrėjų programa parengė išsamų vadovą (anglų kalba), kuris padės kuo greičiau įsisavinti šias technologijas. Vadovas taip pat yra 100% atviro kodo, todėl jis paskelbtas viešai. Failas veikia „MacOS“, „Linux“ ir „Windows“, o šaltinio kodas yra „Java“ ir „node.js“ versijose (versijos kitomis kalbomis netrukus pasirodys). Tiesiog atidarykite atitinkamą „git“ saugyklą savo naršyklėje Red Hat kūrėjo demonstracija.
Kitame įraše: mes gražiai išsprendžiame problemas
Šiandien matėte, ką gali padaryti Istio maršruto parinkimo taisyklės. Dabar įsivaizduokite tą patį, bet tik apie klaidų valdymą. Būtent apie tai kalbėsime kitame įraše.