«Rrezi â emri im i dytë», thoshte Austin Powers, njeriu-i mistershĂ«m i nivelit ndĂ«rkombĂ«tar. Por ajo qĂ« Ă«shtĂ« e vlerĂ«suar nga superagjentĂ«t dhe shĂ«rbimet sekrete, nuk Ă«shtĂ« aspak e pĂ«rshtatshme pĂ«r shĂ«rbimet kompjuterike, ku mĂ«rzia Ă«shtĂ« shumĂ« mĂ« e mirĂ« se rreziku.

Dhe Istio sĂ« bashku me OpenShift dhe Kubernetes e kthejnĂ« implementimin e mikroshĂ«rbimeve nĂ« njĂ« proces nĂ« tĂ« vĂ«rtetĂ« tĂ« mĂ«rzitshĂ«m dhe parashikues â dhe kjo Ă«shtĂ« e shkĂ«lqyer. PĂ«r kĂ«tĂ« dhe shumĂ« tĂ« tjera do tĂ« flasim nĂ« postin e katĂ«rt dhe tĂ« fundit tĂ« serisĂ« pĂ«r Istio.
Kur mërzia është e drejtë
Në rastin tonë, mërzia ndodh vetëm në fazën përfundimtare, kur mbetet vetëm të ulesh dhe të vëshzhgosh procesin. Por për këtë është e nevojshme të paraprihen të gjitha konfigurimet, dhe këtu ju pret shumë interesante.
GjatĂ« implementimit tĂ« njĂ« versioni tĂ« ri tĂ« softuerit tuaj, duhet tĂ« shqyrtoni tĂ« gjitha mundĂ«sitĂ« pĂ«r tĂ« minimizuar rreziqet. Puna nĂ« mĂ«nyrĂ« paralel Ă«shtĂ« njĂ« mĂ«nyrĂ« shumĂ« e fuqishme dhe e provuar pĂ«r testim, dhe Istio lejon pĂ«rdorimin e njĂ« «agjencie sekrete» (njĂ« version tĂ« fshehtĂ« tĂ« mikroshĂ«rbimit tuaj) pa ndĂ«rhyrĂ« nĂ« funksionimin e sistemit tĂ« prodhimit. PĂ«r kĂ«tĂ« ka madje njĂ« term tĂ« veçantĂ« â «LĂ«shimi i fshehtë» (Dark Launch), i cili aktivizohet nga njĂ« funksion me njĂ« emĂ«r po aq spiun si «mirrorimi i trafikut».
VĂ«reni se nĂ« propozimin e parĂ« tĂ« paragrafit tĂ« mĂ«parshĂ«m pĂ«rdoret termi «implementim» (deploy), dhe jo «lĂ«shim» (release). Ju vĂ«rtet duhet tĂ« keni mundĂ«sinĂ« tĂ« implementoni â dhe, natyrisht, tĂ« pĂ«rdorni â mikroshĂ«rbimin tuaj sa herĂ« qĂ« dĂ«shironi. Ky shĂ«rbim duhet tĂ« jetĂ« i aftĂ« tĂ« pranojĂ« dhe tĂ« pĂ«rpunojĂ« trafik, tĂ« japĂ« rezultate dhe gjithashtu tĂ« shkruajĂ« nĂ« log dhe tĂ« monitorohet. Por ai vetĂ« nuk Ă«shtĂ« domosdoshmĂ«risht i lĂ«shuar nĂ« prodhim. Implementimi dhe lĂ«shimi i softuerit nuk janĂ« gjithmonĂ« njĂ«soj. Implementimin mund ta kryeni gjithmonĂ« kur tĂ« dĂ«shironi, por lĂ«shimi vetĂ«m atĂ«herĂ« kur tĂ« jeni plotĂ«sisht tĂ« gatshĂ«m.
Organizimi i mërzisë është interesant
Shikoni rregullin e mëposhtëm të ruterit të Istio, i cili drejton të gjitha kërkesat HTTP në mikroshërbimin recommendation v1 (të gjitha shembujt janë marrë nga ), duke mirrored edhe ato në mikroshërbimin recommendation v2:

