Dark Launch v Istio: tajné služby

„Nebezpečí je moje druhé jméno,“ říkal Austin Powers, muž s mezinárodním tajemstvím. To, co je vysoce ceněno superagenty a tajnými službami, se však pro počítačové služby vůbec nehodí, kde je nuda mnohem lepší než nebezpečí.

Dark Launch v Istio: tajné služby

A Istio spolu s OpenShift a Kubernetes mění nasazení mikroslužeb na skutečně nudný a předvídatelný proces – a to je skvělé. O tom a mnohém dalším si povíme ve čtvrtém a posledním příspěvku ze série o Istio.

Když je nuda to pravé

V našem případě se nuda objevuje pouze v konečné fázi, kdy zbývá jen sedět a sledovat proces. Ale k tomu je potřeba všechno předem nastavit, a zde vás čeká hodně zajímavého.

Při nasazení nové verze vašeho softwaru byste měli zvážit všechny možnosti minimalizace rizik. Práce v paralelním režimu je velmi efektivní a osvědčený způsob testování, a Istio umožňuje zapojit pro tento účel „tajnou službu“ (skrytou verzi vašeho mikroservisu bez zásahu do fungování produkčního systému). K tomu existuje dokonce speciální termín – „Tajné spuštění“ (Dark Launch), které se aktivuje funkcí s neméně špehovským názvem „zrcadlení provozu“.

Všimněte si, že v první větě předchozího odstavce se používá termín „nasazení“ (deploy), a ne „spuštění“ (release). Opravu byste měli mít možnost nasazovat – a samozřejmě používat – svůj mikroslužbu tak často, jak budete chtít. Tento služba by měla být schopna přijímat a zpracovávat provoz, vystavovat výsledky a také zapisovat do logů a monitorovat. Ale sama o sobě nemusí být tato služba nutně uvolněna do produkce. Nasazení a uvolnění softwaru nejsou vždy totéž. Nasazení můžete provádět vždy, když chcete, ale uvolnění – jen tehdy, když budete zcela připraveni.

Organizace nudy je zajímavá

Podívejte se na následující pravidlo směrování Istio, které směruje všechny HTTP požadavky na mikroslužbu recommendation v1 (všechny příklady jsou z Istio Tutorial GitHub repo), zároveň je zrcadlí na mikroslužbu recommendation v2:

Dark Launch v Istio: tajné služby
Všimněte si značky mirror: na spodní části obrazovky – právě ona určuje zrcadlení provozu. Ano, tak jednoduše!

Výsledkem tohoto pravidla bude to, že váš produkční systém (v1) nadále zpracovává příchozí dotazy, ale tyto dotazy budou asynchronně zrcadleny na v2, což znamená, že tam budou odesílány jejich plné duplikáty. Tímto způsobem budete moci testovat výkon v2 v reálných podmínkách – na skutečných datech a provozu – aniž byste zasahovali do činnosti produkčního systému. Převádí to testovací organizaci na nudnou činnost? Ano, bezpochyby. Ale dělá se to zajímavě.

Přidáme dramatično

Všimněte si, že v kódu v2 je třeba zohlednit situace, kdy příchozí dotazy mohou vést k změně dat. Samotné dotazy se zrcadlí snadno a průhledně, ale způsob zpracování v testovací verzi je na vás – a to už je trochu vzrušující.

Opakujme důležitý bod

Tajný start se zrcadlením provozu (Dark Launch/Request Mirroring) lze provádět, aniž by to jakkoli ovlivnilo kód.

Podnět k zamyšlení

A co když místo zrcadlení dotazů posílat část z nich nikoli na v1, ale na v2? Například jedno procento všech dotazů nebo pouze dotazy od určité skupiny uživatelů. A pak, při pohledu na to, jak funguje v2, postupně převést na novou verzi všechny dotazy. Nebo naopak vrátit vše na v1, pokud něco nepůjde u v2 podle plánu. Zdá se, že se tomu říká Canary Deployment („kanárové nasazení“ – termín vychází z dolování, a pokud by měl ruský původ, pravděpodobně by obsahoval odkaz na kočky), a nyní se na to podíváme podrobněji.

Canary Deployment v Istio: usnadňujeme uvedení do provozu

Ostro a postupně

Podstata modelu Canary Deployment je velmi jednoduchá: při spuštění nové verze vašeho softwaru (v našem případě – mikroslužby) nejprve umožníte přístup malé skupině uživatelů. Pokud vše probíhá normálně, postupně tuto skupinu zvyšujete, dokud nová verze nezačne mít problémy, nebo – pokud se tak nikdy nestane – nakonec přejdete na tuto verzi všechny uživatele. Přemýšlivě a postupně zavádějte novou verzi a kontrolovaně přepínejte uživatele na ni, abyste minimalizovali rizika a maximalizovali zpětnou vazbu.

Samozřejmě, Istio usnadňuje Canary Deployment, neboť nabízí hned několik výborných možností pro inteligentní směrování požadavků. A ano, to vše lze provést, aniž byste se dotkli vašeho zdrojového kódu.

Filtrujeme prohlížeč

Jedním z nejjednodušších kritérií pro směrování je přesměrování na základě prohlížeče. Představte si, že chcete, aby na v2 odcházely pouze požadavky z prohlížeče Safari. Takhle to uděláte:

Dark Launch v Istio: tajné služby
Aplikujeme toto pravidlo směrování a pak příkazem curl budeme v cyklu simulovat skutečné požadavky na mikroslužbu. Jak je vidět na obrázku, všechny odcházejí na v1:

