Unter Nutzung von Ksniff, Wireshark und Discovery Selector 9 Tipps für den Betrieb des Service-Meshes Istio

Autor / Redakteur: Thomas Joos* / Ulrike Ostler

In diesem Beitrag gibt der Autor einige Tipps, die den Betrieb von Istio in produktiven Umgebungen verbessern oder die Verwaltung vereinfachen können. Dazu gehören eine effektive Überwachung der Pods und deren Netzwerkaktivitäten.

Firmen zum Thema

Voll vermascht: Das Open-Source-Tool „Istio“ von der Open Infrstructure Foundation (urpsrünglich OpenStack Foundation) ermöglicht das. Thomas Joos gibt ein paar Tipps zur Handhabung.
Voll vermascht: Das Open-Source-Tool „Istio“ von der Open Infrstructure Foundation (urpsrünglich OpenStack Foundation) ermöglicht das. Thomas Joos gibt ein paar Tipps zur Handhabung.
(Bild: Richard Revel auf Pixabay)

Dieser Beitrag gibt verschiedene Tipps, mit denen ein Service-Mesh besser mit Kubernetes zusammenarbeiten und die Microservices/Container wesentlich stabiler und schneller laufen; anders gesagt: Es geht um den Betrieb von Istio als Service-Mesh in Kubernetes.

Die Installation von Istio in aller Kürze

Die grundsätzliche Installation von Istio auf einem Kubernetes-Cluster ist nicht sehr kompliziert. Der Download der aktuellen Version erfolgt mit:

curl -L https://istio.io/downloadIstio | sh -

Danach erfolgt ein Wechsel in das Verzeichnis, zum Beispiel mit:

cd istio-1.10.2

Danach muss das bin-Directory zum Pfad in Linux hinzugefügt werden. Der Pfad ist im Terminal zu sehen. Der Befehl zum Hinzufügen sieht zum Beispiel folgendermaßen aus:

export PATH=$PWD/bin:$PATH

Danach erfolgt die Installation mit:

istioctl install --set profile=demo -y

Das Bereitstellen von einer Beispielanwendung

Für die Einarbeitung in Istio oder dem Testen von Einstellungen, kann es sinnvoll sein, die Testanwendungen von Istio in Kubernetes zu integrieren. Die Installation der Anwendungen und deren anschließender Anzeige erfolgt mit den Befehlen:

kubectl apply -f sample/bookinfo/platform/kube/bookinfo.yamlkubectl get services

Das Aktivieren von Istio für einen Namensraum das Prüfen der Synchronisierung

Um Istio für einen Namensraum in Kubernetes mit einem schnellen Befehl zu aktivieren, lässt sich folgender Befehl nutzen:

Kubectl label namesapce my-namespace istio-injection=enabled

Ob die Pods erfolgreich synchronisiert sind, zeigt wiederum der folgende Befehl an:

istioctl proxy-status

Das Überwachen des Datenverkehrs von Pods: Fehlersuche und Optimierung

Mit dem Kubectl-Plugin ksniffist es zusammen mit Wireshark möglich den Datenverkehr möglich den Datenverkehr auf den verschiedenen Pods aufzuzeichnen und anschließend zu analysieren. Die beiden Tools sind Open Source, genauso wie Istio.

Durch die Kombination von ksniff und Wireshark lässt sich die Netzwerkaktivität zwischen den Pods und damit den einzelnen Microservices genau analysieren. Das hilft nicht nur bei der Optimierung der Umgebung, sondern auch bei der Fehlersuche.

Dazu nutzt ksniff kubectl, um ein tcpdump-Binary in den überwachten Pod zu integrieren. Die Ausgabe des Binaries leitet ksniff an die Wireshark-Instanz des Admins um. Die Installation kann über krew erfolgen:

kubectl krew install sniff

Die Vorgehensweise zum sniffen zeigen die ksniff-Entwickler auf ihrer Projektseite.

Das Überprüfen von Pod Networking in Envoy

Seit Version 1.10 schickt „Envoy“ die Daten zu „eth0“, nicht mehr zu „lo“. Her kann es passieren, dass auf einigen Pods Änderungen notwendig sind. Ob das der Fall ist, kann mit dem folgenden Befehl überprüft werden:

istioctl experimental precheck

Die notwendigen Konfigurationen und Fehler behandeln die Entwickler auf der Seite „LocalhostListener (IST0143)“.

Istio, ab Version 1.10.2, nutzen in großen Installationen: Discovery Selectors

In neueren Versionen des zweiten Halbjahres haben die Entwickler von Istio Funktionen integriert, die vor allem für große Umgebungen interessant sind. Mit „Discovery Selectors“ lassen sich Ressourcen im Cluster bündeln, die Istio verwalten/überwachen soll. Standardmäßig überwacht Istio alle Kubernetes-Ressourcen aus allen Namespaces im Cluster. Das ist in großen Clustern natürlich selten sinnvoll.

Istio lässt sich mit Istioctl im Linux-Terminal konfigurieren.
Istio lässt sich mit Istioctl im Linux-Terminal konfigurieren.
(Bild: Thomas Joos)

Damit die Istio-Controlplane nur Ressourcen fest definierten Namespaces verarbeitet, haben die Entwickler mit der Version 1.10 in Istio die Discovery Selectors eingeführt. Die neue Option „discoverySelectors“ in MeshConfig bietet ein Array von Kubernetes-Selektoren ist.

Hier lassen sich Namespaces explizit ein- oder ausschließen. Das bietet wiederum flexible Steuermöglichkeiten. Die Konfiguration sieht zum Beispiel folgendermaßen aus:

istioctl install --skip-confirmation -f - <<EOFapiVersion: install.istio.io/v1alpha1kind: IstioOperatormetadata:namespace: istio-systemspec:# You may override parts of meshconfig by uncommenting the following lines.meshConfig: discoverySelectors: - matchLabels: istio-discovery: enabledEOFkubectl label namespace default istio-discovery=enabled

Das Schließen der kritischen Sicherheitslücke ISTIO-SECURITY-2021-007

Mit Version 1.10.2 schließen die Entwickler außerdem die Sicherheitslücke „ISTIO-SECURITY-2021-007“. Dabei ist es Angreifern aus der Ferne möglich auf Anmeldenamen zuzugreifen, die in den Feldern „Gateway“ und „DestinationRule credentialName“ gespeichert sind. Die Lücke ist in allen Versionen von Istio, bis hin zu 1.10.1 enthalten. Die Aktualiserung zu 1.10.2 schließt diese Lücke.

Istioctl-Version abfragen, Kubernetes-Integration prüfen

Generell sollte die gleiche Version von Istioctl zum Einsatz kommen, wie bei der Control Plane. Die installierte Version ist mit dem folgenden Befehl zu sehen:

istioctl version --remote=false

Ob Isitio im Cluster erfolgreich installiert ist, kann mit dem folgenden Befehl überprüft werden:

istioctl verify-install

Erscheint eine Fehlermeldung sollte die Installation wiederholt werden. Die Authentifizierung lässt sich wiederum mit dem folgenden Befehl überprüfen:

Istioctl autn tls-check my-pod

Kiali - Service Mesh Management for Istio

Bei „Kiali“ handelt es sich um eine Verwaltungsoberfläche für Istio. Mit Kiali lassen sich zum Beispiel die Fragen „Welche Microservices sind Teil meines Istio-Dienstnetzes?“ und „Wie sind sie verbunden?“ beantworten.

Die Lösung bietet Dashboards und verschiedene Einsichten in das Mesh. Auch die Struktur und der Traffic lassen sich mit den Dashboards überwachen. Dazu gehören auch Metriken und Validierungen. Kiali arbeitet außerdem mit Grafaga und Jaeger zusammen. Die Installation kann über kubectl mit dem folgenden Befehl erfolgen:

kubectl apply -f ${ISTIO_HOME}/samples/addons/kiali.yaml

Die Dashboards lassen sich wiederum mit istioctl aufrufen:

istioctl dashboard kiali

(ID:47562958)