"Nebezpečenstvo je moje druhé meno," hovorieval Austin Powers, medzinárodný záhadný muž. To, čo si ale super agenti a spravodajské služby veľmi vážia, sa vôbec nehodí do počítačových služieb, kde je oveľa lepšia nuda ako nebezpečenstvo.
A vďaka Istio spolu s OpenShift a Kubernetes je nasadenie mikroslužieb skutočne nudné a predvídateľné – a to je skvelé. O tomto a oveľa viac si povieme vo štvrtom a poslednom príspevku v sérii Istio.
Keď je nuda správna
U nás nastáva nuda až v záverečnej fáze, kedy ostáva už len sedieť a sledovať proces. Na to však musíte všetko najskôr nakonfigurovať a tu na vás čaká veľa zaujímavých vecí.
Pri nasadzovaní novej verzie vášho softvéru sa oplatí zvážiť všetky možnosti minimalizácie rizík. Súbežné spustenie je veľmi výkonný a osvedčený spôsob testovania a Istio vám umožňuje použiť „tajnú službu“ (skrytú verziu vašej mikroslužby), aby ste to urobili bez zásahu do produkčného systému. Existuje na to dokonca aj špeciálny výraz - „Dark Launch“, ktorý sa zase aktivuje funkciou s rovnako špionážnym názvom „zrkadlenie premávky“.
Upozorňujeme, že v prvej vete predchádzajúceho odseku sa používa výraz „nasadiť“ a nie „uvoľniť“. Mali by ste byť skutočne schopní nasadiť – a samozrejme používať – svoju mikroslužbu tak často, ako chcete. Táto služba musí byť schopná prijímať a spracovávať prevádzku, produkovať výsledky a tiež zapisovať do protokolov a monitorovať. Ale zároveň túto službu samotnú netreba nutne uvoľniť do produkcie. Nasadenie a uvoľnenie softvéru nie je vždy to isté. Môžete ho nasadiť kedykoľvek chcete, ale uvoľnite ho, až keď budete pripravený.
Organizovanie nudy je zaujímavé
Pozrite sa na nasledujúce pravidlo smerovania Istio, ktoré smeruje všetky požiadavky HTTP na odporúčanie mikroslužby v1 (všetky príklady prevzaté z
Venujte pozornosť štítku mirror:
v spodnej časti obrazovky – práve tá nastavuje zrkadlenie premávky. Áno, je to také jednoduché!
Výsledkom tohto pravidla bude, že váš produkčný systém (v1) bude naďalej spracovávať prichádzajúce požiadavky, ale samotné požiadavky budú asynchrónne zrkadlené do v2, to znamená, že tam budú chodiť ich úplné duplikáty. Takto môžete testovať v2 v reálnych podmienkach – na reálnych dátach a prevádzke – bez toho, aby ste akýmkoľvek spôsobom zasahovali do chodu produkčného systému. Je organizovanie testovania nudné? Rozhodne áno. Ale je to urobené zaujímavým spôsobom.
Pridajme drámu
Upozorňujeme, že v kóde v2 je potrebné zabezpečiť situácie, kedy prichádzajúce požiadavky môžu viesť k zmenám údajov. Samotné požiadavky sa zrkadlia jednoducho a transparentne, no výber spôsobu spracovania v teste je na vás – a to je trochu znepokojujúce.
Zopakujme si dôležitý bod
Tajné spustenie so zrkadlením premávky (Dark Launch/Request Mirroring) je možné vykonať bez akéhokoľvek ovplyvnenia kódu.
Potrava na zamyslenie
Čo ak miesto, kde sa zrkadlia požiadavky, pošle niektoré z nich nie do v1, ale do v2? Napríklad jedno percento zo všetkých požiadaviek alebo len požiadavky od určitej skupiny používateľov. A potom, keď sa už pozriete na to, ako v2 funguje, postupne preneste všetky požiadavky do novej verzie. Alebo naopak, vráťte všetko do v1, ak sa niečo pokazí s v2. Myslím, že sa to volá Canary Deployment.
Canary Deployment in Istio: zjednodušenie uvedenia do prevádzky
Opatrne a postupne
Podstata modelu nasadenia Canary Deployment je mimoriadne jednoduchá: keď spustíte novú verziu svojho softvéru (v našom prípade mikroslužbu), najprv k nej poskytnete prístup malej skupine používateľov. Ak všetko pôjde dobre, túto skupinu pomaly zväčšujete, kým nezačne fungovať nová verzia, alebo – ak nie – nakoniec do nej migrujete všetkých používateľov. Premysleným a postupným zavádzaním novej verzie a kontrolovaným prepínaním používateľov na ňu môžete znížiť riziká a maximalizovať spätnú väzbu.
Istio samozrejme zjednodušuje Canary Deployment tým, že ponúka niekoľko dobrých možností pre inteligentné smerovanie požiadaviek. A áno, to všetko sa dá urobiť bez toho, aby ste sa akýmkoľvek spôsobom dotkli zdrojového kódu.
Filtrovanie prehliadača
Jedným z najjednoduchších kritérií smerovania je presmerovanie založené na prehliadači. Povedzme, že chcete, aby na v2 prešli iba požiadavky z prehliadačov Safari. Tu je postup:
Aplikujme toto pravidlo smerovania a potom použite príkaz curl
Reálne požiadavky na mikroslužbu budeme simulovať v slučke. Ako môžete vidieť na snímke obrazovky, všetky idú do v1:
Kde je premávka na v2? Keďže v našom príklade všetky požiadavky pochádzajú iba z nášho vlastného príkazového riadku, jednoducho neexistuje. Ale dávajte pozor na spodné riadky na obrazovke vyššie: toto je reakcia na skutočnosť, že sme vykonali požiadavku z prehliadača Safari, ktorý zase vytvoril toto:
Neobmedzený výkon
Už sme napísali, že regulárne výrazy poskytujú veľmi výkonné možnosti pre smerovanie požiadaviek. Pozrite si nasledujúci príklad (myslíme, že pochopíte, čo robí):
Teraz už pravdepodobne máte predstavu o tom, čo dokážu regulárne výrazy.
Správajte sa inteligentne
Inteligentné smerovanie, najmä spracovanie hlavičiek paketov pomocou regulárnych výrazov, vám umožňuje riadiť prevádzku tak, ako chcete. A to výrazne zjednodušuje implementáciu nového kódu - je to jednoduché, nevyžaduje zmenu samotného kódu a v prípade potreby je možné všetko rýchlo vrátiť tak, ako to bolo.
Máte záujem?
Máte chuť experimentovať s Istio, Kubernetes a OpenShift na vašom počítači? Tím
Istio Egress: východ cez obchod so suvenírmi
Používaním Istio spolu s Red Hat OpenShift a Kubernetes si môžete výrazne uľahčiť život s mikroslužbami. Sieť služieb Istio je skrytá vo vnútri modulov Kubernetes a váš kód beží (väčšinou) izolovane. Výkon, jednoduchosť výmeny, sledovanie atď. – to všetko sa ľahko používa vďaka použitiu kontajnerov postranných vozíkov. Čo ak však vaša mikroslužba potrebuje komunikovať s inými službami, ktoré sa nachádzajú mimo vášho systému OpenShift-Kubernetes?
Tu prichádza na pomoc Istio Egress. Stručne povedané, jednoducho vám umožňuje prístup k zdrojom (čítaj: „služby“), ktoré nie sú súčasťou vášho systému modulov Kubernetes. Ak nevykonáte dodatočnú konfiguráciu, tak v prostredí Istio Egress je prevádzka smerovaná iba v rámci klastra podov a medzi takýmito klastrami na základe interných IP tabuliek. A takéto zakuklenie funguje skvele, pokiaľ nepotrebujete prístup k službám zvonku.
Egress vám umožňuje obísť vyššie uvedené tabuľky IP, či už na základe pravidiel Egress alebo na základe rozsahu adries IP.
Povedzme, že máme program Java, ktorý odošle požiadavku GET na stránku httpbin.org/headers.
(httpbin.org je len pohodlným zdrojom na testovanie odchádzajúcich požiadaviek na služby.)
Ak zadáte na príkazovom riadku curl http://httpbin.org/headers
, uvidíme nasledovné:
Alebo môžete rovnakú adresu otvoriť v prehliadači:
Ako vidíte, služba, ktorá sa tam nachádza, jednoducho vráti hlavičky, ktoré jej boli odovzdané.
Dovozy nahrádzame čelne
Teraz vezmeme kód Java tejto služby, ktorý je externý pre náš systém, a spustíme ho sami, kde je nainštalovaný Istio. (Môžete to urobiť sami kontaktovaním curl egresshttpbin-istioegress.$(minishift ip).nip.io
, potom na obrazovke uvidíme toto:
Čo sa stalo? Všetko jednoducho fungovalo. Čo znamená Nenájdené? Urobili sme to pre neho curl
.
Rozšírenie IP tabuliek na celý internet
Istio by mal byť za to obviňovaný (alebo ďakovaný). Koniec koncov, Istio sú len kontajnery postranných vozíkov, ktoré sú zodpovedné za detekciu a smerovanie (a mnoho ďalších vecí, o ktorých sme hovorili skôr). Z tohto dôvodu tabuľky IP vedia iba to, čo je vo vašom klastrovom systéme. A httpbin.org sa nachádza mimo, a preto je neprístupný. A tu prichádza na pomoc Istio Egress – bez najmenšej zmeny vášho zdrojového kódu.
Nižšie uvedené pravidlo Egress núti Istio hľadať (ak je to potrebné, potom na celom internete) požadovanú službu, v tomto prípade httpbin.org. Ako môžete vidieť z tohto súboru (egress_httpbin.yml), funkčnosť je tu celkom jednoduchá:
Zostáva len použiť toto pravidlo:
istioctl create -f egress_httpbin.yml -n istioegress
Pomocou príkazu môžete zobraziť pravidlá Egress istioctl get egressrules
:
A nakoniec príkaz spustíme znova curl - a vidíme, že všetko funguje:
Myslíme otvorene
Ako vidíte, Istio vám umožňuje organizovať interakciu s vonkajším svetom. Inými slovami, stále môžete vytvárať služby OpenShift a spravovať ich prostredníctvom Kubernetes, pričom máte všetko uložené v moduloch, ktoré sa podľa potreby zväčšujú a zmenšujú. A zároveň môžete bezpečne pristupovať k službám mimo vášho prostredia. A áno, ešte raz opakujeme, že toto všetko sa dá urobiť bez toho, aby ste sa akýmkoľvek spôsobom dotkli vášho kódu.
Toto bol posledný príspevok v sérii na Istio. Zostaňte naladení – pred nami je veľa zaujímavých vecí!
Zdroj: hab.com