Eine Reihe von Beiträgen zu Istio Service Mesh

Wir starten eine Reihe von Beiträgen, die einige der vielen Funktionen des Istio Service Mesh in Kombination mit Red Hat OpenShift und Kubernetes demonstrieren.

Eine Reihe von Beiträgen zu Istio Service Mesh

Teil eins heute:

  • Lassen Sie uns das Konzept der Kubernetes-Sidecar-Container erklären und das Leitmotiv dieser Beitragsreihe formulieren: „Sie müssen nichts an Ihrem Code ändern“.
  • Stellen wir uns das Grundlegende von Istio vor: Routing-Regeln. Alle anderen Funktionen von Istio bauen darauf auf, da es die Regeln sind, die es Ihnen ermöglichen, den Datenverkehr mithilfe von YAML-Dateien außerhalb des Dienstcodes an Mikrodienste weiterzuleiten. Wir ziehen auch das Bereitstellungsschema Canary Deployment in Betracht. Neujahrsbonus – 10 interaktive Istio-Lektionen


Im zweiten Teil, der demnächst erscheint, erfahren Sie:

  • Wie Istio Pool Ejection in Verbindung mit Circuit Breaker implementiert und zeigt, wie Istio es Ihnen ermöglicht, einen inaktiven oder leistungsschwachen Pod aus dem Balance-Schema zu entfernen.
  • Wir werden uns auch mit dem Thema „Circuit Breaker“ aus dem ersten Beitrag befassen, wie Istio hier verwendet werden kann. Wir zeigen, wie Sie mithilfe von YAML-Konfigurationsdateien und Terminalbefehlen Datenverkehr weiterleiten und Netzwerkfehler ohne die geringste Änderung des Dienstcodes behandeln können.

Teil drei:

  • Eine Geschichte über die Nachverfolgung und Überwachung, die bereits in Istio integriert ist oder leicht zu Istio hinzugefügt werden kann. Wir zeigen Ihnen, wie Sie Tools wie Prometheus, Jaeger und Grafana in Verbindung mit OpenShift-Skalierung verwenden, um Ihre Microservice-Architektur mühelos zu verwalten.
  • Wir bewegen uns von der Überwachung und Behandlung von Fehlern hin zur gezielten Einschleusung von Fehlern in das System. Mit anderen Worten: Wir lernen, Fehler zu injizieren, ohne den Quellcode zu ändern, was aus Testsicht sehr wichtig ist – denn wenn Sie dafür den Code selbst ändern, besteht die Gefahr, dass zusätzliche Fehler entstehen.

Abschließend im letzten Beitrag zu Istio Service Mesh:

  • Gehen wir zur dunklen Seite. Genauer gesagt lernen wir, das Dark Launch-Schema zu verwenden, bei dem der Code direkt auf Produktionsdaten bereitgestellt und getestet wird, aber den Betrieb des Systems in keiner Weise beeinträchtigt. Hier erweist sich die Fähigkeit von Istio, den Datenverkehr aufzuteilen, als nützlich. Und die Möglichkeit, Tests an Live-Produktionsdaten durchzuführen, ohne den Betrieb des Kampfsystems in irgendeiner Weise zu beeinträchtigen, ist die überzeugendste Möglichkeit zur Überprüfung.
  • Aufbauend auf Dark Launch zeigen wir Ihnen, wie Sie das Canary-Bereitstellungsmodell verwenden, um Risiken zu reduzieren und die Bereitstellung von neuem Code zu vereinfachen. Canary Deployment selbst ist nicht neu, aber Istio ermöglicht Ihnen die Implementierung dieses Schemas mit nur einfachen YAML-Dateien.
  • Abschließend zeigen wir, wie Sie Istio Egress verwenden, um denjenigen, die sich außerhalb Ihrer Cluster befinden, Zugriff auf Dienste zu gewähren, um die Funktionen von Istio bei der Arbeit mit dem Internet zu nutzen.

Also, los geht’s…

