Erfahren Sie hier, wie Googles Open Source Projekt "Istio" es geschafft hat, die Komplexität des Managements derjenigen Netzwerke zu erobern, die dazu verwendet werden, Mikrosercives miteinander zu verbinden. [...]
Microservice-Architekturen lösen zwar so manche Probleme, sie verursachen sie aber auch. Das Aufteilen von Anwendungen in unabhängige Dienste/Services vereinfacht ihre Entwicklung, Aktualisierung und Skalierung. Gleichzeitig bietet es Ihnen viel mehr bewegliche Teile zum Verbinden und Sichern. Die Verwaltung aller Netzwerkdienste – Load Balancing, Traffic Management, Authentifizierung und Authorisierung etc. – kann unglaublich komplex werden.
Der vernetzte Raum zwischen den einzelnen Diensten in Ihrem Kubernetes-Clusternennt sich „Service Mesh“. Das Google-Projekt „Istio“ bietet Ihnen die Möglichkeit, das Service-Mesh Ihres Clusters zu verwalten, noch bevor es sich zu einem unlösbaren Knäuel entwickelt.
Was ist ein Service-Mesh?
Für jede Gruppe vernetzter Anwendungen gibt es eine Reihe allgemeiner Verhaltensweisen, die dazu neigen, um sie herum in Erscheinung zu treten. Load Balancing, beispielsweise: Es gibt nur wenige Fälle, in denen eine Gruppe von Netzwerkdiensten dies nicht benötigt. Ebenso können Sie A/B-Tests für unterschiedliche Kombinationen von Diensten durchführen oder eine End-to-End-Authentifizierung über Serviceketten hinweg einrichten. Diese Verhaltensweisen zusammen werden kollektiv als „Service-Mesh“ bezeichnet.
Die Verwaltung des Service-Mesh sollte nicht den Services selbst überlassen werden. Keiner von ihnen befindet sich in der richtigenPosition dazu, um top-down zu agieren, und es sollte von vorneherein sowieso nicht ihre Aufgabe sein. Besser wäre es, ein separates System zu haben, das irgendwo zwischen den Diensten und dem Netzwerk, mit dem sie kommunizieren, situiert ist. Dieses System würde zwei Schlüsselfunktionen bereitstellen:
- Es verhindert, dass sich die Services selbst mit der Verwaltung des Netzwerkverkehrs wie Load Balancing, Routing, Retries usw. befassen müssen.
- Es stellt eine Abstraktionsebene für Administratoren bereit, über die auf einfache Weise Entscheidungen in Bezug auf den Netzwerkverkehr im Clustergetroffen werden können (Richtliniensteuerung, Metriken und Protokollierung, Service Discovery, sichere Kommunikation zwischen den Diensten über TLS usw.).
Istio Service Mesh-Komponenten
Istio arbeitet als Service-Mesh, indem es zwei grundlegende Architekturkomponenten für Ihren Cluster bereitstellt: eine Datenebene und eine Steuerebene.
Die Datenebene wickelt den Netzwerkverkehr zwischen den Diensten im Mesh ab. Der gesamte Datenverkehr wird von einem Netzwerk-Proxy-System abgefangen und umgeleitet. In Istios Fall wird der Proxy von einem Open Source-Projekt namens Envoy bereitgestellt. Eine zweite Komponente auf der Datenebene, der sog. Mixer, erfasst Telemetrie und Statistiken von Envoy sowie den Verkehr zwischen einzelnen Diensten.
Die Steuerebene, das Herzstück von Istio, verwaltet und sichert die Datenebene. Sie konfiguriert sowohl die Envoy-Proxys als auch die Mixer, die die Netzwerkrichtlinien für diese Dienste erzwingen, z.B. wer mit wem wann kommunizieren soll. Die Steuerebene bietet auch eine programmatische Abstraktionsschicht für die Datenebene und alle ihre Verhaltensweisen.
Drei weitere Dienstleistungen von Istio runden den Mix ab:
Istio Pilot
Istio Pilot übernimmt die Regeln für das Traffic Management, die von der Steuerebene vorgegeben werden, und konvertiert sie in von Envoy angewendete Konfigurationen, je nachdem, wie diese Dinge lokal verwaltet werden. Pilot wird es Istio ermöglichen, mit verschiedenen Orchestrierungssystemen neben Kubernetes zu arbeiten, sich dabei jedoch konsistent zu verhalten.
Istio Citadel
Citadel steuert die Authentifizierung und das Identitätsmanagement zwischen Diensten.
Istio Galley
Galley verwendet vom Benutzer angegebene Konfigurationen für Istio und konvertiert sie in gültige Konfigurationen für die anderen Komponenten der Steuerungsebene. Dies ist ein weiteres Element, das es Istio ermöglicht, verschiedene Orchestrierungssysteme transparent zu verwenden.
Istio Service Mesh-Funktionen
Der erste und wertvollste Vorteil, den Istio bietet, ist die Abstraktion – ein Weg, um es mit den Komplexitäten eines Servicenetzes aufzunehmen. Durch die Steuerung mit Istio können Sie programmatische Änderungen am Mesh vornehmen. Dienste, die mit dem Mesh verbunden sind, müssen nicht von innen umprogrammiert werden, um neuen Netzwerkrichtlinien oder Quoten zu folgen, und die Netzwerkräume zwischen ihnen müssen sich nicht direkt berühren.
Darüber hinaus können Sie mit Istio die Netzwerkkonfiguration des Clusters schadenfrei oder vorläufig ändern. Wenn Sie ein neues Netzwerklayout ganz oder teilweise einführen möchten oder die aktuelle Konfiguration mit einer neuen A/B-Methode testen möchten, können Sie dies bei Istio top-down durchführen. Sie können diese Änderungen auch rückgängig machen, wenn sie sich als fehlerhaft herausstellen.
Ein dritter Vorteil ist die Beobachtbarkeit. Istio bietet detaillierte Statistiken und Berichte über die Vorgänge zwischen Containern und Clusterknoten. Wenn es ein unvorhergesehenes Problem gibt, etwa, wenn etwas nicht den Richtlinien entspricht oder wenn Änderungen, die Sie vorgenommen haben, kontraproduktiv sind, erfahren Sie dies über Kurz oder Lang.
Istio bietet auch die Möglichkeit, gängige Muster zu erfüllen, die Sie an einem Service Mesh beobachten können. Ein Beispiel wäre das Circuit-Breaker Pattern, mit dem verhindert werden kann, dass ein Dienst mit Anforderungen bombardiert wird, wenn das Back-End Probleme meldet und die Anforderungen so nicht rechtzeitig erfüllen kann. Istio bietet ein Circuit-Breaker Pattern als Teil seiner Standardbibliothek zur Durchsetzung von Richtlinien.
Während Istio mit Kubernetes am direktesten und intensivsten arbeitet, ist es darauf ausgelegt plattformunabhängig zu funktionieren. Istio arbeitet mit den gleichen offenen Standards, auf die auch Kubernetes selbst angewiesen ist. Dadurch kann auch Istio auf einzelnen Systemen oder auf anderen Orchestrierungssystemen wie Mesos und Nomad eigenständig arbeiten.
Was sind die ersten Schritte?
Wenn Sie bereits Erfahrung mit Kubernetes haben, ist dies eine gute Möglichkeit, auch den Umgang mit Istio zu lernen, indem Sie einen Kubernetes-Cluster nehmen – nicht einen, der sich bereits in der Produktion befindet! – und dann Istio mithilfe eines Helm-Diagramms darauf installieren. Anschließend können Sie eine Beispielanwendung bereitstellen, die gängige Istio-Funktionen wie intelligentes Traffic Management und Telemetrie demonstrieren kann. Dies sollte Ihnen einige grundlegende Erfahrungen mit Istio vermitteln, bevor Sie es für den Service-Mesh-Dienst in Ihrem Anwendungscluster bereitstellen.
Red Hat, das im Rahmen des von Kubernetes betriebenen OpenShift-Projekts des Unternehmens in Istio investiert hat, bietet Tutorials, die Sie durch die gängigen Istio-Implementierungs- und -Managementszenarien führen werden.
*Serdar Yegulalp ist Senior Writer bei InfoWorld.
Be the first to comment