Een reeks berichten op Istio Service Mesh

We starten een reeks berichten waarin enkele van de vele mogelijkheden van de Istio Service Mesh worden getoond in combinatie met Red Hat OpenShift en Kubernetes.

Een reeks berichten op Istio Service Mesh

Deel één, vandaag:

  • Laten we het concept van Kubernetes zijspancontainers uitleggen en het leidmotief van deze reeks berichten formuleren: "Je hoeft niets aan je code te veranderen".
  • Laten we het fundamentele van Istio introduceren: routeringsregels. Alle andere Istio-functies zijn daarop gebouwd, omdat het de regels zijn waarmee u verkeer naar microservices kunt leiden, met behulp van YAML-bestanden buiten de servicecode. We overwegen ook het Canary Deployment-inzetprogramma. Nieuwjaarsbonus – 10 interactieve lessen op Istio


Deel twee, dat binnenkort verschijnt, vertelt je:

  • Hoe Istio Pool Ejection implementeert in combinatie met Circuit Breaker en zal demonstreren hoe Istio u in staat stelt een dode of slecht presterende pod uit het balanceringscircuit te verwijderen.
  • We zullen ook kijken naar het onderwerp Circuit Breaker uit het eerste bericht om te zien hoe Istio hier kan worden gebruikt. We laten u zien hoe u verkeer kunt routeren en netwerkfouten kunt afhandelen met behulp van YAML-configuratiebestanden en terminalopdrachten zonder de kleinste wijzigingen in de servicecode.

Deel drie:

  • Een verhaal over tracering en monitoring, die al ingebouwd zijn of eenvoudig toegevoegd kunnen worden aan Istio. We laten u zien hoe u tools als Prometheus, Jaeger en Grafana kunt gebruiken in combinatie met OpenShift-schaling om microservice-architecturen moeiteloos te beheren.
  • We gaan van het monitoren en afhandelen van fouten naar het opzettelijk in het systeem introduceren ervan. Met andere woorden, we leren hoe we foutinjectie kunnen uitvoeren zonder de broncode te wijzigen, wat erg belangrijk is vanuit testoogpunt - aangezien als je de code zelf hiervoor wijzigt, het risico bestaat dat er extra fouten worden geïntroduceerd.

Tot slot, in het laatste bericht op Istio Service Mesh:

  • Laten we naar de Duistere Kant gaan. Om precies te zijn, we zullen leren het Dark Launch-schema te gebruiken, wanneer de code rechtstreeks op productiegegevens wordt geïmplementeerd en getest, maar op geen enkele manier de werking van het systeem beïnvloedt. Dit is waar het vermogen van Istio om verkeer te splitsen van pas komt. En de mogelijkheid om live productiegegevens te testen zonder de werking van het vechtsysteem op enigerlei wijze te beïnvloeden, is de meest overtuigende verificatiemethode.
  • Voortbouwend op Dark Launch laten we u zien hoe u het Canary Deployment-model kunt gebruiken om de risico's te verminderen en het gemakkelijker te maken om nieuwe code in productie te krijgen. Canary Deployment zelf is verre van nieuw, maar met Istio kunt u dit schema implementeren met slechts eenvoudige YAML-bestanden.
  • Ten slotte laten we u zien hoe u Istio Egress kunt gebruiken om toegang te geven tot services aan degenen die zich buiten uw clusters bevinden, zodat u de mogelijkheden van Istio kunt gebruiken bij het werken met internet.

Hier gaan we...

Istio-monitoring- en beheertools: alles wat u nodig hebt om microservices in een servicemesh te orkestreren servicegaas.

Wat is Istio Service Mesh

Een service mesh implementeert functies zoals verkeersmonitoring, toegangscontrole, detectie, beveiliging, fouttolerantie en andere nuttige dingen voor een groep services. Met Istio kunt u dit allemaal doen zonder de minste wijzigingen in de code van de services zelf. Wat is het geheim van magie? Aan elke dienst koppelt Istio een eigen proxy in de vorm van een zijspancontainer (zijspan is een zijspan van een motorfiets), waarna al het verkeer naar deze dienst via de proxy gaat, die aan de hand van gespecificeerd beleid bepaalt hoe, wanneer en of dit verkeer de dienst überhaupt zou moeten bereiken. Istio maakt het ook mogelijk om geavanceerde DevOps-technieken te implementeren, zoals canary-implementaties, stroomonderbrekers, foutinjectie en vele andere.