Istio-Überwachungs- und Management-Toolkit – alles, was Sie zum Koordinieren von Microservices in einem Service Mesh benötigen Service-Mesh.

Was ist Istio Service Mesh?

Das Service Mesh implementiert für eine Gruppe von Diensten Funktionen wie Verkehrsüberwachung, Zugriffskontrolle, Erkennung, Sicherheit, Fehlertoleranz und andere nützliche Dinge. Mit Istio können Sie all dies tun, ohne die geringste Änderung am Code der Dienste selbst. Was ist das Geheimnis der Magie? Istio fügt jedem Dienst einen eigenen Proxy in Form eines Sidecar-Containers hinzu (Sidecar ist ein Motorrad-Sidecar). Anschließend läuft der gesamte Datenverkehr zu diesem Dienst über den Proxy, der anhand der angegebenen Richtlinien entscheidet, wie, wann und ob dies geschieht Der Verkehr sollte den Dienst überhaupt erreichen. Istio bietet Ihnen außerdem die Möglichkeit, erweiterte DevOps-Techniken wie Canary-Bereitstellungen, Leistungsschalter, Fehlerinjektion und mehr zu implementieren.

Wie Istio mit Containern und Kubernetes funktioniert

Das Istio-Service-Mesh ist eine Sidecar-Implementierung von allem, was Sie zum Erstellen und Verwalten von Microservices benötigen: Überwachung, Nachverfolgung, Leistungsschalter, Routing, Lastausgleich, Fehlerinjektion, Wiederholungsversuche, Zeitüberschreitungen, Spiegelung, Zugriffskontrolle, Ratenbegrenzung und mehr. Anderes. Und obwohl es heute unzählige Bibliotheken gibt, um diese Funktionen direkt im Code zu implementieren, können Sie mit Istio genau das Gleiche erreichen, ohne etwas an Ihrem Code zu ändern.

Nach dem Sidecar-Modell läuft Istio in einem Linux-Container, der sich in einem befindet Kubernetes-pod mit einem kontrollierten Dienst und implementiert (inject) und extrahiert (extract) Funktionalität und Informationen entsprechend der gegebenen Konfiguration. Wir betonen, dass dies Ihre eigene Konfiguration ist und außerhalb Ihres Codes liegt. Daher wird der Code viel einfacher und kürzer.

Noch wichtiger ist, dass die operative Komponente von Microservices in keiner Weise mit dem Code selbst verbunden ist, was bedeutet, dass ihr Betrieb sicher auf IT-Spezialisten übertragen werden kann. Warum sollte ein Entwickler tatsächlich für Leistungsschalter und Fehlerinjektion verantwortlich sein? Reagieren ja, aber verarbeiten und erschaffen? Wenn Sie all dies aus dem Code entfernen, können sich Programmierer voll und ganz auf die Anwendungsfunktionalität konzentrieren. Und der Code selbst wird kürzer und einfacher.

Service-Gitter

Istio, das die Verwaltungsfunktionen von Microservices außerhalb ihres Codes implementiert – das ist das Konzept des Service Mesh. Mit anderen Worten handelt es sich um eine koordinierte Gruppe einer oder mehrerer Binärdateien, die ein Raster von Netzwerkfunktionen bilden.

Wie Istio mit Microservices funktioniert

So funktionieren Sidecar-Container in Verbindung mit Kubernetes и Minischicht Vogelperspektive: Starten Sie eine Minishift-Instanz, erstellen Sie ein Istio-Projekt (nennen wir es „istio-system“), installieren Sie alle Istio-bezogenen Komponenten und führen Sie sie aus. Fügen Sie dann beim Erstellen von Projekten und Pods Konfigurationsinformationen zu Ihren Bereitstellungen hinzu, und Ihre Pods beginnen mit der Verwendung von Istio. Ein vereinfachtes Diagramm sieht so aus:

Eine Reihe von Beiträgen zu Istio Service Mesh

