I huvudsak exponerar Kubernetes a backend-tjänst internt i klustret och fronten interagerar med den här tjänsten. Bälgen som erbjuder tjänsten kan mycket väl bytas ut och ingen märker någonting. Men i takt med att funktionerna i dina applikationer växer ökar också antalet tjänster du behöver behålla. Varje tjänst kan eventuellt prata med alla andra tjänster i klustret, och det resulterande nätverket kallas Service Mesh.
Det finns många tillägg för Kubernetes som hjälper oss att förenkla hanteringen av detta servicenät. Många nyckelfunktioner som TLS, automatiserad belastningsbalansering, säkring av API: er även i det interna nätverket, etc. erbjuds av dessa tillägg. Många alternativ som Istio, Linkerd och Conduit kan integreras med Kubernetes för att uppnå detta. Vi kommer att undersöka Istio i det här inlägget eftersom det är version 1.0 tillkännagavs nyligen.
Förutsättningar
För att komma igång med Istio behöver du ett fungerande kubernetes-kluster. Det finns tre sätt att få det.
- Du kan installera Minikube för att skapa ett enda nodkluster på din lokala dator.
- Eller om du använder Docker på Windows eller Mac kan du aktivera ett Kubernetes-kluster med en nod i Docker-inställningar.
- Eller så kan du använda onlinetjänster som Katacoda lekplats. Vi kommer att använda detta.
Varför använda ett servicenät?
Att installera ett servicenät, som Istio, gör det enkelt att arbeta med mikrotjänster. Under utvecklingen behöver du inte oroa dig för det faktum att din mikrotjänst skulle behöva erbjuda stöd för ömsesidig TLS, lastbalansering eller någon annan aspekt som serviceupptäckt. Med en idealisk servicenät kan du ansluta mikrotjänster, säkra dem från varandra och från omvärlden och hantera dem på ett organiserat sätt. Det hjälper både utvecklare och operatörer oerhört.
Installerar Istio
För att installera Istio krävs ett Kubernetes-kluster. Om du har ett enda nodkluster som du får med Minikube eller Docker på skrivbordet kan alla kommandon köras på din lokala nod. Men om du använder ett kluster med flera noder som det som Katacoda-lekplatsen erbjuder, kom ihåg att de flesta kommandon och inställningsprocedurer görs på masternoden. Ja, det påverkar hela klustret, men vi behöver bara interagera med masternoden.
Vi börjar med att klona (eller ladda ner) den senaste versionen av Istio från Github. Windows-användare kanske vill besöka den här sidan och få rätt .blixtlås fil.
$ curl -L https: // git.io / getLatestIstio | sh -$ cd istio-1.0.0
Repos namn kan förändras med tiden när nyare släpp kommer igenom, när detta skrivs 1.0.0 är den senaste stabila utgåvan. Denna repo innehåller inte bara serviceförlängningen utan också en exempelapp som heter BookInfo för experimentändamål. Manuset lägger också till den nya katalogen $ PWD / istio-1.0.0 / bin till din PATH-variabel.
Denna katalog innehåller istioctl binär som kan användas för att interagera med klustret. Windows-användare kan helt enkelt ringa den binära genom att gå till mappen istio-1.0.0 \ bin och ringer .\ istioctl med hjälp av powershell eller kommandotolken. Men det är ett valfritt tillägg.
Om du använder Mac kan du göra det med följande kommando:
$ export PATH = $ PWD / bin: $ PATHDärefter måste vi utöka vårt Kubernetes API med anpassade resursdefinitioner (CRD) som istio ger oss.
$ kubectl applicera -f install / kubernetes / helm / istio / mallar / crds.yamlDetta kan träda i kraft om några sekunder och när det är klart kommer din kube-apiserver att ha Istio-tillägg inbyggda i det. Härifrån varierar installationsalternativen beroende på om du använder detta för produktionsändamål eller om du experimenterar med det i din egen isolerade miljö.
Vi kommer att anta att det senare är fallet och installera istio utan TLS-autentisering.
$ kubectl applicera -f install / kubernetes / istio-demo.yamlDetta skapar ett nytt namnområde istio-system där alla olika komponenter som istio-pilot och ingress gateway kommer att installeras.
Applikationsdistribution och Istio Injector
Här kommer nyttan av Istio. Istio lägger till sidovagnsproxyer för dina tjänster, och detta görs utan att ändra den faktiska koden för din applikation. Om automatisk istio-sidovagnsspruta är aktiverad. Du kan märka ett namnutrymme med istio-injection = aktiverat och när din applikation distribueras i detta namnutrymme kommer podarna själva att ha specialiserade Envoy-behållare tillsammans med behållarna för kärnapplikationen. Låt oss till exempel märka standardnamnområdet
$ kubectl label namespace default istio-injection = aktiveratLåt oss nu distribuera exempel på BookInfo-appen i det här namnutrymmet. Från rotkatalogen till Isitio rep som vi klonade, kör:
$ kubectl applicera -f prover / bookinfo / plattform / kube / bookinfo.yamlDu kan lista alla pods som körs här:
$ kubectl få skidaVälj någon pod ur dem och se dess detaljer. Till exempel heter en av skivorna från BookInfo-appen i min distribution detaljer-v1-6865b9b99d-6mxx9
$ kubectl beskriv pods / details-v1-6865b9b99d-6mxx9I beskrivningen kommer du att märka att poden innehåller två behållare, den första är en del av den faktiska körningen av bildappen exempel-bokinfo-detaljer-v1: 1.8.0 och den andra är istio-proxy som kör bilden gcr.io / istio-release / proxyv2: 1.0.0 .
Istio erbjuder finkornig kontroll över ditt servicenät eftersom det injicerar dessa behållare ner till själva kapslarna där dina applikationer finns. Detta i kombination med lättanvänd TLS för kommunikation och finkornig trafikkontroll är en av många anledningar till varför stora applikationer kan dra nytta av ett servicenät som Istio.
Referenser
Den faktiska arkitekturen har många komponenter som Pilot, Citadel och Mixer, var och en med sin egen viktiga roll att utföra. Du kan lära dig mycket mer om dessa komponenter här och försöka distribuera din egen mikroservice här.