Was ist ein Service Mesh?
Ein Service-Mesh ist eine dedizierte Infrastrukturebene wie das Open-Source-Projekt Istio, die steuert, wie verschiedene Teile einer verteilten Anwendung Daten miteinander austauschen, ohne dies in den Code der Anwendung einzubauen. Genauer gesagt, steuern Service-Meshes die Kommunikation zwischen den Diensten in einer Microservices-Architektur, um einen Lastausgleich durchzuführen, Dienstanforderungen an andere Dienste zu übermitteln, Daten zu verschlüsseln und andere Dienste zu entdecken.
Ein Dienstnetz besteht aus einer Datenebene und einer Steuerungsebene. Die Datenebene besteht aus intelligenten Proxies, die für die Steuerung der gesamten Kommunikation zwischen den Diensten verantwortlich sind. Die Steuerungsebene hingegen fungiert als Gehirn des Netzes und steuert die Proxies. Oder einfach ausgedrückt: Die Datenebene leitet Daten weiter, während die Steuerungsebene steuert, wie diese Daten weitergeleitet werden.
Vorteile eines Servicenetzes
Service Meshes ermöglichen es Unternehmen, verteilte Anwendungen in großem Umfang bereitzustellen. Das Service Mesh vereinfacht Service-to-Service-basierte Netzwerkoperationen wie Verkehrsmanagement, Lastausgleich, Auditing, Autorisierung und Beobachtbarkeit. Zu den Vorteilen von Service Mesh gehören:
Bessere Dienstverwaltung: Mit Service Mesh wird der Aufwand für die Entwickler reduziert, da die Netzwerkbetreiber die Netzwerke für alle ihre Dienste einheitlich verwalten können.
Erhöhte Sicherheit der Dienste: Die Betreiber von Netzwerksicherheitssystemen können auf einfache Weise dienstübergreifende Sicherheit einschließlich Authentifizierung, Autorisierung und Verschlüsselung implementieren.
Verbesserte Anwendungsleistung: Mithilfe von Service Mesh können Entwicklungsteams Best Practices implementieren und erhalten tiefe Einblicke in ihre Dienste. Die Teams können verbesserungswürdige Bereiche identifizieren und sich auf Bemühungen zur Leistungssteigerung konzentrieren.
Verwalteter Datenverkehr: Mit Service Mesh haben Unternehmen die Kontrolle über den Datenverkehr mit umfangreichen Routing-Regeln, Fault Injection, verfeinerten Richtlinien und vielem mehr.
Vereinfachter Lastausgleich: Die Proxys in der Datenebene arbeiten an der Skalierung und dem Lastausgleich, damit die Anwendungen nicht ausfallen. Die Proxys kommunizieren miteinander, ohne die Dienste einzubeziehen, die genügend Platz für die Skalierung bieten.
Einfache Bereitstellung mit Kubernetes und VMs: Service Mesh bietet Netzwerkkontrolle und -transparenz für herkömmliche und moderne Workloads, die sowohl in virtuellen Maschinen als auch in Containern ausgeführt werden.
Wie funktioniert ein Servicenetz?
Das Service Mesh ermöglicht den schnellen, zuverlässigen und sicheren Aufruf zwischen Services in Microservices-Architekturen. Unternehmen können Microservices mit Hilfe eines Service Mesh skalierbar ausführen und erhalten:
- Ein flexibleres Freigabeverfahren
- Verfügbarkeit und Widerstandsfähigkeit
- Sichere Kommunikation
Noch wichtiger ist, dass es sich nicht um ein Netz von "Diensten" handelt, sondern um ein Netz von "Proxies", an die sich Dienste anschließen können, wodurch das Netz vom Anwendungscode abstrahiert wird.
Werfen wir einen genaueren Blick auf Istio, eines der am häufigsten eingesetzten Service-Meshes: Istio ist ein Kubernetes-natives Mesh, das den leistungsstarken Proxy Envoy verwendet, der den gesamten ein- und ausgehenden Dienstverkehr kontrolliert. Es verwendet auch eine einfache Jaeger-Benutzeroberfläche zur Visualisierung und Speicherung von Traces, um Microservices zu debuggen.
Die Datenebene von Istio umfasst Proxys, auch Sidecars genannt, die die gesamte Kommunikation zwischen den Microservices steuern und Telemetriedaten über den gesamten Datenverkehr zwischen den Services im Mesh erzeugen.
Die Steuerungsebene steuert den Datenverkehr durch die Verwaltung und Konfiguration von Proxys auf der Grundlage der für die jeweilige Anwendung im Netz festgelegten Richtlinien.
Die Proxys sind in jedem Dienst als Sidecar enthalten, über den die Dienste kommunizieren. Anstatt die Dienste direkt aufzurufen, ruft jeder von ihnen sein lokales Sidecar auf, das die Anfragen im Namen der Dienste verwaltet. Dies ermöglicht es, die Komplexität der Dienstkommunikation in eine Infrastrukturebene zu verlagern, die sie in großem Umfang lösen kann.
Service-Mesh-Architektur
Ein Dienstnetz besteht aus zwei Hauptkomponenten, einer Datenebene und einer Steuerungsebene.
Datenebene: Die Datenebene besteht in der Regel aus einer Reihe von Proxies, die auch als Sidecars bezeichnet werden. Diese Proxys sind für die Vermittlung und Kontrolle der gesamten Netzwerkkommunikation zwischen Microservices zuständig. Darüber hinaus sammeln die Proxys Telemetriedaten über den gesamten Netzverkehr und melden diese. Die wichtigsten Merkmale der Datenebene:
- Er erstellt Richtlinien und Konfigurationen, indem er mit Proxys kommuniziert.
- Es visualisiert das gesamte Netzwerkverhalten.
- Es bietet eine API für kontinuierliche Integration und Bereitstellung.
Steuerungsebene: Die Steuerebene ist für die Verwaltung und Konfiguration der Proxys zur Weiterleitung des Datenverkehrs zuständig. Hier sind einige weitere Merkmale der Steuerebene:
- Es dient der Verwaltung von Konfigurationen und der Verbesserung der Leistung bei der Datenweiterleitung.
- Funktionen der Steuerebene, wie die Teilnahme an Routing-Protokollen, werden im architektonischen Steuerelement ausgeführt.
- Sie kann leicht eingesetzt werden, da sie für die Anwendung transparent ist.
Open-Source-Dienst Mesh
Es gibt mehrere Open-Source-Dienstnetze, aber die beliebtesten und am weitesten verbreiteten sind eindeutig Linkerd und Istio.
Seit 2021 ist Linkerd ein graduiertes Projekt der Cloud Native Computing Foundation mit über 200 Mitwirkenden und über 10.000 Sternen auf Github. Der Fokus von Linkerd liegt auf Einfachheit, Sicherheit und Leistung und eignet sich besonders für hochkomplexe und groß angelegte Kubernetes-Installationen.
Istio ist das griechische Wort für "Segel". Es wurde ursprünglich von Teams von Google und IBM in Zusammenarbeit mit dem Envoy-Team von Lyft entwickelt. Genau wie Linkerd tragen mehr als 200 Mitwirkende zum Dienstnetz bei. Istio ist plattformunabhängig und steht als Open Source unter der Apache 2.0 License.
Warum die Microservices-Architektur ein Service-Netz braucht
Die Grundidee der Microservice-Architektur besteht darin, eine einzelne Anwendung in eine Reihe von vielen lose gekoppelten Diensten, den so genannten Microservices, aufzuteilen. Da diese verteilten Anwendungen immer komplexer werden, steigen die Anfragen zwischen diesen Diensten exponentiell an und erfordern ausgefeiltere Routing-Fähigkeiten, um den Datenfluss zwischen den Diensten zu optimieren und die hohe Leistung der Anwendung zu gewährleisten.
Service-Meshes ermöglichen den schnellen, zuverlässigen und sicheren Aufruf zwischen Services in Microservices-Architekturen. Unternehmen können Microservices mithilfe eines Service Meshes in großem Umfang ausführen und erhalten:
- Ein flexibleres Freigabeverfahren
- Verfügbarkeit und Widerstandsfähigkeit
- Sichere Kommunikation
Was ist Istio?
Istio ist eines der beliebtesten Dienstnetze für verteilte Architekturen. Es ermöglicht Entwicklern, Anwendungen mit lose gekoppelten Microservices zusammenzustellen, um die Portabilität in der Cloud zu gewährleisten. Darüber hinaus ermöglicht Istio DevOps-Teams die Verwaltung der neuen Cloud Native Apps in hybriden und Multi-Cloud-Umgebungen.
Istio ist ein quelloffenes und Kubernetes-natives Service-Mesh zur Automatisierung der Netzwerkfunktionen von verteilten und containerisierten Anwendungen. Es bietet eine einheitliche und effizientere Möglichkeit, Dienste zu sichern, zu verbinden und zu überwachen. Darüber hinaus unterstützt das Istio-Service-Mesh auch die Art und Weise, wie diese Dienste kommunizieren und Daten austauschen. Kurz gesagt: Istio ist der Weg zu effizienterem und standardisiertem Lastausgleich, Service-to-Service-Authentifizierung und Überwachung mit wenigen oder gar keinen Änderungen am Servicecode.
Warum Istio verwenden?
Istio ermöglicht es Unternehmen, ihre verteilten nativen Cloud-Anwendungen zu sichern, zu verbinden und zu überwachen, so dass Unternehmen ihre Dienste sicher und problemlos modernisieren und migrieren können. Von der Verwaltung des Datenverkehrs zwischen den Diensten bis zur Durchsetzung von Zugriffsrichtlinien - Istio Service Mesh erledigt all das, ohne dass Änderungen am Anwendungscode erforderlich sind. Es reduziert auch die Komplexität der Bereitstellung, indem es transparent auf bestehende verteilte Anwendungen aufgesetzt wird.
Zu den wichtigsten Merkmalen von Istio gehören:
Verkehrsmanagement: Istio verwendet Routing-Regeln, um den Fluss des Datenverkehrs und der API-Aufrufe zu steuern. Dies verbessert die Zuverlässigkeit der Anrufe und die Ausfallsicherheit des Netzwerks.
Sicherheit: Mit Istio können Unternehmen Richtlinien konsistent über mehrere Protokolle und Laufzeiten hinweg mit nur wenigen Anwendungsänderungen durchsetzen. Die Verwendung von Istio mit Kubernetes-Netzwerkrichtlinien bietet beispielsweise den Vorteil, dass die Kommunikation von Pod zu Pod oder von Service zu Service auf Netzwerk- und Anwendungsebene in einem Cluster mit TLS-Verschlüsselung, Autorisierung und robuster identitätsbasierter Authentifizierung gesichert wird.
Beobachtbarkeit: Die Tracing-, Logging- und Überwachungsfunktionen von Istio helfen Ihnen, Einblicke in Ihre Service-Mesh-Bereitstellung zu erhalten. Durch eine konsistente Überwachung können Unternehmen berücksichtigen, wie die Serviceaktivität die vor- und nachgelagerte Leistung beeinflusst. Darüber hinaus bieten benutzerdefinierte Dashboards einen hervorragenden Einblick in die Leistung aller Dienste.
Ausbaufähigkeit: Istio ist für die Erweiterung konzipiert und kann verschiedene Bereitstellungsanforderungen erfüllen. Die Steuerungsebene von Istio läuft auf Kubernetes und enthält eine Vielzahl von Elementen. Entwicklungsteams können Anwendungen, die in diesem Cluster bereitgestellt werden, dem Netz hinzufügen, es auf andere Cluster erweitern oder sogar VMs oder andere Knoten verbinden, die außerhalb von Kubernetes laufen.
Wie man Istio implementiert
Die Implementierung eines Service Mesh in Ihrem Unternehmen umfasst die Einrichtung der Komponenten der Steuerebene, die Vorbereitung der Datenebene durch die Einbindung von Envoy-Proxys als Sidecars in jede Service-Instanz und deren Verbindung mit der Steuerebene. DevOps-Teams können dann ganz einfach das Verhalten des Service Mesh von der Kontrollebene aus konfigurieren, indem sie Richtlinien verwenden. Natürlich hängt die Implementierung von Service Mesh von der gewählten Plattform ab, die jedoch die genauen Schritte bestimmt.
Die Implementierung des Istio Service Mesh wird durch die Kombination von Komponenten der Steuerebene und ausführbaren Dateien der Datenebene vereinfacht, so dass diese nicht mehr einzeln bereitgestellt werden müssen.
Bei der Installation von Istio auf Kubernetes stehen zwei Modi für die Datenebene zur Verfügung: der traditionelle Modus mit Sidecars und der Ambient-Modus ohne Sidecars. Im traditionellen Modus ist es einfacher, die Entitäten der Datenebene zu erstellen, da das Proxy-Sidecar automatisch zusammen mit jedem bezeichneten Dienst bereitgestellt werden kann. Der Proxy wird manuell zusammen mit jedem Dienst installiert und bei der Steuerungsebene auf der virtuellen Maschine registriert. Richtlinien werden verwendet, um das Verhalten des Dienstnetzes zu konfigurieren und die gewünschten Ergebnisse für die Anwendungsschicht zu erzielen.
Der Ambient-Modus wurde für vereinfachte Abläufe, Anwendungskompatibilität und eine geringere Ressourcennutzung im Cluster entwickelt. Er bietet einfach einen gemeinsam genutzten ztunnel-Agenten, der auf jedem Knoten im Kubernetes-Cluster läuft und als sicheres Overlay dient, das das Routing und die Zero-Trust-Sicherheit des Datenverkehrs übernimmt. Bei Bedarf können Sie die Verarbeitung auf Anwendungsebene pro Namespace aktivieren, um durch den Einsatz von Waypoint-Proxys Zugriff auf die gesamte Bandbreite der Istio-Funktionen zu erhalten.