IBM Cloud Docs
Einführung in Istio

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.

Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  1. Aktivieren Sie das istio-Add-on.

    ibmcloud ks cluster addon enable istio --cluster <cluster_name_or_ID>
    
  2. 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
    
  3. 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 Microservices details und reviews 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 Microservice ratings auf. Der Microservice reviews hat mehrere Versionen:
    • v1 ruft den Microservice ratings nicht auf.
    • v2 ruft den Microservice ratings auf und zeigt eine Bewertung in Form von 1 bis 5 schwarzen Sternen an.
    • v3 ruft den Microservice ratings 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.

  1. Installieren Sie 'BookInfo' in Ihrem Cluster.

    1. 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 -
      
    2. Navigieren Sie zum Istio-Paketverzeichnis.
      cd istio-1.23.5
      
    3. Linux- und Mac OS-Benutzer: Fügen Sie den Client istioctl zu Ihrer Systemvariablen PATH hinzu.
      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.
      kubectl label namespace default istio-injection=enabled
      
    5. 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
      
    6. Ü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
      
  2. Rufen Sie die öffentliche Adresse für die Lastausgleichsfunktion istio-ingressgateway ab, von der BookInfo bereitgestellt wird.

    • Klassische Cluster
      1. 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}')
        
      2. 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}')
        
      3. Erstellen Sie die Umgebungsvariable GATEWAY_URL, die den Istio-Ingress-Host und -Port verwendet.
        export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT
        
    • 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}')
      
  3. 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 Antwort 200 bedeutet, dass die App 'BookInfo' ordnungsgemäß mit Istio ausgeführt wird.

    curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
    
  4. Zeigen Sie die BookInfo-Webseite in einem Browser an.

    Mac OS oder Linux

    open http://$GATEWAY_URL/productpage
    

    Windows

    start http://$GATEWAY_URL/productpage
    
  5. Versuchen Sie mehrfach, die Seite zu aktualisieren. Verschiedene Versionen des Abschnitts 'reviews' zeigen abwechselnd keine Sterne (v1 der reviews), 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.

  1. Konfigurieren Sie einen virtuellen Service, der 0 % des Datenverkehrs auf v1, 90 % des Datenverkehrs auf v2, und 10 % des Datenverkehrs auf v3 des Microservice reviews 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
    
  2. 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 Befehl start http://$GATEWAY_URL/productpage (Windows) ausführen.

  3. 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.

  4. Ä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.

    1. 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.
  5. 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.

  6. 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 an v2 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.

  1. Stellen Sie eine Instanz von IBM Cloud Monitoringbereit..

  2. Konfigurieren Sie einen Überwachungsagenten in Ihrem Cluster.

  3. Klicken Sie in der Überwachungskonsole auf "Dashboard öffnen" für die Instanz, die Sie bereitgestellt haben.

  4. Klicken Sie in der Monitoring-Benutzerschnittstelle auf Neues Dashboard hinzufügen.

  5. 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.

  1. 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
    
  2. Wenden Sie die Authentifizierungsrichtlinie auf einen Namensbereich an.
    kubectl apply -f default.yaml -n <namespace>
    
  3. 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 Platzhalterangabe host: *.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
    
  4. Wenden Sie die Zielregel an.
    kubectl apply -f destination-mtls.yaml -n <namespace>
    
  5. 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.