«Fare er ikke noe for meg», sa Austin Powers, en internasjonal gÄte. Men det som er pÄ moten blant superagenter og etterretningstjenester, er helt uegnet for datarelaterte tjenester, der kjedsomhet er mye bedre enn fare.

Istio, sammen med OpenShift og Kubernetes, gjĂžr distribusjon av mikrotjenester til en virkelig kjedelig og forutsigbar oppgave â og det er fantastisk. Dette og mye mer skal vi diskutere i det fjerde og siste innlegget i serien om Istio.
NÄr kjedsomhet er riktig
I vÄrt tilfelle oppstÄr kjedsomhet kun i den avsluttende fasen, nÄr man bare mÄ sitte og se pÄ prosessen. Men for dette mÄ alt vÊre konfigurert pÄ forhÄnd, og her venter det mange interessante ting.
NĂ„r du distribuerer en ny versjon av programvaren din, bĂžr du vurdere alle alternativer for Ă„ minimere risikoene. Ă jobbe parallelt er en svĂŠrt kraftig og bevist testmetode, og Istio lar deg bruke en «hemmelig tjeneste» (en skjult versjon av mikrotjenesten din) uten Ă„ blande seg inn i driften av produksjonssystemet. Det finnes til og med et spesielt begrep for dette â «Dunkel lansering» (Dark Launch), som igjen aktiveres av en funksjon med det ikke mindre hemmelige navnet «trafikk-speiling».
Legg merke til at det i den fĂžrste setningen i forrige avsnitt brukes begrepet «distribuering» (deploy), og ikke «utsendelse» (release). Du bĂžr virkelig ha muligheten til Ă„ distribuere â og selvfĂžlgelig bruke â mikrotjenesten din sĂ„ ofte du Ăžnsker. Denne tjenesten skal kunne motta og behandle trafikk, gi resultater, samt skrive til logger og overvĂ„kes. Men selve tjenesten trenger ikke Ă„ lanseres i produksjon. Distribuering og utsendelse av programvare er ikke alltid det samme. Du kan alltid distribuere nĂ„r du Ăžnsker det, mens utsendelse kun kan skje nĂ„r du er helt klar.
Ă organisere kjedsomhet er interessant
Se pÄ fÞlgende Istio-ruteringsregel, som dirigerer alle HTTP-forespÞrslene til mikrotjenesten recommendation v1 (alle eksempler er hentet fra ), samtidig som de speiles til mikrotjenesten recommendation v2:

Legg merke til merket mirror: nederst i skjermbildet â det er det som angir trafikk-speiling. Ja, sĂ„ enkelt er det!
Resultatet av denne regelen vil vĂŠre at produksjonssystemet ditt (v1) fortsatt vil behandle innkommende forespĂžrsler, men forespĂžrslene vil bli asynkront speilet til v2, det vil si at fullstendige kopier av dem sendes dit. Dermed kan du teste v2 under reelle forhold â med ekte data og trafikk â uten Ă„ forstyrre produksjonssystemet. GjĂžr dette testing til en kjedelig prosess? Ja, helt klart. Men det gjĂžres pĂ„ en interessant mĂ„te.
La oss tilfĂžre litt dramatikk
VĂŠr oppmerksom pĂ„ at i v2-koden mĂ„ du ta hĂžyde for situasjoner der innkommende forespĂžrsler kan fĂžre til endringer i data. Selve forespĂžrslene speiles lett og gjennomsiktig, men valget av behandlingsmetode i testen ligger hos deg â og det er allerede litt spennende.
La oss gjenta det viktige punktet
Hemmelige lanseringer med trafikk-speiling (Dark Launch/Request Mirroring) kan utfĂžres uten Ă„ berĂžre koden.
Mat for ettertanke
Hva om man i stedet for Ă„ speile alle forespĂžrslene sender en del av dem ikke til v1, men til v2? For eksempel Ă©n prosent av alle forespĂžrslene eller kun forespĂžrslene fra en bestemt gruppe brukere. Og deretter, mens man ser pĂ„ hvordan v2 fungerer, gradvis overfĂžrer alle forespĂžrslene til den nye versjonen. Eller motsatt, tilbake til v1 hvis noe gĂ„r galt med v2. Det virker som dette kalles Canary Deployment (»kanarielevering« â begrepet , og skulle det ha russisk opprinnelse, ville det sannsynligvis ha inneholdt en referanse til ), og nĂ„ skal vi se nĂŠrmere pĂ„ dette.
Canary Deployment i Istio: forenkler implementering
Forsiktig og gradvis
Essensen i Canary Deployment-modellen er meget enkel: nĂ„r du lanserer en ny versjon av programvaren din (i vĂ„rt tilfelle â mikrotjenesten), gir du fĂžrst tilgang til en liten gruppe brukere. Hvis alt gĂ„r bra, Ăžker du sakte denne gruppen inntil den nye versjonen begynner Ă„ feile, eller â hvis det ikke skjer â til slutt overfĂžrer du alle brukere til den. Ved Ă„ tenke klart og gradvis innfĂžre den nye versjonen og kontrollert bytte brukere til den, kan du redusere risikoene og maksimere tilbakemeldinger.
SelvfĂžlgelig forenkler Istio Canary Deployment ved Ă„ tilby flere gode alternativer for intelligent ruting av forespĂžrselen. Ja, alt dette kan gjĂžres uten Ă„ berĂžre kildekoden din.
Filtrering av nettleser
Et av de enkleste rutingskriteriene er Ä omdirigere basert pÄ nettleseren. La oss si du vil at bare forespÞrslene fra nettleseren Safari skal gÄ til v2. Slik gjÞr du det:

Vi bruker denne rutingsregelen, og deretter skal vi med kommandoen wget simulere ekte forespÞrselssykluser til mikrotjenesten. Som vist pÄ skjermbildet gÄr alle disse til v1:

Men hvor er trafikken til v2? Siden i vÄrt eksempel alle forespÞrslene kom fra kommandolinjen vÄr, er det rett og slett ingen. Men merk de nederste linjene pÄ skjermbildet ovenfor: dette er reaksjonen pÄ at vi utfÞrte en forespÞrsel fra nettleseren Safari, som i sin tur ga dette:

Ubegrenset makt
Vi har allerede nevnt at regulÊre uttrykk gir svÊrt kraftige muligheter for ruting av forespÞrselen. Ta en titt pÄ fÞlgende eksempel (vi tror du selv forstÄr hva det gjÞr):

NÄ har du sikkert allerede en idé om hva regulÊre uttrykk kan gjÞre.
VĂŠr smart
Intelligent ruting, spesielt behandling av pakkens overskrifter ved hjelp av regulĂŠre uttrykk, lar deg styre trafikk slik du Ăžnsker. Dette forenkler ogsĂ„ innfĂžringen av ny kode â det er enkelt, det krever ingen endring av selve koden, og om nĂždvendig kan alt raskt tilbakefĂžres til hvordan det var.
Er du interessert?
Har du fÄtt lyst til Ä eksperimentere med Istio, Kubernetes og OpenShift pÄ datamaskinen din? Teamet har laget en flott om dette emnet og gjort alle tilknyttede filer tilgjengelige. SÄ gÄ videre, og ikke hold tilbake.
â
Istio Egress: utgang gjennom suvenirbutikken
Ved Ă„ bruke Istio sammen med Red Hat OpenShift og Kubernetes kan du betydelig forenkle livet med mikrotjenester. Istio-service-mesh er skjult inne i Kubernetes-podene, og koden din kjĂžrer (hovedsakelig) isolert. Ytelse, enkelhet i endringer, sporing og mer â alt dette er lett tilgjengelig nettopp takket vĂŠre bruken av sidecar-containere. Men hva gjĂžr du hvis mikrotjenesten din mĂ„ kommunisere med andre tjenester som ligger utenfor OpenShift-Kubernetes-systemet ditt?
Her er Istio Egress til hjelp. Kort sagt, det lar deg fÄ tilgang til ressurser (les: «tjenester») som ikke er en del av Kubernetes-podene dine. Med mindre du gjÞr ekstra konfigurasjon, blir trafikken i Istio Egress rutet kun internt i pod-klyngene og mellom slike klynger, basert pÄ interne IP-tabeller. Og denne isolasjonen fungerer utmerket sÄ lenge du ikke trenger tilgang til tjenester utenfor.
Egress lar deg omgÄ de nevnte IP-tabellene, enten basert pÄ Egress-regler eller for et IP-adresseomrÄde.
La oss si at vi har et Java-program som gjĂžr en GET-forespĂžrsel til httpbin.org/headers.
(httpbin.org er bare en praktisk ressurs for Ä teste utgÄende tjenesteforespÞrsel.)
Hvis vi skriver inn i kommandolinjen curl http://httpbin.org/headers, vil vi se fĂžlgende:

Eller vi kan Äpne den samme adressen i nettleseren:

Som vi ser, returnerer tjenesten som ligger der bare de oversendte overskriftene.
Importerer direkte
NÄ tar vi Java-koden til denne eksterne tjenesten i forhold til systemet vÄrt og kjÞrer den pÄ vÄrt sted, hvor, la oss minne om, Istio er installert. (Du kan gjÞre dette selv ved Ä kontakte .) Etter Ä ha bygget den tilsvarende imagen og kjÞrt den pÄ OpenShift-plattformen, vil vi kalle denne tjenesten med kommandoen curl egresshttpbin-istioegress.$(minishift ip).nip.io, og sÄ vil vi se dette pÄ skjermen:

Hva skjedde nÄ? Det fungerte akkurat fÞr. Hva betyr Not Found? Vi opprettet jo nettopp tilgangen. wget.
Utvider IP-tabellene til hele internett
Skylden (eller takken) for dette mĂ„ gĂ„ til Istio. For Istio er rett og slett sidecar-containere som er ansvarlige for oppdagelse og ruting (og en rekke andre ting vi har snakket om tidligere). Av denne grunn vet IP-tabellene kun om det som er internt i klyngesystemene dine. Og httpbin.org ligger utenfor og er derfor utilgjengelig. Og her kommer Istio Egress til unnsetning â uten noen endringer i kildekoden din.
Den fÞlgende Egress-regelen fÄr Istio til Ä sÞke (hvis nÞdvendig, ogsÄ i hele internett) etter den nÞdvendige tjenesten, i dette tilfellet httpbin.org. Som vi kan se fra denne filen (egress_httpbin.yml), er funksjonaliteten ganske enkel:

Det er bare Ă„ bruke denne regelen:
istioctl create -f egress_httpbin.yml -n istioegress
Du kan se Egress-reglene med kommandoen istioctl get egressrules:

Og til slutt, kjĂžrer vi kommandoen igjen wget â og ser at alt fungerer:

Tenk Äpent
Som du ser, lar Istio deg organisere interaksjonen med omverdenen. Med andre ord kan du fortsatt opprette OpenShift-tjenester og styre dem via Kubernetes, mens alt holdes i pod-er som skaleres opp og ned etter behov. Og samtidig kan du trygt henvende deg til eksterne tjenester relatert til ditt miljĂž. Ja, la oss igjen gjenta at alt dette kan gjĂžres uten Ă„ endre koden din.
Dette var det siste innlegget i serien om Istio. Fortsett Ă„ fĂžlge med oss â mange spennende ting ligger foran!
Kilde: habr.com