Jetzt können Sie die Istio-Einstellungen ändern, um beispielsweise die Fehlerinjektion und den Support zu organisieren Canary-Bereitstellung oder andere Funktionen von Istio – und das alles, ohne den Code der Anwendungen selbst anzutasten. Nehmen wir an, Sie möchten den gesamten Webverkehr von Benutzern Ihres größten Kunden (Foo Corporation) auf eine neue Version Ihrer Website umleiten. Sie müssen lediglich eine Istio-Routing-Regel erstellen, die in der Benutzer-ID nach @foocorporation.com sucht und entsprechend umleitet. Für alle anderen Benutzer ändert sich nichts. In der Zwischenzeit testen Sie in aller Ruhe die neue Version der Website. Und beachten Sie, dass es hierfür absolut nicht notwendig ist, Entwickler einzubeziehen.

Und wie viel muss man dafür bezahlen?

Gar nicht. Istio ist ziemlich schnell, es ist eingeschrieben Go und erzeugt einen sehr geringen Overhead. Darüber hinaus wird ein möglicher Verlust der Online-Produktivität durch eine Steigerung der Entwicklerproduktivität ausgeglichen. Zumindest theoretisch: Vergessen Sie nicht, dass die Zeit der Entwickler wertvoll ist. Was die Softwarekosten betrifft, handelt es sich bei Istio um eine Open-Source-Software, deren Erwerb und Nutzung also kostenlos ist.

Meistere es selbst

Das Red Hat Developer Experience Team hat ein ausführliches Hands-on entwickelt руководство von Istio (auf Englisch). Es läuft unter Linux, MacOS und Windows und der Code ist in den Varianten Java und Node.js erhältlich.

10 interaktive Istio-Lektionen

Block 1 – Für Anfänger

Einführung in Istio
30 Minuten
Wir machen uns mit Service Mesh vertraut und erfahren, wie man Istio im Kubernetes OpenShift-Cluster installiert.
Post

Bereitstellung von Microservices in Istio
30 Minuten
Wir verwenden Istio, um drei Microservices mit Spring Boot und Vert.x bereitzustellen.
Post

Block 2 – Mittelstufe

Überwachung und Rückverfolgung in Istio
60 Minuten
Entdecken Sie die integrierten Überwachungstools, benutzerdefinierten Metriken und OpenTracing von Istio über Prometheus und Grafana.
Post

Einfaches Routing in Istio
60 Minuten
Erfahren Sie, wie Sie das Routing in Istio mithilfe einfacher Regeln steuern.
Post

Erweiterte Routing-Regeln
60 Minuten
Wir machen uns mit intelligentem Routing in Istio, Zugriffskontrolle, Lastausgleich und Ratenbegrenzung vertraut.
Post

Block 3 – Fortgeschrittener Benutzer

Fehlerinjektion in Istio
60 Minuten
Wir untersuchen Szenarien zur Fehlerbehandlung in verteilten Anwendungen, die Entstehung von HTTP-Fehlern und Netzwerkverzögerungen und lernen, wie man Chaos Engineering zur Wiederherstellung der Umgebung anwendet.
Post

Leistungsschalter in Istio
30 Minuten
Wir installieren Siege für Stressteststandorte und lernen, wie Sie mithilfe von Wiederholungsversuchen, Leistungsschaltern und Pool-Auswurf die Backend-Fehlertoleranz sicherstellen.
Post

Egress und Istio
10 Minuten
Wir verwenden Egress-Routen, um Regeln für die Interaktion interner Dienste mit externen APIs und Diensten zu erstellen.
Post

Istio und Kiali
15 Minuten
Erfahren Sie, wie Sie Kiali nutzen, um sich einen Überblick über das Service-Mesh zu verschaffen und den Fluss von Anfragen und Daten zu untersuchen.
Post

Gegenseitiges TLS in Istio
15 Minuten
Wir erstellen Istio Gateway und VirtualService und untersuchen dann gegenseitiges TLS (mTLS) und seine Einstellungen im Detail.
Post

Kasten 3.1 – Tiefer Einblick: Istio Service Mesh für Microservices

