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, lesen Sie bitte das Änderungsprotokoll zum Add-on Istio, um Informationen zur Version zu erhalten.
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 Readyaufweist). Es kann einige Minuten dauern, bis das Add-on bereit ist.ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_IDBeispielausgabe
Name Version Health State Health Status istio 1.29 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-systemkubectl 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:
productpageruft die Microservicesdetailsundreviewsauf, um die Seite mit Daten zu füllen.detailsenthält Buchinformationen.ratingsenthält Informationen zur Bewertung eines Buchs, die eine Buchrezension begleiten.reviewsenthält Buchrezensionen und ruft den Microserviceratingsauf. Der Microservicereviewshat mehrere Versionen:v1ruft den Microserviceratingsnicht auf.v2ruft den Microserviceratingsauf und zeigt eine Bewertung in Form von 1 bis 5 schwarzen Sternen an.v3ruft den Microserviceratingsauf 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. Informationen zur Architektur von BookInfo finden Sie in der Dokumentation zu Istio.
-
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.29.5 sh - ``` 2. Navigieren Sie zum Istio-Paketverzeichnis. ```sh {: pre} cd istio-1.29.5 ``` 3. Linux- und Mac OS-Benutzer: Fügen Sie den Client `istioctl` zu Ihrer Systemvariablen `PATH` hinzu. ```sh {: pre} export PATH=$PWD/bin:$PATH ``` 4. Versehen Sie den Namensbereich `default` für die automatische Sidecar-Injektion mit einer Bezeichnung. Neue Pods, die unter `default` bereitgestellt werden, werden jetzt automatisch mit Envoy-Proxy-Sidecar-Containern erstellt. ```sh {: pre} kubectl label namespace default istio-injection=enabled ``` 5. Stellen Sie die Anwendung, das Gateway sowie die Zielregeln für 'BookInfo' bereit. ```sh {: pre} 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 ``` 6. Überprüfen Sie, dass die Pods der BookInfo-Microservices den Status `Running` (Aktiv) aufweisen. ```sh {: pre} kubectl get pods ``` ```sh {: screen} 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 ``` -
Rufen Sie die öffentliche Adresse für die Lastausgleichsfunktion
istio-ingressgatewayab, 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_URLaus, um zu prüfen, ob die App BookInfo ausgeführt wird. Die Antwort200bedeutet, 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/productpageWindows
start http://$GATEWAY_URL/productpage -
Versuchen Sie mehrfach, die Seite zu aktualisieren. Verschiedene Versionen des Abschnitts 'reviews' zeigen abwechselnd keine Sterne (
v1derreviews), 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 aufv3des Microservicereviewsverteilt.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: 10kubectl 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
v3gesendet 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 ``` 2. Ändern Sie `weight` (Gewichtung) für `v2` in den Wert `0` und `weight` für `v3` in den Wert `100`. 3. 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
VirtualServicekeine Protokolle für Anforderungen anv2vorhanden sind.kubectl logs -l app=reviews,version=v2 -c istio-proxy
Schritt 4: BookInfo mit IBM Cloud Monitoring überwachen
Verwenden Sie eines der vordefinierten Dashboards unter Istio von Monitoring, um Ihre BookInfo-Mikroservices 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 für die von Ihnen bereitgestellte Instanz auf Dashboard öffnen.
-
Klicken Sie in der Monitoring-Benutzerschnittstelle auf Neues Dashboard hinzufügen.
-
Suchen Sie nach Monitoring und
Istiowählen Sie eines der vordefinierten Dashboards unter Istio aus.
Weitere Informationen zum Abrufen von Metriken und Dashboards, zur Überwachung der internen Komponenten von Istio sowie zur Überwachung von A/B- und Canary-Bereitstellungen unter Istio finden Sie im Blogbeitrag How to monitor Istio zum Service Mesh von Kubernetes.
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 Dokumentation Istio mutual TLS.
- 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: *.localdiese 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 Service-Mesh-Workloads in anderen Namespaces aktivieren möchten, wiederholen Sie diese Schritte in jedem Namespace.
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.