Dark Launch v Istio: tajné služby
A kde je provoz na v2? Protože v našem příkladu veškeré požadavky pocházely pouze z naší příkazové řádky, žádný tam prostě není. Ale věnujte pozornost dolním řádkům na obrázku nahoře: to je reakce na to, že jsme provedli požadavek z prohlížeče Safari, který vykázal toto:

Dark Launch v Istio: tajné služby

Neomezená moc

Už jsme psali, že regulární výrazy nabízejí velmi silné možnosti pro směrování požadavků. Podívejte se na následující příklad (domníváme se, že chápete, co dělá):

Dark Launch v Istio: tajné služby
Teď už si pravděpodobně dovedete představit, na co všechno jsou regulární výrazy schopné.

Působit chytře

Chytré směrování, zejména zpracování záhlaví paketů za použití regulárních výrazů, vám umožňuje řídit provoz podle vašich představ. A to výrazně zjednodušuje uvedení nového kódu do provozu – je to jednoduché, nevyžaduje to změnu samotného kódu a v případě potřeby lze vše rychle vrátit zpět.

Zaujalo vás to?

Máte chuť experimentovat s Istio, Kubernetes a OpenShift na svém počítači? Tým Red Hat Developer Team připravil skvělý učebnice na toto téma a zveřejnil všechny související soubory. Takže vpřed, a ničeho se neomezujte.
 

Istio Egress: výstup přes suvenýr

Používáním Istio spolu s Red Hat OpenShift a Kubernetes si můžete výrazně usnadnit život s mikroslužbami. Služební síť Istio je ukryta uvnitř podů Kubernetes, a váš kód se provádí (většinou) isolovaně. Výkon, snadnost změny, trasování a další – to vše je snadno použitelné právě díky využití sidecar kontejnerů. Ale co dělat, když váš mikroslužba musí komunikovat s jinými službami, které se nacházejí za hranicemi vašeho systému OpenShift-Kubernetes?

Zde přichází na pomoc Istio Egress. Stručně řečeno, umožňuje přístup k prostředkům (jinými slovy: „službám”), které nejsou součástí vašich podů Kubernetes. Pokud se neprovádí žádné dodatečné nastavení, v prostředí Istio Egress je provoz směrován pouze uvnitř clusteru podů a mezi takovými clustry na základě interních IP tabulek. A takové omezení funguje skvěle, dokud nepotřebujete přístup k službám zvenčí.

Egress umožňuje obejít výše uvedené IP tabulky, buď na základě pravidel Egress, nebo pro rozsah IP adres.

Představme si, že máme Java program, který provádí GET požadavek na httpbin.org/headers.

(httpbin.org je jen pohodlný prostředek pro testování odchozích služeb.)

Pokud zadáme do příkazového řádku curl http://httpbin.org/headers, uvidíme následující:

Dark Launch v Istio: tajné služby
Nebo lze otevřít tuto adresu v prohlížeči:

Dark Launch v Istio: tajné služby
Jak vidíme, nacházející se služba jednoduše vrací předané jí hlavičky.

Importujeme bez obalu

Nyní vezmeme Java kód této externí služby k naší systému a spustíme ji u sebe, kde, připomínáme, běží Istio. (Můžete to udělat sami, s odkazem na náš tutoriál o Istio.) Po sestavení odpovídajícího obrazu a spuštění na platformě OpenShift vyvoláme tuto službu příkazem curl egresshttpbin-istioegress.$(minishift ip).nip.io, po čemž na obrazovce uvidíme toto:

Dark Launch v Istio: tajné služby
Co se stalo? Před chvílí to fungovalo. Co znamená Not Found? Vždyť jsme pro něj právě udělali curl.

Rozšiřujeme IP tabulky na celý internet

Za to může (nebo má být vděčný) Istio. Vždyť Istio jsou jen sidecar kontejnery, které odpovídají za objevování a směrování (a za řadu dalších věcí, o kterých jsme mluvili dříve). Z tohoto důvodu tabulky IP vědí pouze o tom, co se nachází uvnitř vašeho clusteru. A httpbin.org se nachází zvenčí a tudíž není dostupný. A zde přichází Istio Egress – bez jakýchkoliv změn ve vašem zdrojovém kódu.

Následující pravidlo Egress nutí Istio hledat (pokud je to nutné, tak i po celém internetu) potřebnou službu, v tomto případě httpbin.org. Jak je vidět z tohoto souboru (egress_httpbin.yml), funkčnost zde je docela jednoduchá:

Dark Launch v Istio: tajné služby
Stačí pouze aplikovat toto pravidlo:

istioctl create -f egress_httpbin.yml -n istioegress

Pravidla Egress lze zobrazit příkazem istioctl get egressrules:

Dark Launch v Istio: tajné služby
A nakonec znovu spouštíme příkaz curl – a vidíme, že vše funguje:

Dark Launch v Istio: tajné služby

Myslíme otevřeně

Jak vidíte, Istio umožňuje organizovat interakci i s vnějším světem. Jinými slovy, můžete stále vytvářet služby OpenShift a řídit je přes Kubernetes, přičemž vše držíte v podech, které se podle potřeby škálují nahoru a dolů. A zároveň můžete bez obav přistupovat k externím službám vzhledem k vašemu prostředí. A ano, ještě jednou opakujeme, že to vše můžete dělat, aniž byste se dotýkali svého kódu.

To byl poslední příspěvek z série o Istio. Zůstaňte s námi – čeká vás spousta zajímavého!

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster