Unter Nutzung von Ksniff, Wireshark und Discovery Selector 9 Tipps für den Betrieb des Service-Meshes Istio
Anbieter zum Thema
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.

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.yaml
kubectl 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.
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 - <<EOF
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
spec:
# You may override parts of meshconfig by uncommenting the following lines.
meshConfig:
discoverySelectors:
- matchLabels:
istio-discovery: enabled
EOF
kubectl 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)