Hoe Istio werkt met containers en Kubernetes

De Istio-servicemesh is een zijspanimplementatie van alles wat nodig is om microservices te creëren en te beheren: monitoring, tracing, stroomonderbrekers, routing, load-balancing, foutinjectie, nieuwe pogingen, time-outs, mirroring, toegangscontrole, snelheidsbeperking en nog veel meer. En hoewel er tegenwoordig een heleboel bibliotheken zijn om deze functies rechtstreeks in code te implementeren, kun je met Istio allemaal dezelfde dingen krijgen zonder iets in je code te veranderen.

Volgens het zijspanmodel draait Istio in een Linux-container, die zich in één container bevindt Kubernetes-pod met een gecontroleerde service en injecteert en extraheert functionaliteit en informatie volgens de gegeven configuratie. We benadrukken dat dit uw eigen configuratie is en dat deze buiten uw code valt. Daarom wordt de code veel eenvoudiger en korter.

Belangrijk is ook dat de operationele component van microservices op geen enkele manier verbonden blijkt te zijn met de code zelf, waardoor de werking ervan veilig kan worden overgedragen aan IT-specialisten. Waarom zou de ontwikkelaar eigenlijk verantwoordelijk zijn voor stroomonderbrekers en foutinjectie? Reageren, ja, maar ze verwerken en creëren? Als je dit allemaal uit de code verwijdert, kunnen programmeurs zich volledig concentreren op de applicatiefunctionaliteit. En de code zelf zal korter en eenvoudiger worden.

Servicegaas

Istio, dat functies implementeert voor het beheren van microservices buiten hun code, is het concept van een Service Mesh. Met andere woorden, het is een gecoördineerde groep van een of meer binaire bestanden die een netwerk van netwerkfuncties vormen.

Hoe Istio werkt met microservices

Zo ziet het werk van zijspancontainers er in combinatie mee uit Kubernetes и Minidienst vogelperspectief: start een exemplaar van Minishift, maak een project voor Istio (laten we het “istio-systeem” noemen), installeer en voer alle Istio-gerelateerde componenten uit. Terwijl u vervolgens projecten en pods maakt, voegt u configuratiegegevens toe aan uw implementaties, en uw pods gaan Istio gebruiken. Een vereenvoudigd diagram ziet er als volgt uit:

Een reeks berichten op Istio Service Mesh

Nu kunt u de Istio-instellingen wijzigen om bijvoorbeeld foutinjectie en ondersteuning te organiseren Canarische inzet of andere Istio-functies - en dit alles zonder de code van de applicaties zelf aan te raken. Stel dat u al het webverkeer van gebruikers van uw grootste klant (Foo Corporation) wilt omleiden naar een nieuwe versie van de site. Om dit te doen, maakt u eenvoudigweg een Istio-routeringsregel die zoekt naar @foocorporation.com in de gebruikers-ID en dienovereenkomstig omleidt. Voor alle andere gebruikers verandert er niets. Ondertussen test je rustig de nieuwe versie van de site. En let op: je hoeft hiervoor helemaal geen ontwikkelaars in te schakelen.

En moet je daar duur voor betalen?

Helemaal niet. Istio is behoorlijk snel en is ingeschreven Go en creëert zeer weinig overhead. Bovendien wordt het mogelijke verlies aan online productiviteit gecompenseerd door een toename van de productiviteit van ontwikkelaars. In theorie tenminste: vergeet niet dat de tijd van ontwikkelaars waardevol is. Wat de softwarekosten betreft: Istio is open source-software, dus u kunt deze gratis verkrijgen en gebruiken.

Beheers het zelf

Het Red Hat Developer Experience Team heeft een diepgaande hands-on ontwikkeld руководство door Istio (in het Engels). Het draait op Linux, MacOS en Windows, en de code is beschikbaar in Java en Node.js.

10 interactieve lessen over Istio

Blok 1 - Voor beginners

Inleiding tot Istio
30 minuten
Laten we kennis maken met Service Mesh en leren hoe u Istio installeert in een OpenShift Kubernetes-cluster.
Post

Microservices implementeren in Istio
30 minuten
We gebruiken Istio om drie microservices te implementeren met Spring Boot en Vert.x.
Post

Blok 2 – gemiddeld niveau

Monitoring en tracing in Istio
60 minuten
We verkennen de ingebouwde monitoringtools van Istio, aangepaste statistieken en OpenTracing via Prometheus en Grafana.
Post

Eenvoudige routering in Istio
60 minuten
Leer hoe u routing in Istio kunt beheren met behulp van eenvoudige regels.
Post

Geavanceerde routeringsregels
60 minuten
Laten we eens kijken naar de slimme routing, toegangscontrole, load-balancing en snelheidsbeperking van Istio.
Post

Blok 3 – gevorderde gebruiker

Foutinjectie in Istio
60 minuten
We bestuderen scenario's voor het afhandelen van fouten in gedistribueerde applicaties, waardoor HTTP-fouten en netwerkvertragingen ontstaan, en leren hoe we chaos-engineering kunnen gebruiken om de omgeving te herstellen.
Post

Stroomonderbreker in Istio
30 minuten
We installeren Siege voor stresstestsites en leren hoe u backend-fouttolerantie kunt garanderen met behulp van herhalingen, stroomonderbrekers en pool-ejectie.
Post

Egress en Istio
10 minuten
We gebruiken uitgaande routes om regels te creëren voor de interactie van interne services met externe API's en services.
Post

Istio en Kiali
15 minuten
Leer Kiali gebruiken om een ​​overzicht te krijgen van de servicemesh en om verzoek- en gegevensstromen te verkennen.
Post

Wederzijdse TLS in Istio
15 minuten
We creëren Istio Gateway en VirtualService, daarna bestuderen we de wederzijdse TLS (mTLS) en de instellingen ervan in detail.
Post

Blok 3.1 - Deep Dive: Istio Service Mesh voor microservices

Een reeks berichten op Istio Service Mesh
Waar gaat het boek over:

  • Wat is een servicemesh?
  • Het Istio-systeem en zijn rol in de microservice-architectuur.
  • Istio gebruiken om de volgende problemen op te lossen:
    • Fouttolerantie;
    • Routering;
    • Chaostesten;
    • veiligheid;
    • Telemetrieverzameling met behulp van sporen, statistieken en Grafana.

Een boek downloaden

Serie artikelen over service meshes en Istio

Probeer het zelf

Deze reeks berichten is niet bedoeld om een ​​diepe duik in de wereld van Istio te bieden. We willen je gewoon kennis laten maken met het concept en je misschien inspireren om Istio zelf te proberen. Het is volledig gratis en Red Hat biedt alle tools die je nodig hebt om aan de slag te gaan met OpenShift, Kubernetes, Linux-containers en Istio, waaronder: Red Hat-ontwikkelaar OpenShift Containerplatform, onze gids voor Istio en andere bronnen op onze microsite op Service Mesh. Wacht niet langer en begin vandaag nog!

Istio-routeringsregels: serviceverzoeken sturen waar ze heen moeten

OpenShift и Kubernetes uitstekend werk verrichten in de aanpak microdiensten doorgestuurd naar de vereiste pods. Dit is een van de redenen voor het bestaan ​​van Kubernetes: routing en load-balancing. Maar wat als u subtielere en geavanceerdere routing nodig heeft? Bijvoorbeeld om twee versies van een microservice tegelijkertijd te gebruiken. Hoe kunnen Istio-routeregels hier helpen?

Routingregels zijn de regels die daadwerkelijk de routekeuze bepalen. Ongeacht de mate van systeemcomplexiteit blijft het algemene werkingsprincipe van deze regels eenvoudig: verzoeken worden gerouteerd op basis van bepaalde parameters en HTTP-headerwaarden.
Laten we naar voorbeelden kijken:

Kubernetes-standaard: triviaal "50/50"

In ons voorbeeld laten we zien hoe u tegelijkertijd twee versies van een microservice in OpenShift kunt gebruiken, laten we ze v1 en v2 noemen. Elke versie draait in zijn eigen Kubernetes-pod en voert standaard een gelijkmatig gebalanceerde round-robin-routering uit. Elke pod ontvangt zijn deel van de aanvragen op basis van het aantal microservice-instanties, met andere woorden, replica's. Met Istio kunt u dit saldo handmatig wijzigen.

Laten we zeggen dat we twee versies van onze aanbevelingsservice op OpenShift hebben geïmplementeerd: aanbeveling-v1 en aanbeveling-v2.
In afb. Figuur 1 laat zien dat wanneer elke service in één instantie wordt weergegeven, verzoeken gelijkmatig wisselen: 1-2-1-2-... Dit is hoe Kubernetes-routering standaard werkt:

