Alle 11 Minuten verliebt sich ein Microservice in Linkerd

Alle Microservices im Blick dank Metriken und Dashboards

Eines der wichtigsten Features eines Service-Meshes sind das flächendeckende Erheben von Metriken zu den Zuständen und Netzwerkaktivitäten von Microservices. Dazu gehören:

  • Anzahl der Anfragen
  • Erfolgsrate der Anfragen (anhand des HTTP Status Codes)
  • Zusammensetzung der Antwortzeiten bei verschachtelten Aufrufen

Linkerd erfasst diese und weitere Metriken standardmäßig für jeden Service. Durch sogenannte Service Profiles können Anwender Metriken auch pro Endpunkt erzeugen. Linkerd verwendet das Monitoring-Werkzeug Prometheus für das Sammeln der Metriken und enthält eine vorkonfigurierte Instanz von Grafana mit vorkonfigurierten Dashboards. Einen Überblick über die laufende Anwendung verschafft das Linkerd Dashboard. Es bereitet erfasste Metriken beispielsweise visuell durch Abhängigkeitsgraphen auf.

Das Linkerd-Dashboard gibt einen Überblick über die laufende Microservice-Anwendung (Abb. 4)

Mit der Funktion Linkerd Tap können Entwickler den aktuellen Netzwerkverkehr beobachten. Das kann ein hilfreiches Werkzeug bei der Bekämpfung von Fehlern sein. Anwender können Linkerd Tap sowohl über die Linkerd-Oberfläche als auch über das CLI nutzen.

Mit Linkerd Tap können Entwickler den Live-Netzwerkverkehr einsehen (Abb. 5)

Routing unter Kontrolle: Von Load Balancing bis Canary Deployment

Da jeglicher ein- und ausgehende Netzwerkverkehr durch den Linkerd Service-Proxy geroutet wird, können Anwender das Load Balancing zwischen zwei Services mit Linkerd effizienter implementieren als bei Standard-Kubernetes-Services. Statt Round-Robin, also simples Durchrotieren durch alle Pods eines Services, nutzt Linkerd für HTTP, HTTP/2 und gRPC den EWMA-Algorithmus (exponentially weighted moving average), wodurch sich die Latenz von Anfragen verringern kann.

Linkerd implementiert bereits die TrafficSplit API des Kubernetes Service-Mesh Interfaces. Sie ermöglicht es, Netzwerkverkehr, der für einen Service bestimmt ist, anteilig an einen anderen Service zu schicken, beispielsweise an eine neue Version des Services. Das kann man für Rolling, Canary oder Blue/Green Deployments benutzen.

In Kombination mit weiteren Tools wie Flagger kann man ein Canary Deployment automatisch durchführen. Flagger rollt neue Versionen schrittweise aus und verifiziert sie durch Prometheus-Metriken. Nur wenn sich die neue Version entsprechend der definierten Parameter verhält, wird sie weiter ausgerollt. Da Flagger Prometheus-Querys direkt unterstützt, können anspruchsvolle Canary Deployments definiert werden. Mit Flagger und Linkerd können Entwickler ebenso A/B-Tests auf Basis von Headern durchführen.

Gewappnet gegen Ausfälle mit Retry und Timeout

Microservices müssen jederzeit mit Netzwerkproblemen oder defekten Kommunikationspartnern rechnen. Wichtig ist, dass das Gesamtsystem trotz Ausfällen einzelner Microservices lauffähig bleibt und Endnutzer möglichst wenig Beeinträchtigung erfahren. Eine Maßnahme, die zumindest die Auswirkungen von kurzfristigen Netzwerkausfällen entschärft, ist das erneute Versuchen von fehlschlagenden Netzwerkanfragen, sogenannte Retries.

Retries können allerdings dazu führen, dass ein überlastetes System durch wiederholte Anfragen endgültig in die Knie gezwungen wird. Außerdem ist per se nicht jede Anfrage wiederholbar, etwa das Absenden einer Bestellung. Retries müssen also mit Bedacht konfiguriert werden. Linkerd kann das Retry-Verhalten losgelöst von der Applikation und für jeden HTTP-Endpunkt einzeln konfigurieren.

Entwickler können Timeouts nutzen, um dem Problem kaskadierender Retries zwischen Microservices beizukommen. Linkerd kann für jeden Endpunkt eine solche maximale Antwortzeit konfigurieren.

mTLS: Vertrauen ist gut, Automatisierung ist besser

Um Sicherheit und Vertrauen innerhalb des Clusters zu garantieren, setzt Linkerd, genau wie andere Service-Meshes, auf mTLS (mutual TLS authentication). Die Sicherheit wird über die Verschlüsselung mittels TLS garantiert. Anders als bei normalen TLS-Verbindungen wie https, überprüft nicht nur der Client die Identität des Serverzertifikats, sondern der Server überprüft zusätzlich das Zertifikat, das der Client mitschickt. Das Vertrauen ist gegenseitig (mutual) garantiert.

Wenn Microservices in einem Service-Mesh wie Linkerd miteinander kommunizieren, geschieht das immer über die Service-Proxys, die eine sichere mTLS-Verbindung auf- und abbauen können. Linkerd automatisiert das Ausstellen der Zertifikate und kann deshalb die Gültigkeit auf 24 Stunden reduzieren. Das ist ein erheblicher Sicherheitsfortschritt im Vergleich zu unverschlüsselter Kommunikation, einfachem TLS oder mTLS mit langlebigen Zertifikaten. Wie andere Service-Meshes setzt Linkerd mTLS vollständig automatisch um, sodass allein dieses Feature ein Grund für den Einsatz eines Service-Mesh sein kann.