Dark Launch i Istio: hemmelige tjenester

«Fare er mit navn», sagde Austin Powers, et internationalt mysterium. Men det, der vÊrdsÊttes af superagenter og efterretningstjenester, er slet ikke passende for it-afdelinger, hvor kedsomhed er langt bedre end farer.

Dark Launch i Istio: hemmelige tjenester

Og Istio sammen med OpenShift og Kubernetes gþr implementeringen af mikrotjenester til en virkelig kedelig og forudsigelig opgave – og det er godt. Det og meget mere vil vi tale om i det fjerde og sidste indlég i serien om Istio.

NÄr kedsomhed er korrekt

I vores tilfÊlde opstÄr kedsomhed kun i den afsluttende fase, hvor man kun skal sidde og observere processen. Men for at dette kan ske, skal alt vÊre opsat pÄ forhÄnd, og der venter dig meget interessant.

NĂ„r du implementerer en ny version af din software, er det vĂŠrd at overveje alle muligheder for at minimere risici. At arbejde i parallelt tilstand er en meget effektiv og velprĂžvet testmetode, og Istio gĂžr det muligt at involvere en 'hemmelig tjeneste' (en skjult version af din mikrotjeneste, ikke synlig for udenforstĂ„ende) uden at forstyrre driften af produktionssystemet. Der er endda et specielt begreb for dette – 'MĂžrk Udgivelse' (Dark Launch), som aktiveres af funktionen med det ikke mindre spionagtige navn 'trafik spejling'.

BemĂŠrk, at udtrykket 'implementering' (deploy) bruges i den fĂžrste sĂŠtning i det foregĂ„ende afsnit, ikke 'udgivelse' (release). Du skal virkelig kunne implementere – og naturligvis bruge – din mikrotjeneste sĂ„ ofte som Ăžnsket. Denne tjeneste skal kunne modtage og behandle trafik, returnere resultater samt logge og overvĂ„ge. Men dette betyder ikke nĂždvendigvis, at selve tjenesten skal frigives til produktionen. Implementering og udgivelse af software er ikke altid det samme. Du kan implementere nĂ„r som helst du vil, men udgivelse kan kun ske, nĂ„r du er helt klar.

At organisere kedsomhed er interessant

Tag et kig pÄ fÞlgende Istio routingregel, der dirigerer alle HTTP-anmodninger til mikrotjeneste recommendation v1 (alle eksempler er hentet fra Istio Tutorial GitHub repo), samtidig med at de spejles til mikrotjeneste recommendation v2:

Dark Launch i Istio: hemmelige tjenester
BemĂŠrk mĂŠrkaten mirror: i bunden af skĂŠrmbilledet – det er den, der angiver trafikspejling. Ja, det er sĂ„ enkelt!

Resultatet af denne regel vil vĂŠre, at dit produktionssystem (v1) fortsat vil behandle indkommende anmodninger, men anmodningerne vil blive asynkront spejlet til v2, hvilket betyder, at deres fulde duplikater vil blive sendt derhen. PĂ„ denne mĂ„de kan du teste v2's funktion i virkelige forhold – med rigtige data og trafik – uden at blande dig i produktionens drift. GĂžr dette testprocessen kedelig? Ja, uden tvivl. Men det gĂžres pĂ„ en interessant mĂ„de.

Lad os tilfĂžje drama

BemÊrk, at koden i v2 skal tage hÞjde for situationer, hvor indkommende anmodninger kan fÞre til Êndringer i data. Anmodningerne spejles let og gennemsigtigt, men mÄden at behandle i testen ligger i dine hÊnder - og det er lidt spÊndende.

Lad os gentage et vigtigt punkt

Den hemmelige lancering med trafikspejling (Dark Launch/Request Mirroring) kan udfĂžres uden at berĂžre koden.

Til eftertanke