Eine Reihe von Beiträgen zu Istio Service Mesh
Worum geht es in dem Buch:

  • Was ist ein Service-Mesh?
  • Istio-System und seine Rolle in der Microservice-Architektur.
  • Verwendung von Istio für die folgenden Aufgaben:
    • Fehlertoleranz;
    • Routing;
    • Chaostest;
    • Sicherheit;
    • Erfassung von Telemetriedaten mithilfe von Tracing, Metriken und Grafana.

Um ein Buch herunterzuladen

Artikelserie zu Service Meshes und Istio

Probieren Sie es aus

Diese Beitragsreihe soll keinen tiefen Einblick in die Welt von Istio bieten. Wir möchten Ihnen lediglich das Konzept selbst vorstellen und Sie vielleicht dazu inspirieren, Istio selbst auszuprobieren. Es ist völlig kostenlos und Red Hat bietet alle Tools, die Sie für den Einstieg in OpenShift, Kubernetes, Linux-Container und Istio benötigen, darunter: Red Hat-Entwickler OpenShift Container Platform, Unser Reiseführer für Istio und andere Ressourcen auf unserer Service-Mesh-Mikrosite. Zögern Sie nicht, fangen Sie noch heute an!

Istio-Routing-Regeln: Leiten von Serviceanfragen an die richtige Stelle

OpenShift и Kubernetes sind hervorragend im Umgang Mikrodienste an die erforderlichen Pods weitergeleitet. Dies ist einer der Zwecke der Existenz von Kubernetes – Routing und Lastausgleich. Was aber, wenn Sie ein subtileres und anspruchsvolleres Routing benötigen? Beispielsweise um zwei Versionen eines Microservices gleichzeitig zu nutzen. Wie können Istio Route Rules hier helfen?

Routing-Regeln sind die Regeln, die tatsächlich die Wahl der Route festlegen. Unabhängig von der Komplexität des Systems bleibt das allgemeine Prinzip dieser Regeln einfach: Anfragen werden basierend auf bestimmten Parametern und HTTP-Header-Werten weitergeleitet.
Schauen wir uns Beispiele an:

Kubernetes-Standard: Trivial „50/50“

In unserem Beispiel zeigen wir, wie man zwei Versionen eines Microservices in OpenShift gleichzeitig nutzt, nennen wir sie v1 und v2. Jede Version läuft in einem eigenen Kubernetes-Pod, und hier funktioniert standardmäßig ein gleichmäßig ausgewogenes Round-Robin-Routing. Jeder Pod erhält seinen Anteil an Anfragen entsprechend der Anzahl seiner Microservice-Instanzen, also Replikate. Mit Istio können Sie dieses Guthaben manuell ändern.

Nehmen wir an, wir haben zwei Versionen unseres Empfehlungsdienstes, Recommendation-v1 und Recommendation-v2, auf OpenShift bereitgestellt.
Auf Abb. Abbildung 1 zeigt, dass, wenn jeder Dienst in einer einzelnen Instanz dargestellt wird, die Anforderungen gleichmäßig zwischen ihnen verschachtelt sind: 1-2-1-2-… So funktioniert das Kubernetes-Routing standardmäßig:

Eine Reihe von Beiträgen zu Istio Service Mesh

Gewichtete Verteilung zwischen Versionen

Auf Abb. Abbildung 2 zeigt, was passiert, wenn Sie die Anzahl der v2-Dienstreplikate von eins auf zwei erhöhen (dies erfolgt mit dem Befehl oc scale --replicas=2 Deployment/Recommendation-v2). Wie Sie sehen können, werden Anfragen zwischen v1 und v2 jetzt in einer Eins-zu-Drei-Beziehung aufgeteilt: 1-2-2-1-2-2-…:

Eine Reihe von Beiträgen zu Istio Service Mesh

Version mit Istio ignorieren

Istio macht es einfach, die Verteilung von Anfragen nach Bedarf zu ändern. Senden Sie beispielsweise den gesamten Datenverkehr nur an Empfehlung-v1 mit der folgenden Istio-YAML-Datei:

Eine Reihe von Beiträgen zu Istio Service Mesh

Hier ist darauf zu achten: Die Schoten werden nach Etiketten ausgewählt. In unserem Beispiel wird die Bezeichnung v1 verwendet. Der Parameter „weight: 100“ bedeutet, dass 100 % des Datenverkehrs an alle Service-Pods weitergeleitet werden, die das v1-Label haben.

Direktivenverteilung zwischen Versionen (Canary Deployment)

Darüber hinaus können Sie mithilfe des Gewichtungsparameters den Datenverkehr an beide Pods leiten und dabei die Anzahl der in jedem Pod ausgeführten Microservice-Instanzen ignorieren. Hier leiten wir beispielsweise direkt 90 % des Datenverkehrs an v1 und 10 % an v2 weiter:

Eine Reihe von Beiträgen zu Istio Service Mesh

Separates mobiles Benutzerrouting

Abschließend zeigen wir, wie man erzwingt, dass der Datenverkehr mobiler Benutzer an den v2-Dienst und alle anderen Benutzer an v1 weitergeleitet wird. Dazu verwenden wir reguläre Ausdrücke, um den User-Agent-Wert im Anforderungsheader zu analysieren:

Eine Reihe von Beiträgen zu Istio Service Mesh

Jetzt du

Das Regex-Beispiel zum Parsen von Headern soll Sie dazu motivieren, Ihre eigenen Möglichkeiten zur Anwendung der Routing-Regeln von Istio zu erkunden. Darüber hinaus sind die Möglichkeiten hier sehr umfangreich, da die Header-Werte im Quellcode von Anwendungen gebildet werden können.

Und denken Sie daran: Ops, nicht Dev

Alles, was wir in den obigen Beispielen gezeigt haben, wird ohne die geringste Änderung am Quellcode durchgeführt, außer in den Fällen, in denen die Bildung spezieller Anforderungsheader erforderlich ist. Istio wird sowohl für Entwickler nützlich sein, die es beispielsweise in der Testphase verwenden können, als auch für IT-Systembetreiber, denen es in der Produktion eine große Hilfe sein wird.

Wiederholen wir also das Thema dieser Beitragsreihe: Sie müssen nichts an Ihrem Code ändern. Es ist nicht erforderlich, neue Images zu erstellen oder neue Container auszuführen. All dies wird außerhalb des Codes implementiert.

Schalten Sie Ihre Fantasie ein

Stellen Sie sich nur die Aussichten vor, Schlagzeilen mit regulären Ausdrücken zu analysieren. Möchten Sie Ihren größten Kunden auf eine spezielle Version Ihres weiterleiten? Mikrodienste? Leicht! Benötigen Sie eine separate Version für den Chrome-Browser? Kein Problem! Sie können den Verkehr nach nahezu jedem Merkmal leiten.

Probieren Sie es aus

Über Istio, Kubernetes und OpenShift zu lesen ist eine Sache, aber warum nicht alles selbst anfassen? Team Red Hat-Entwicklerprogramm Wir haben einen ausführlichen Leitfaden (auf Englisch) erstellt, der Ihnen dabei hilft, diese Technologien so schnell wie möglich zu beherrschen. Der Leitfaden ist außerdem zu 100 % Open Source, also gemeinfrei. Die Datei funktioniert unter macOS, Linux und Windows und der Quellcode ist in den Versionen Java und node.js verfügbar (weitere Sprachen folgen in Kürze). Öffnen Sie einfach das entsprechende Git-Repository in Ihrem Browser Red Hat Developer-Demo.

Im nächsten Beitrag: Probleme schön lösen

Heute haben Sie gesehen, was Istio-Routing-Regeln bewirken können. Stellen Sie sich nun das Gleiche vor, aber nur in Bezug auf die Fehlerbehandlung. Genau darauf werden wir im nächsten Beitrag eingehen.

Source: habr.com

Kommentar hinzufügen