VĂ«reni etiketĂ«n mirror: nĂ« fund tĂ« ekranit â ajo pĂ«rcakton mirrorimin e trafikut. Po, kaq e thjeshtĂ«!
Rezultati i kĂ«tij rregulli do tĂ« jetĂ« se sistemi juaj i prodhimit (v1) do tĂ« vazhdojĂ« tĂ« pĂ«rpunojĂ« kĂ«rkesat e ardhura, por kĂ«rkesat vetĂ« do tĂ« pasqyrohen asinkronisht nĂ« v2, qĂ« do tĂ« thotĂ« se ato do tĂ« dĂ«rgohen si kopje tĂ« plota. KĂ«shtu, do tĂ« keni mundĂ«si tĂ« testoni funksionimin e v2 nĂ« kushte reale â me tĂ« dhĂ«na dhe trafik tĂ« vĂ«rtetĂ« â pa ndĂ«rhyrĂ« nĂ« punĂ«n e sistemit tĂ« prodhimit. A e bĂ«n kjo organizimin e testimit tĂ« mĂ«rzitshĂ«m? Po, patjetĂ«r. Por po bĂ«het nĂ« njĂ« mĂ«nyrĂ« interesante.
Shtojmë dramën
Kujdes, nĂ« kodin e v2 duhet tĂ« parashikoni situata kur kĂ«rkesat e ardhura mund tĂ« shkaktojnĂ« ndryshimin e tĂ« dhĂ«nave. KĂ«rkesat vetĂ« pasqyrohen lehtĂ«sisht dhe nĂ« mĂ«nyrĂ« transparente, por zgjedhja e mĂ«nyrĂ«s sĂ« pĂ«rpunimit nĂ« testim mbetet nĂ« duar tuaja â kjo Ă«shtĂ« pak mĂ« emocionuese.
Të përsërisim një moment të rëndësishëm
Lansimi i fshehtë me pasqyrimin e trafikut (Dark Launch/Request Mirroring) mund të realizohet pa prekur kodin.
Ushqim për mendimin
Por çfarĂ« nĂ«se, nĂ« vend tĂ« pasqyrimit tĂ« kĂ«rkesave, dĂ«rgoni njĂ« pjesĂ« tĂ« tyre jo nĂ« v1, por nĂ« v2? PĂ«r shembull, njĂ« pĂ«rqindje nga tĂ« gjitha kĂ«rkesat ose vetĂ«m kĂ«rkesat nga njĂ« grup i caktuar pĂ«rdoruesish. Dhe pastaj, duke parĂ« si funksionon v2, gradualisht tĂ« transferoni tĂ« gjitha kĂ«rkesat nĂ« versionin e ri. Ose pĂ«rndryshe, tĂ« kthehen tĂ« gjitha nĂ« v1, nĂ«se diçka nuk shkon mirĂ« me v2. MĂ« duket se kjo quhet Canary Deployment ("implementim canary" â termi , dhe nĂ«se do tĂ« kishte njĂ« origjinĂ« ruse, do tĂ« pĂ«rmbante padyshim njĂ« referencĂ« pĂ«r ), dhe tani do ta shqyrtojmĂ« kĂ«tĂ« mĂ« nĂ« detaje.
Canary Deployment në Istio: thjeshtojmë aktivizimin
Me kujdes dhe gradualisht
Thelbi i modelit tĂ« implementimit Canary Deployment Ă«shtĂ« jashtĂ«zakonisht i thjeshtĂ«: kur lansoni njĂ« version tĂ« ri tĂ« softuerit tuaj (nĂ« rastin tonĂ« â mikroshĂ«rbimi), sĂ« pari i jepni akses njĂ« grupi tĂ« vogĂ«l pĂ«rdoruesish. NĂ«se gjithçka shkon mirĂ«, ngadalĂ« rritni kĂ«tĂ« grup derisa versioni i ri tĂ« fillojĂ« tĂ« ketĂ« probleme, ose â nĂ«se kjo nuk ndodh â pĂ«rfundimisht ta transferoni tĂ« gjithĂ« pĂ«rdoruesit nĂ« tĂ«. Duke e futur versionin e ri nĂ« operim nĂ« mĂ«nyrĂ« tĂ« menduar dhe duke kontrolluar kalimin nĂ« tĂ«, mund tĂ« zvogĂ«loni rreziqet dhe tĂ« maksimizoni reagimet.
Natyrisht, Istio e thjeshtëson Canary Deployment, duke ofruar disa mundësi të mira për riorganizimin inteligjent të kërkesave. Po, të gjitha këto mund të bëhen pa prekur kodin tuaj të burimit.
Filtrimi i shfletuesit
Një nga kriteret më të thjeshta të riorganizimit është drejtimi në përputhje me shfletuesin. Le të themi se doni që në v2 të kalohen vetëm kërkesat nga shfletuesit Safari. Ja si bëhet kjo:

Të aplikohet ky rregull riorganizimi dhe pastaj me komandën curl do të simulonim në cikël kërkesa reale ndaj mikroshërbimit. Siç duket në screenshot, të gjitha ato kalojnë në v1:

Por ku është trafiku në v2? Duke qenë se në shembullin tonë të gjitha kërkesat vinin vetëm nga linja jonë e komandës, thjesht nuk ka trafik. Por vini re rreshtat e fundit në screenshot-in më sipër: kjo është përgjigjja ndaj kërkesës nga shfletuesi Safari, i cili nga ana tjetër ka dhënë këtë:

Pushtet i pakufizuar
Ne kemi shkruar tashmë se shprehjet e rregullta ofrojnë mundësi shumë të fuqishme për riorganizimin e kërkesave. Shikoni shembullin e mëposhtëm (mendojmë se do ta kuptoni vetë se çfarë bën):

Tani, ndoshta e keni tashmë një ide për atë që janë të afta shprehjet e rregullta.
Veproni me mençuri
Riorganizimi i mençur, veçanĂ«risht pĂ«rpunimi i titujve tĂ« paketeve duke pĂ«rdorur shprehjet e rregullta, ju lejon tĂ« udhĂ«heqni trafikun ashtu si tĂ« doni. Dhe kjo e thjeshton ndjeshĂ«m implementimin e kodit tĂ« ri â Ă«shtĂ« thjesht, nuk kĂ«rkon ndryshimin e vetĂ« kodit dhe, nĂ«se Ă«shtĂ« e nevojshme, gjithçka mund tĂ« kthehet shpejt siç ishte.
A jeni të interesuar?
A keni dëshirë të eksperimentoni me Istio, Kubernetes dhe OpenShift në kompjuterin tuaj? Ekipi ka përgatitur një shkëlqyer mbi këtë temë dhe e ka publikuar të gjitha skedarët përkatës. Pra, përpara, dhe mos e kufizoni veten.
â
Istio Egress: dalja përmes dyqanit të suvenireve
Duke aplikuar Istio sĂ« bashku me Red Hat OpenShift dhe Kubernetes, mund tĂ« lehtĂ«soni shumĂ« jetĂ«n tuaj me mikroshĂ«rbimet. Rrjeti i shĂ«rbimeve Istio Ă«shtĂ« i fshehur brenda pod-Ă«ve tĂ« Kubernetes-it, ndĂ«rsa kodi juaj ekzekutohet (nĂ« pĂ«rgjithĂ«si) nĂ« mĂ«nyrĂ« tĂ« izoluar. Performanca, lehtĂ«si e ndryshimit, gjurmimi dhe shumĂ« tĂ« tjera â tĂ« gjitha kĂ«to janĂ« tĂ« lehta pĂ«r t'u pĂ«rdorur falĂ« pĂ«rdorimit tĂ« kontejnerĂ«ve sidecar. Por çfarĂ« tĂ« bĂ«ni nĂ«se mikroshĂ«rbimi juaj duhet tĂ« komunikojĂ« me shĂ«rbime tjera qĂ« ndodhen jashtĂ« sistemit tuaj OpenShift-Kubernetes?
Këtu në ndihmë vjen Istio Egress. Në dy fjalë, ai thjesht lejon qasje në burimet (lexo: «shërbimet») që nuk janë brenda sistemit tuaj Kubernetes. Nëse nuk bëni konfigurime shtesë, atëherë në ambientin Istio Egress, trafiku rihyrë vetëm brenda klasthit të pod-ve dhe midis këtyre klashtave bazuar në tabelat e brendshme IP. Dhe ky izolim funksionon mjaft mirë derisa të keni nevojë për qasje në shërbime jashtë.
Egress lejon kalimin përtej tabelave të IP-ëve të përmendura më sipër, qoftë në bazë të rregullave Egress, ose për një gamë IP-sh.
Të supozojmë se kemi një program Java, i cili bën një kërkesë GET në httpbin.org/headers.
(httpbin.org është thjesht një burim i përshtatshëm për testimin e kërkesave shërbim-dërguese.)
Nëse futni në komandën e linjës curl http://httpbin.org/headers, do të shohim këtë:

Ose mund ta hapni këtë adresë në shfletues:

Siç e shohim, shërbimi aty thjesht kthen titujt e dërguar.
Zëvendësimi i importit në mënyrë direkte
Tani le të marrim kodin Java të këtij shërbimi të jashtëm në lidhje me sistemin tonë dhe ta ekzekutojmë atë në sistemin tonë, ku, kujtojmë, është vendosur Istio. (Mund ta bëni këtë vetë, duke iu referuar .) Pas ndërtimit të imazhit përkatës dhe ekzekutimit të tij në platformën OpenShift, do të thërrasim këtë shërbim me komandën curl egresshttpbin-istioegress.$(minishift ip).nip.io, dhe më pas do të shohim në ekran këtë:

Oo, çfarĂ« ndodhi? Ajo sapo punonte. ĂfarĂ« do tĂ« thotĂ« Not Found? Ne sapo e bĂ«mĂ« pĂ«r tĂ« curl.
Zgjerimi i tabelave IP për tërë internetin
Duhet ta fajësojmë (ose ta falenderojmë) Istio-n për këtë. Sepse Istio është thjesht kontejnerë sidecar, të cilët janë përgjegjës për zbulimin dhe rihyrjen (dhe për shumë gjëra të tjera, për të cilat kemi folur më parë). Për këtë arsye, tabelat IP dinë vetëm atë që ndodhet brenda sistemit tuaj të klashtave. Dhe httpbin.org ndodhet jashtë dhe, si rezultat, është i paarritshëm. Dhe këtu në ndihmë vjen Istio Egress - pa asnjë ndryshim në kodin tuaj të burimit.
Rregulli i Egress më poshtë e detyron Istio-n të kërkojë (nëse është e nevojshme, edhe në të gjithë internetin) shërbimin e nevojshëm, në këtë rast, httpbin.org. Siç duket nga ky skedar (egress_httpbin.yml), funksionaliteti këtu është mjaft i thjeshtë:

Mbetej vetëm të aplikoni këtë rregull:
istioctl create -f egress_httpbin.yml -n istioegress
Të shihni rregullat e Egress mund të bëni me komandën istioctl get egressrules:

Dhe fund, pĂ«rsĂ«ri e fillojmĂ« komandĂ«n curl â dhe shohim se gjithçka funksionon:

Mendoni hapur
Ashtu siç e shihni, Istio lejon organizimin e interaksioneve edhe me botën jasht. Në fjalë të tjera, ju mund të krijoni shërbime OpenShift dhe t'i menaxhoni ato përmes Kubernetes, duke mbajtur gjithçka në pod'ë që shkallëzohen lart-poshtë sipas nevojës. Dhe në të njëjtën kohë, mund të lidheni pa ndonjë shqetësim me shërbime që janë jashtë mjedisit tuaj. Dhe po, le të përsërisim se e gjithë kjo mund të bëhet pa prekur kodin tuaj.
Ky ishte postimi i fundit nĂ« serinĂ« pĂ«r Istio. QĂ«ndroni me ne â ka shumĂ« gjĂ«ra interesante pĂ«rpara!
Burimi: habr.com