Hvad nu hvis vi sendte en del af anmodningerne ikke til v1, men til v2? For eksempel, en procentdel af alle anmodninger eller kun anmodninger fra en bestemt brugergruppe. Og sÄ, ved at se pÄ hvordan v2 fungerer, gradvist overfÞre alle anmodninger til den nye version. Eller omvendt, tilbage til v1, hvis noget gÄr galt med v2. Det ser ud til, at dette kaldes Canary Deployment ("kanariedistribution" - termen henviser til minedrift, og havde det haft russisk oprindelse, ville det sandsynligvis have inkluderet en henvisning til katte), og nu vil vi se nÊrmere pÄ dette.

Canary Deployment i Istio: forenkler implementeringen

Forsigtigt og gradvist

Essensen af Canary Deployment-modellen er meget simpel: nÄr du lancerer en ny version af din software (i vores tilfÊlde - mikrotjenesten), giver du fÞrst en lille gruppe brugere adgang til den. Hvis alt gÄr godt, Þger du langsomt denne gruppe, indtil den nye version begynder at have problemer, eller - hvis det ikke sker - til sidst overfÞrer du alle brugere til den. Ved omhyggeligt og gradvist at implementere den nye version og kontrolleret skifte brugerne til den, kan man reducere risiciene og maksimere feedbacken.

SelvfĂžlgelig forenkler Istio Canary Deployment ved at tilbyde flere gode muligheder for intelligent anmodningsrouting. Og ja, alt dette kan gĂžres uden at rĂžre ved din kildekode.

Filtrering af browser

Et af de enkleste kriterier for routing er omdirigering baseret pÄ browser. Antag, at du kun vil have, at anmodninger fra Safari-browseren gÄr til v2. SÄdan gÞr du det:

Dark Launch i Istio: hemmelige tjenester
Lad os anvende denne routingregel og derefter med kommandoen curl vil vi i en loop simulere reelle anmodninger til mikrotjenesten. Som det kan ses pÄ skÊrmbilledet, gÄr alle anmodninger til v1:

Dark Launch i Istio: hemmelige tjenester
Men hvor er trafikken til v2? Da alle anmodninger i vores eksempel kom fra vores kommandoprompt, er der simpelthen ingen. Men bemÊrk de nederste linjer pÄ skÊrmen ovenfor: det er reaktionen pÄ, at vi udfÞrte en anmodning fra Safari-browseren, som dernÊst gav fÞlgende:

Dark Launch i Istio: hemmelige tjenester

Ubegribelig magt

Vi har tidligere nÊvnt, at regulÊre udtryk giver meget kraftfulde muligheder for routing af anmodninger. Se pÄ fÞlgende eksempel (vi tror, du selv forstÄr, hvad det gÞr):

Dark Launch i Istio: hemmelige tjenester
Nu kan du sikkert allerede forestille dig, hvad regulĂŠre udtryk er i stand til.

Handling med omtanke

Intelligent routing, isér behandling af pakkeshoveder ved hjélp af regulére udtryk, giver mulighed for at styre trafikken, som du þnsker. Og det gþr det meget lettere at implementere ny kode – det er simpelt, det kréver ikke éndring af selve koden, og alt kan hurtigt tilbagefþres, hvis det er nþdvendigt.

Interesseret?

Er du klar til at eksperimentere med Istio, Kubernetes og OpenShift pÄ din egen computer? Holdet Red Hat Developer Team har forberedt en fremragende hÄndbogen om dette emne og delt alle relaterede filer offentligt. SÄ kom i gang, og lad ikke noget tilbageholde dig.
 

Istio Egress: udgangen gennem gavebutikken

Ved at anvende Istio sammen med Red Hat OpenShift og Kubernetes kan du betydeligt forenkle dit arbejde med mikrotjenester. Istio-servicegitteret er skjult inde i Kubernetes' pods, mens din kode udfÞres (for det meste) isoleret. Ydeevne, let at Êndre, sporing og meget mere - alt dette er nemt at bruge netop pÄ grund af anvendelsen af sidecar-containere. Men hvad gÞr man, hvis din mikrotjeneste skal kommunikere med andre tjenester, der ligger uden for dit OpenShift-Kubernetes-system?

