Einführung in Istio
Einführung in das verwaltete Istio-Add-on in IBM Cloud® Kubernetes Service. Mit der folgenden Reihe von Schritten stellen Sie die Beispielapp 'BookInfo' bereit, um die Verwendung verschiedener Istio-Servicenetzfunktionen kennenzulernen.
Bevor Sie beginnen, überprüfen Sie das Änderungsprotokoll des Istio-Add-ons auf Versionsinformationen.
Schritt 1: Istio-Add-on aktivieren
Richten Sie das verwaltete Istio-Add-on in Ihrem Cluster ein.
-
Aktivieren Sie das
istio
-Add-on.ibmcloud ks cluster addon enable istio --cluster <cluster_name_or_ID>
-
Vergewissern Sie sich, dass das verwaltete Istio-Add-on einsatzbereit ist (also den Status
Addon Ready
aufweist). Es kann einige Minuten dauern, bis das Add-on bereit ist.ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
Beispielausgabe
Name Version Health State Health Status istio 1.23 normal Addon Ready
-
Sie können auch die einzelnen Komponenten des Add-ons prüfen, um sicherzustellen, dass die Istio-Pods bereitgestellt werden.
kubectl get pods -n istio-system
kubectl get svc -n istio-system
Weitere Informationen zu Istio in IBM Cloud Kubernetes Service finden Sie unter Informationen zum verwalteten Istio-Add-on.
Schritt 2: Beispielapp 'BookInfo' einrichten
Die Beispielanwendung "BookInfo" enthält eine grundlegende Istio-Konfiguration, sodass Sie die Funktionalität von Istio sofort ausprobieren können.
Die vier BookInfo-Microservices sind folgende:
productpage
ruft die Microservicesdetails
undreviews
auf, um die Seite mit Daten zu füllen.details
enthält Buchinformationen.ratings
enthält Informationen zur Bewertung eines Buchs, die eine Buchrezension begleiten.reviews
enthält Buchrezensionen und ruft den Microserviceratings
auf. Der Microservicereviews
hat mehrere Versionen:v1
ruft den Microserviceratings
nicht auf.v2
ruft den Microserviceratings
auf und zeigt eine Bewertung in Form von 1 bis 5 schwarzen Sternen an.v3
ruft den Microserviceratings
auf und zeigt eine Bewertung in Form von 1 bis 5 roten Sternen an.
Die App 'BookInfo' wurde darüber hinaus bereits über eine öffentliche IP-Adresse durch ein Istio-Gateway zugänglich gemacht. Um die Architektur von BookInfo zu sehen, sehen Sie sich die Istio-Dokumentation an.
-
Installieren Sie 'BookInfo' in Ihrem Cluster.
- Laden Sie das aktuelle Istio-Paket für Ihr Betriebssystem herunter. Es enthält die Konfigurationsdateien für die App 'BookInfo'.
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.23.5 sh -
- Navigieren Sie zum Istio-Paketverzeichnis.
cd istio-1.23.5
- Linux- und Mac OS-Benutzer: Fügen Sie den Client
istioctl
zu Ihrer SystemvariablenPATH
hinzu.export PATH=$PWD/bin:$PATH
- Versehen Sie den Namensbereich
default
für die automatische Sidecar-Injektion mit einer Bezeichnung. Neue Pods, die unterdefault
bereitgestellt werden, werden jetzt automatisch mit Envoy-Proxy-Sidecar-Containern erstellt.kubectl label namespace default istio-injection=enabled
- Stellen Sie die Anwendung, das Gateway sowie die Zielregeln für 'BookInfo' bereit.
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
- Überprüfen Sie, dass die Pods der BookInfo-Microservices den Status
Running
(Aktiv) aufweisen.kubectl get pods
NAME READY STATUS RESTARTS AGE details-v1-6865b9b99d-7v9h8 2/2 Running 0 2m productpage-v1-f8c8fb8-tbsz9 2/2 Running 0 2m ratings-v1-77f657f55d-png6j 2/2 Running 0 2m reviews-v1-6b7f6db5c5-fdmbq 2/2 Running 0 2m reviews-v2-7ff5966b99-zflkv 2/2 Running 0 2m reviews-v3-5df889bcff-nlmjp 2/2 Running 0 2m
- Laden Sie das aktuelle Istio-Paket für Ihr Betriebssystem herunter. Es enthält die Konfigurationsdateien für die App 'BookInfo'.
-
Rufen Sie die öffentliche Adresse für die Lastausgleichsfunktion
istio-ingressgateway
ab, von der BookInfo bereitgestellt wird.- Klassische Cluster
- Legen Sie die Istio-Ingress-IP-Adresse als Umgebungsvariable fest.
export INGRESS_IP=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
- Legen Sie den Istio-Ingress-Port als Umgebungsvariable fest.
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
- Erstellen Sie die Umgebungsvariable
GATEWAY_URL
, die den Istio-Ingress-Host und -Port verwendet.export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT
- Legen Sie die Istio-Ingress-IP-Adresse als Umgebungsvariable fest.
- VPC-Cluster: Erstellen Sie eine Umgebungsvariable
GATEWAY_URL
, die den Istio-Ingress-Hostnamen verwendet.export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
- Klassische Cluster
-
Führen Sie den Befehl 'curl' für die Variable
GATEWAY_URL
aus, um zu prüfen, ob die App BookInfo ausgeführt wird. Die Antwort200
bedeutet, dass die App 'BookInfo' ordnungsgemäß mit Istio ausgeführt wird.curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
-
Zeigen Sie die BookInfo-Webseite in einem Browser an.
Mac OS oder Linux
open http://$GATEWAY_URL/productpage
Windows
start http://$GATEWAY_URL/productpage
-
Versuchen Sie mehrfach, die Seite zu aktualisieren. Verschiedene Versionen des Abschnitts 'reviews' zeigen abwechselnd keine Sterne (
v1
derreviews
), schwarze Sterne (v2
) und rote Sterne (v3
) an.
Weitere Informationen zur Arbeitsweise der Routingfunktion in Istio finden Sie unter Erläuterungen zu den Vorgängen.
Schritt 3: Schrittweisen Rollout für BookInfo simulieren
Um die Freigabe einer App zu simulieren, können Sie einen schrittweisen Rollout für v3
des Microservice reviews
von BookInfo durchführen.
Nachdem Ihre App die Testphase durchlaufen hat und für den Live-Datenverkehr bereit ist, können Sie schrittweise Rollouts mit Istio durchführen. Sie können zum Beispiel im ersten Schritt die v3
des Microservice für 10 % der Benutzer
freigeben, im zweiten Schritt für 20 % der Benutzer usw.
-
Konfigurieren Sie einen virtuellen Service, der 0 % des Datenverkehrs auf
v1
, 90 % des Datenverkehrs aufv2
, und 10 % des Datenverkehrs aufv3
des Microservicereviews
verteilt.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 weight: 0 - destination: host: reviews subset: v2 weight: 90 - destination: host: reviews subset: v3 weight: 10
kubectl apply -f <filename>.yaml
-
Zeigen Sie die Webseite für BookInfo in einem Browser an, indem Sie den Befehl
open http://$GATEWAY_URL/productpage
(Mac OS und Linux) bzw. den Befehlstart http://$GATEWAY_URL/productpage
(Windows) ausführen. -
Versuchen Sie mehrfach, die Seite zu aktualisieren. Beachten Sie, dass die Seite ohne Sterne (
v1
) nicht mehr angezeigt wird und dass für die meisten der Seitenaktualisierungen die schwarzen Sterne (v2
) anzeigt werden. Nur in wenigen Fällen wird die Seite mit roten Sternen (v3
) angezeigt. -
Ändern Sie die Verteilung des Datenverkehrs so, dass der gesamte Datenverkehr ausschließlich an
v3
gesendet wird. Hinweis: In einem realen Szenario werden Ihre Versionsänderungen möglicherweise in mehreren Schritten implementiert, indem die Verteilung des Datenverkehrs zunächst auf 80:20, dann auf 70:30 usw. geändert wird, bis der gesamte Datenverkehr nur noch an die neueste Version weitergeleitet wird.- Bearbeiten Sie die Konfigurationsdatei für den virtuellen Service
reviews
.kubectl edit VirtualService reviews
- Ändern Sie
weight
(Gewichtung) fürv2
in den Wert0
undweight
fürv3
in den Wert100
. - Speichern und schließen Sie die Datei.
- Bearbeiten Sie die Konfigurationsdatei für den virtuellen Service
-
Aktualisieren Sie die Seite 'BookInfo' mehrmals. Beachten Sie, dass die Seite mit schwarzen Sternen (
v2
) fehlt und nur noch die Seite mit roten Sternen (v3
) angezeigt wird. -
Wenn Envoy-Zugriffsprotokolle aktiviert sind: Überprüfen Sie, dass seit dem Ändern der YAML-Datei für die Prüfvorgänge
VirtualService
keine Protokolle für Anforderungen anv2
vorhanden sind.kubectl logs -l app=reviews,version=v2 -c istio-proxy
Schritt 4: BookInfo mit IBM Cloud Monitoring überwachen
Verwenden Sie eines der vordefinierten Istio-Dashboards von Monitoring, um Ihre BookInfo-Mikrodienste zu überwachen.
Führen Sie die folgenden Schritte aus, um Überwachungsagenten in Ihrem Cluster zu bereitzustellen.
-
Konfigurieren Sie einen Überwachungsagenten in Ihrem Cluster.
-
Klicken Sie in der Überwachungskonsole auf "Dashboard öffnen" für die Instanz, die Sie bereitgestellt haben.
-
Klicken Sie in der Monitoring-Benutzerschnittstelle auf Neues Dashboard hinzufügen.
-
Suchen Sie nach
Istio
und wählen Sie eines der vordefinierten Istio-Dashboards von Monitoring aus.
Weitere Informationen zur Referenzierung von Metriken und Dashboards, zur Überwachung interner Istio-Komponenten sowie zur Überwachung von Istio-A/B- und Canary-Implementierungen finden Sie im Blogbeitrag "How to monitor Istio" des Kubernetes-Service-Mesh-Blogs.
Schritt 5: Datenverkehr im Cluster durch Aktivieren von mTLS schützen
Aktivieren Sie die Verschlüsselung für Workloads in einem Namensbereich, um eine gegenseitige TLS-Funktionalität (mTLS) innerhalb des Clusters einzurichten. Datenverkehr, der von Envoy zwischen Pods im Cluster weitergeleitet wird, wird mit TLS verschlüsselt. Das Zertifikatsmanagement für mTLS wird von Istio übernommen. Weitere Informationen finden Sie in der Istio-Dokumentation unter mTLS.
- Erstellen Sie eine Authentifizierungsrichtliniendatei namens
default.yaml
. Diese Richtlinie ist namensbereichsorientiert und konfiguriert Workloads im Servicenetz so, dass sie nur verschlüsselte Anforderungen mit TLS akzeptieren. Beachten Sie, dass keine Spezifikationen für Ziele (targets
) eingeschlossen werden, weil die Richtlinie für alle Services im Netz in diesem Namensbereich gilt.apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" spec: mtls: mode: STRICT
- Wenden Sie die Authentifizierungsrichtlinie auf einen Namensbereich an.
kubectl apply -f default.yaml -n <namespace>
- Erstellen Sie eine Zielregeldatei mit dem Namen
destination-mtls.yaml
. Diese Richtlinie konfiguriert Servicenetzworkloads in einem Namensbereich, um Datenverkehr unter Verwendung von TLS zu senden. Beachten Sie, dass die Platzhalterangabehost: *.local
diese Zielregel auf alle Services im Servicenetz anwendet.apiVersion: "networking.istio.io/v1beta1" kind: "DestinationRule" metadata: name: "destination-mtls" spec: host: "*.local" trafficPolicy: tls: mode: ISTIO_MUTUAL
- Wenden Sie die Zielregel an.
kubectl apply -f destination-mtls.yaml -n <namespace>
- Wenn Sie mTLS für Servicenetzworkloads in anderen Namensbereichen einrichten wollen, wiederholen Sie diese Schritte für jeden gewünschten Namensbereich.
Zielregeln werden auch für andere als Authentifizierungszwecke verwendet, wie zum Beispiel zur Weiterleitung von Datenverkehr an verschiedene Versionen eines Service. Jede Zielregel, die Sie für einen Service erstellen, muss außerdem denselben
TLS-Block enthalten, der auf mode: ISTIO_MUTUAL
gesetzt ist. Dieser Block verhindert, dass die Regel die netzweiten mTLS-Einstellungen überschreibt, die Sie in diesem Abschnitt konfiguriert haben.