Kubernetes Service Mesh

Kubernetes Service Mesh
Kubernetes har mange ressurstyper som hjelper deg å abstrahere ideen om tjenester eller mikroservices. For eksempel, hvis appens frontend ønsker å samhandle med backend, trenger den ikke bry seg om hvilken pod den leter etter, eller ikke engang hvilken IP -adresse den håper at en backend pod vil okkupere. Pods blir utsatt via en tjeneste. (Hvis du er ny på Kubernetes, anbefaler jeg dette innlegget for å bedre forstå hva pods er sammen med andre viktige konsepter.)

I hovedsak utsetter Kubernetes en Backend Service Internt innenfor klyngen og front-end samhandler med denne tjenesten. Pods som tilbyr tjenesten kan veldig godt byttes ut, og ingen vil merke noe. Men etter hvert som funksjonene i applikasjonene dine vokser, vokser også antallet tjenester du trenger å vedlikeholde. Hver tjeneste kan potensielt snakke med alle andre tjenester i klyngen, og det resulterende nettverket kalles som Service Mesh.

Det er mange tillegg for Kubernetes for å hjelpe oss med å forenkle styringen av dette tjenestemasken. Mange nøklerfunksjoner som TLS, automatisert belastningsbalansering, sikring av API -er selv på det interne nettverket osv. Tilbes av disse tilleggene. Mange alternativer som Istio, Linkerd og Conduit kan integreres med Kubernetes for å oppnå dette. Vi vil se inn i Istio i dette innlegget siden det er versjon 1.0 ble nylig kunngjort.

Forutsetninger

For å komme i gang med Istio, trenger du en fungerende Kubernetes -klynge. Det er tre måter å få det til.

  1. Du kan installere Minikube for å lage en enkelt node -klynge på din lokale maskin.
  2. Eller, hvis du bruker Docker på Windows eller Mac, kan du aktivere en enkeltknute Kubernetes-klynge i Docker-innstillinger.
  3. Eller du kan bruke online tjenester som Katacoda lekeplass. Vi vil bruke dette.

Hvorfor bruke et servicemasker?

Å installere et servicemasker, som Istio gjør det enkelt å jobbe med mikroservices. Mens du utvikler deg, trenger du ikke å bekymre deg for det faktum at mikroservicen din må tilby støtte for gjensidig TL -er, belastningsbalansering eller andre aspekter som tjenesteoppdagelse. Et ideelt servicemasker lar deg koble til mikroservices, sikre dem fra hverandre og fra omverdenen og administrere dem på en organisert måte. Det hjelper både utviklerne og operatørene enormt.

Installere ISTIO

Installere Istio krever å ha en Kubernetes -klynge. Hvis du har en enkelt node -klynge som du får med Minikube eller Docker på skrivebordet, kan alle kommandoene kjøres på din lokale node. Imidlertid, hvis du bruker en klynge med flere noder som den som Katacoda Playground tilbyr, må du huske at de fleste av kommandoene og konfigurer prosedyrer blir gjort på masternoden. Ja, det påvirker hele klyngen, men vi må samhandle utelukkende med masternoden.

Vi begynner med kloning (eller laster ned) den siste utgivelsen av Istio fra Github. Windows -brukere vil kanskje besøke denne siden og få passende .glidelås fil.

$ curl -l https: // git.io/getLatestistio | sh -
$ CD ISTIO-1.0.0

Repos navn kan endre seg over tid når nyere utgivelse kommer gjennom, på dette tidspunktet 1.0.0 er den siste stabile utgivelsen. Denne repoen inneholder ikke bare servicemasutvidelsen, men også en prøveapp som heter BookInfo for eksperimenteringsmessige formål. Skriptet legger også til den nye katalogen $ PWD/ISTIO-1.0.0/bin til din banevariabel.

Denne katalogen inneholder Istioctl binær som kan brukes til å samhandle med klyngen. Windows -brukere kan ganske enkelt ringe binæren ved å gå til mappen istio-1.0.0 \ bin og ringe .\ Istioctl Bruke PowerShell eller ledetekst. Men det er et valgfritt tillegg.

Hvis du bruker Mac, kan du gjøre det ved å bruke følgende kommando:

$ Eksportbane = $ pwd/bin: $ bane

Neste må vi utvide Kubernetes API med tilpassede ressursdefinisjoner (CRDS) som Istio gir oss.

$ KUBECTL Apply -f Install/Kubernetes/Helm/Istio/Maler/CRDS.Yaml

Dette kan tre i kraft om noen sekunder, og når det først er gjort, vil Kube-Apisererver ha Istio-utvidelser innebygd i den. Herfra og videre varierer installasjonsalternativene avhengig av om du bruker dette til produksjonsformål, eller om du eksperimenterer med det i ditt eget isolerte miljø.

Vi kommer til å anta at sistnevnte er tilfelle, og installere ISTIO uten TLS -godkjenning.

$ KUBECTL Apply -f Install/Kubernetes/Istio -Demo.Yaml

Dette vil skape et nytt navneområde ISTIO-System der alle de forskjellige komponentene som Istio-Pilot og Ingress Gateway vil bli installert.

Applikasjonsdistribusjon og ISTIO -injektor

Her kommer nytten av Istio. ISTIO legger til sidevirkningsproxy til tjenestene dine, og dette gjøres uten å endre den faktiske koden for søknaden din. Hvis automatisk istio-sidcar-injektor er aktivert. Du kan merke et navneområde med ISTIO-Injeksjon = aktivert, og når applikasjonen din er distribuert på dette navneområdet, vil Pods i seg selv ha spesialiserte utsendingsbeholdere sammen med containerne for kjerneprogrammet. La oss for eksempel merke standardnavnområdet

$ KUBECTL LABEL NAMESPACE Standard ISTIO-Injeksjon = aktivert

La oss nå distribuere eksemplet BookInfo -appen i dette navneområdet. Fra rotkatalogen til Isitio Rep som vi klonet, kjører:

$ KUBECTL Apply -F -prøver/BookInfo/Platform/Kube/BookInfo.Yaml

Du kan liste opp alle belgene som kjører her:

$ kubectl få pods

Velg hvilken som helst pod ut av dem og se dens detaljer. For eksempel heter en av podene fra BookInfo-appen i distribusjonen min detaljer-V1-6865B9B99D-6MXX9

$ kubectl beskriver pods/detaljer-v1-6865b9b99d-6mxx9

I beskrivelsen vil du legge merke til at poden inneholder to containere, først er en komponent i selve kjøringen av Image-appen Eksempler-BookInfo-Details-V1: 1.8.0 og det andre er istio-proxy som kjører bildet GCR.io/istio-release/proxyv2: 1.0.0 .

ISTIO tilbyr finkornet kontroll over servicemasken din fordi det injiserer disse beholderne ned til selve belgene der applikasjonene dine er bosatt. Dette kombinert med brukervennlig TLS for kommunikasjon og finkornet trafikkontroll er en av de mange grunnene til at store applikasjoner kan dra nytte av et servicemas som Istio.

Referanser

Selve arkitekturen har mange komponenter som pilot, citadell og mikser hver med sin egen viktige rolle å utføre. Du kan lære mye mer om disse komponentene her og prøve å distribuere din egen mikroservice her.