Her kommer Istio Egress til hjÊlp. Kort sagt giver det adgang til ressourcer (lÊs: «tjenester»), som ikke er en del af dine Kubernetes-pods. Uden yderligere konfiguration bliver trafikken i Istio Egress kun routet internt mellem pod'erne og mellem sÄdanne klynger baseret pÄ interne IP-tabeller. Denne indkapsling fungerer fint, indtil du har brug for adgang til tjenester uden for systemet.

Egress tillader at omgÄ de nÊvnte IP-tabeller, enten baseret pÄ Egress-regler eller for et interval af IP-adresser.

Lad os sige, at vi har et Java-program, der udfĂžrer en GET-anmodning til httpbin.org/headers.

(httpbin.org er bare en nyttig ressource til at teste udgÄende service-anmodninger.)

Hvis vi indtaster i kommandolinjen curl http://httpbin.org/headers, vil vi se fĂžlgende:

Dark Launch i Istio: hemmelige tjenester
Eller vi kan Äbne den samme adresse i browseren:

Dark Launch i Istio: hemmelige tjenester
Som vi kan se, returnerer den tjeneste, der ligger der, blot de hĂŠnder, der sendes til den.

Importeres direkte

Nu tager vi Java-koden fra denne eksterne tjeneste i forhold til vores system og kÞrer den, hvor vi minder om, at Istio er installeret. (Du kan gÞre dette selv ved at gÄ til vores Istio tutorial.) Ved at bygge det relevante billede og kÞre det pÄ OpenShift-platformen, vil vi kalde denne tjeneste med kommandoen curl egresshttpbin-istioegress.$(minishift ip).nip.io, hvorefter vi vil se fÞlgende pÄ skÊrmen:

Dark Launch i Istio: hemmelige tjenester
Hov, hvad skete der? Det virkede jo lige fĂžr. Hvad betyder Not Found? Vi oprettede jo lige til det. curl.

Udvider IP-tabellerne til hele internettet

Det skal vére Istio, der skal klandres (eller takkes). For Istio er der blot sidecar-containere, der er ansvarlige for opdagelse og routing (samt en masse andre ting, som vi tidligere har beskrevet). Derfor ved IP-tabellerne kun om, hvad der findes inde i dine klynge-systemer. Og httpbin.org ligger udenfor og er dermed utilgéngeligt. Her kommer Istio Egress til undsétning – uden éndringer i din kildekode.

Den nedenstÄende Egress-regel fÄr Istio til at sÞge (om nÞdvendigt i hele det globale internet) efter den Þnskede tjeneste, i dette tilfÊlde httpbin.org. Som vist i denne fil (egress_httpbin.yml) er funktionaliteten her ret enkel:

Dark Launch i Istio: hemmelige tjenester
Det er nu kun at anvende denne regel:

istioctl create -f egress_httpbin.yml -n istioegress

Du kan se Egress-reglerne med kommandoen istioctl get egressrules:

Dark Launch i Istio: hemmelige tjenester
Og til sidst kþrer vi kommandoen igen curl – og ser, at alt fungerer:

Dark Launch i Istio: hemmelige tjenester

TÊnk Äbent

Som du kan se, gĂžr Istio det muligt at organisere interaktioner med verden udenfor. Med andre ord kan du stadig oprette OpenShift-tjenester og styre dem via Kubernetes, alt imens du holder det hele i pod'er, der skal skaleres op og ned efter behov. Og du kan trygt URL'e til tjenester, der er eksterne i forhold til dit miljĂž. Og ja, lad os gentage, at alt dette kan gĂžres, uden at rĂžre ved din kode.

Dette var det sidste indlég i serien om Istio. Bliv hos os – der er meget spéndende i vente!

Kilde: habr.com

KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster