In wezen onthult Kubernetes een backend-service intern binnen het cluster en de front-end communiceert met deze service. De pods die de service bieden, kunnen heel goed worden vervangen en niemand zou iets merken. Maar naarmate de functies in uw applicaties groeien, groeit ook het aantal services dat u moet onderhouden. Elke service kan mogelijk met elke andere service in het cluster praten, en het resulterende netwerk wordt aangeduid als Servicenetwerk.
Er zijn veel add-ons voor Kubernetes om ons te helpen het beheer van deze Service Mesh te vereenvoudigen. Veel belangrijke functies zoals TLS, geautomatiseerde taakverdeling, het beveiligen van API's, zelfs op het interne netwerk, enz. Worden aangeboden door deze add-ons. Veel opties zoals Istio, Linkerd en Conduit kunnen worden geïntegreerd met Kubernetes om dit te bereiken. We zullen Istio in dit bericht onderzoeken omdat het versie 1 is.0 is onlangs aangekondigd.
Vereisten
Om met Istio aan de slag te gaan, hebt u een werkend kubernetes-cluster nodig. Er zijn drie manieren om dat te krijgen.
- U kunt Minikube installeren om een cluster met één knooppunt op uw lokale computer te maken.
- Of, als u Docker op Windows of Mac gebruikt, kunt u een Kubernetes-cluster met één knooppunt inschakelen in de Docker-instellingen.
- Of u kunt gebruikmaken van online services zoals Katacoda-speeltuin. Dit gaan we gebruiken.
Waarom een Service Mesh gebruiken??
Het installeren van een servicemesh, zoals Istio, maakt het werken met microservices eenvoudig. Tijdens het ontwikkelen hoeft u zich geen zorgen te maken over het feit dat uw microservice ondersteuning zou moeten bieden voor wederzijdse TLS, load balancing of enig ander aspect zoals service discovery. Met een ideaal Service Mesh koppel je microservices aan elkaar, beveilig je ze van elkaar en van de buitenwereld en beheer je ze op een georganiseerde manier. Het helpt zowel de ontwikkelaars als de operators enorm.
Istio installeren
Voor het installeren van Istio is een Kubernetes-cluster vereist. Als u een cluster met één knooppunt hebt, zoals u krijgt met Minikube of Docker op Desktop, kunnen alle opdrachten op uw lokale knooppunt worden uitgevoerd. Als u echter een cluster met meerdere knooppunten gebruikt, zoals het cluster dat Katacoda-speeltuin biedt, moet u er rekening mee houden dat de meeste opdrachten en installatieprocedures worden uitgevoerd op het hoofdknooppunt. Ja, het heeft invloed op het hele cluster, maar we hoeven alleen te communiceren met het hoofdknooppunt.
We beginnen met het klonen (of downloaden) van de nieuwste versie van Istio van Github. Windows-gebruikers willen misschien deze pagina bezoeken en de juiste downloaden .zip het dossier.
$ curl -L https://git.io/getLatestIstio | sh -$ cd istio-1.0.0
De naam van de repo kan in de loop van de tijd veranderen als er een nieuwere release uitkomt, op het moment van schrijven.0.0 is de nieuwste stabiele release. Deze repo bevat niet alleen de service mesh-extensie, maar ook een voorbeeld-app met de naam BookInfo voor experimentele doeleinden. Het script voegt ook de nieuwe directory $PWD/istio-1 toe.0.0/bin naar uw PATH-variabele.
Deze map bevat: istioctl binair dat kan worden gebruikt om met het cluster te communiceren. Windows-gebruikers kunnen eenvoudig het binaire bestand oproepen door naar de map te gaan istio-1.0.0\bin en bellen .\istioctl powershell of opdrachtprompt gebruiken. Maar het is een optionele add-on.
Als u Mac gebruikt, kunt u dat doen met de volgende opdracht:
$ export PATH=$PWD/bin:$PATHVervolgens moeten we onze Kubernetes API uitbreiden met Custom Resource Definitions (CRD's) die istio ons biedt.
$ kubectl apply -f install/kubernetes/helm/istio/templates/crds.yamlDit kan binnen een paar seconden van kracht worden en als het eenmaal is voltooid, heeft uw kube-apiserver Istio-extensies ingebouwd. Vanaf hier variëren de installatie-opties, afhankelijk van of u dit voor productiedoeleinden gebruikt of dat u ermee experimenteert in uw eigen geïsoleerde omgeving.
We gaan ervan uit dat het laatste het geval is en installeren istio zonder TLS-authenticatie.
$ kubectl apply -f install/kubernetes/istio-demo.yamlDit zal een nieuw naamruimte istio-systeem creëren waar alle verschillende componenten zoals istio-pilot en ingress gateway zullen worden geïnstalleerd.
Toepassingsimplementatie en Istio-injector
Hier komt het nut van Istio. Istio voegt sidecar-proxy's toe aan uw services, en dit wordt gedaan zonder de daadwerkelijke code van uw applicatie te wijzigen. Als automatische istio-zijspan-injector is ingeschakeld. U kunt een naamruimte labelen met istio-injection=enabled en wanneer uw toepassing op deze naamruimte wordt geïmplementeerd, hebben de pods zelf gespecialiseerde Envoy-containers samen met de containers voor de kerntoepassing. Laten we bijvoorbeeld de standaardnaamruimte een label geven
$ kubectl label naamruimte standaard istio-injection=enabledLaten we nu de voorbeeld-app BookInfo in deze naamruimte implementeren. Voer vanuit de hoofdmap van de Isitio-rep die we hebben gekloond het volgende uit:
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yamlU kunt hier een lijst maken van alle pods die worden uitgevoerd:
$ kubectl krijg podsKies een van de pods en bekijk de details ervan. Een van de pods van de BookInfo-app in mijn implementatie heet bijvoorbeeld details-v1-6865b9b99d-6mxx9
$ kubectl beschrijven pods/details-v1-6865b9b99d-6mxx9In de beschrijving zult u merken dat de pod twee containers bevat, de eerste is een onderdeel van het daadwerkelijk uitvoeren van de afbeelding app-voorbeelden-bookinfo-details-v1:1.8.0 en de tweede is de istio-proxy die de afbeelding uitvoert gcr.io/istio-release/proxyv2:1.0.0 .
Istio biedt fijnmazige controle over uw service-mesh omdat het deze containers injecteert tot in de pods waar uw applicaties zich bevinden. Dit gecombineerd met gebruiksvriendelijke TLS voor communicatie en fijnmazige verkeerscontrole is een van de vele redenen waarom grote applicaties kunnen profiteren van een servicemesh zoals Istio.
Referenties
De eigenlijke architectuur heeft veel componenten zoals Pilot, Citadel en Mixer, elk met zijn eigen belangrijke rol om uit te voeren. U kunt hier veel meer leren over deze componenten en proberen uw eigen microservice hier te implementeren.