Een reeks berichten op Istio Service Mesh

Gewogen verdeling tussen versies

In afb. Figuur 2 laat zien wat er gebeurt als u het aantal v2-servicereplica's verhoogt van één naar twee (dit wordt gedaan met de opdracht oc scale —replicas=2 deployment/recommendation-v2). Zoals u kunt zien, zijn verzoeken tussen v1 en v2 nu verdeeld in een verhouding van één op drie: 1-2-2-1-2-2-…:

Een reeks berichten op Istio Service Mesh

Negeer de versie met Istio

Istio maakt het gemakkelijk om de verdeling van verzoeken te veranderen op de manier die wij nodig hebben. Stuur bijvoorbeeld al het verkeer alleen naar aanbeveling-v1 met behulp van het volgende Istio yaml-bestand:

Een reeks berichten op Istio Service Mesh

Hier moet je op letten: peulen worden geselecteerd op basis van de labels. In ons voorbeeld wordt label v1 gebruikt. De parameter 'weight: 100' betekent dat 100% van het verkeer wordt doorgestuurd naar alle servicepods met het v1-label.

Richtlijnverdeling tussen versies (Canary-implementatie)

Vervolgens kunt u met behulp van de parameter gewicht verkeer naar beide peulen leiden, waarbij u het aantal microservice-instanties negeert dat in elk van deze wordt uitgevoerd. Hier sturen we bijvoorbeeld 90% van het verkeer naar v1 en 10% naar v2:

Een reeks berichten op Istio Service Mesh

Aparte routing voor mobiele gebruikers

Tot slot laten we zien hoe u mobiel gebruikersverkeer kunt dwingen om naar service v2 te worden gerouteerd, en alle anderen naar v1. Om dit te doen, gebruiken we reguliere expressies om de user-agentwaarde in de verzoekheader te analyseren:

Een reeks berichten op Istio Service Mesh

еперь аша очередь

Het voorbeeld met reguliere expressies voor het parseren van headers zou u moeten motiveren om uw eigen gebruik van Istio-routeringsregels te vinden. Bovendien zijn de mogelijkheden hier behoorlijk uitgebreid, omdat headerwaarden kunnen worden gevormd in de broncode van de applicatie.

En onthoud dat Ops, niet Dev

Alles wat we in de bovenstaande voorbeelden hebben laten zien, wordt gedaan zonder de kleinste wijzigingen in de broncode, behalve in die gevallen waarin het nodig is om headers voor speciale verzoeken te genereren. Istio zal nuttig zijn voor zowel ontwikkelaars, die het bijvoorbeeld in de testfase kunnen gebruiken, als voor specialisten in de werking van IT-systemen, voor wie het enorm zal helpen bij de productie.

Laten we dus het leidmotief van deze reeks berichten herhalen: Je hoeft niets aan je code te veranderen. Het is niet nodig om nieuwe images te bouwen of nieuwe containers te lanceren. Dit alles wordt buiten de code geïmplementeerd.

Gebruik je fantasie

Stelt u zich eens de mogelijkheden voor van headeranalyse met behulp van reguliere expressies. Wilt u uw grootste klant doorverwijzen naar een speciale versie van uw microservices? Gemakkelijk! Een aparte versie nodig voor de Chrome-browser? Geen probleem! U kunt verkeer volgens vrijwel elk kenmerk routeren.

Probeer het zelf

Lezen over Istio, Kubernetes en OpenShift is één ding, maar waarom zou je niet alles zelf aanraken? Team Red Hat-ontwikkelaarsprogramma heeft een gedetailleerde gids opgesteld (in het Engels) die u zal helpen deze technologieën zo snel mogelijk onder de knie te krijgen. De handleiding is bovendien 100% open source en bevindt zich dus in het publieke domein. Het bestand werkt op macOS, Linux en Windows, en de broncode is beschikbaar in Java- en node.js-versies (versies in andere talen binnenkort beschikbaar). Open gewoon de overeenkomstige git-repository in uw browser Red Hat-ontwikkelaarsdemo.

In de volgende post: we werken problemen prachtig uit

Vandaag heb je gezien wat Istio-routeringsregels kunnen doen. Stel je nu hetzelfde voor, maar alleen met betrekking tot foutafhandeling. Dit is precies waar we het in het volgende bericht over zullen hebben.

Bron: www.habr.com

Voeg een reactie