Anthos Service Mesh in GKE aktualisieren

In dieser Anleitung wird erläutert, wie Sie Anthos Service Mesh von Version 1.4.5+ auf Version 1.4.10 in Google Kubernetes Engine aktualisieren. Wenn Sie ein Upgrade auf Anthos Service Mesh 1.5 durchführen möchten, finden Sie weitere Informationen unter Upgrade von Anthos Service Mesh auf GKE.

Es dauert fünf bis zehn Minuten, um die Komponenten der Anthos Service Mesh-Steuerungsebene noch einmal bereitzustellen. Außerdem müssen Sie in allen Arbeitslasten neue Sidecar-Proxys einfügen, damit sie mit der aktuellen Anthos Service Mesh-Version aktualisiert werden. Wie lange es dauert, die Sidecar-Proxys zu aktualisieren, hängt von vielen Faktoren ab, z. B. von der Anzahl der Pods, der Anzahl der Knoten, den Skalierungseinstellungen der Bereitstellung, den Budget für Pod-Störungen und anderen Konfigurationseinstellungen. Grob geschätzt dauert die Aktualisierung der Sidecar-Proxys 100 Pods pro Minute.

Upgrade vorbereiten

In diesem Abschnitt werden die Schritte zum Upgrade von Anthos Service Mesh beschrieben.

  1. Prüfen Sie die unterstützten Features und diese Anleitung, um sich mit den Features und dem Upgradeprozess vertraut zu machen.

  2. Prüfen Sie, ob Ihre Autorisierungsrichtlinien aktualisiert werden müssen.

  3. Wenn Sie bei der Installation der vorherigen Version von Anthos Service Mesh optionale Features aktiviert haben, müssen Sie der istioctl apply-Befehlszeile --set values-Flags hinzufügen. Verwenden Sie dieselben Flags, wenn Sie istioctl apply ausführen, um ein Upgrade auf 1.4.10 durchzuführen.

  4. Wenn Sie bei der Installation der vorherigen Version von Anthos Service Mesh optionale Funktionen aktiviert haben, fügen Sie der istioctl apply-Befehlszeile das Flag -f hinzu, um eine YAML-Datei anzugeben. Legen Sie dieselbe Datei fest (oder eine Datei mit demselben Inhalt, wenn Sie istioctl apply ausführen, um ein Upgrade auf 1.4.10 durchzuführen.

  5. Planen Sie eine Ausfallzeit. Das Upgrade kann je nach Größe des Clusters bis zu einer Stunde dauern. Beachten Sie, dass hier nicht die Zeit inkludiert ist, die Sie zum erneuten Bereitstellen von Arbeitslasten zum Aktualisieren von Sidecar-Proxys benötigen.

Standardeinstellungen für Projekte und Cluster festlegen

  1. Rufen Sie die Projekt-ID des Projekts ab, in dem der Cluster erstellt wurde:

    gcloud

    gcloud projects list

    Console

    1. Öffnen Sie in der Google Cloud Console die Seite Dashboard:

      Zur Seite "Dashboard"

    2. Klicken Sie oben auf der Seite auf das Drop-down Auswählen aus. Wählen Sie im angezeigten Fenster Auswählen aus Ihr Projekt aus. Die Projekt-ID wird auf der Dashboard-Karte Projektinformationen des Projekts angezeigt.

  2. Erstellen Sie eine Umgebungsvariable für die Projekt-ID:

    export PROJECT_ID=YOUR_PROJECT_ID
  3. Erstellen Sie eine Umgebungsvariable für die Projektnummer:

    export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
  4. Legen Sie das Standardprojekt ID für die Google Cloud CLI fest:

    gcloud config set project ${PROJECT_ID}
    
  5. Erstellen Sie die folgenden Umgebungsvariablen:

    • Legen Sie den Clusternamen fest:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • Legen Sie CLUSTER_LOCATION entweder auf Ihre Clusterzone oder Clusterregion fest:

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
    • Legen Sie den Arbeitslastpool fest:

      export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog
    • Legen Sie die Mesh-ID fest.

      export MESH_ID="proj-${PROJECT_NUMBER}"
  6. Legen Sie die Standardzone oder -region für Google Cloud-CLI fest.

    • Wenn Sie einen Cluster mit einer einzelnen Zone haben, legen Sie die Standardzone fest:

      gcloud config set compute/zone ${CLUSTER_LOCATION}
    • Wenn Sie einen regionalen Cluster haben, legen Sie die Standardregion fest:

      gcloud config set compute/region ${CLUSTER_LOCATION}

Anmeldedaten und Berechtigungen festlegen

  1. Rufen Sie die Anmeldedaten für die Authentifizierung ab, um mit dem Cluster zu interagieren:
    gcloud container clusters get-credentials ${CLUSTER_NAME}
  2. Gewähren Sie dem aktuellen Nutzer Cluster-Administratorberechtigungen. Sie benötigen diese Berechtigungen, um die erforderlichen Regeln für die rollenbasierte Zugriffssteuerung (Role Based Access Control, RBAC) für Anthos Service Mesh zu erstellen:
    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"

    Wenn der Fehler "cluster-admin-binding" already exists angezeigt wird, können Sie ihn ignorieren und mit der vorhandenen Cluster-Administratorbindung fortfahren.

Installationsdatei herunterladen

    Linux

  1. Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-linux.tar.gz
  2. Laden Sie die Signaturdatei herunter und bestätigen Sie die Signatur mit openssl:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-linux.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.4.10-asm.18-linux.tar.gz.1.sig istio-1.4.10-asm.18-linux.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    Die erwartete Ausgabe ist Verified OK.

  3. macOS

  4. Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-osx.tar.gz
  5. Laden Sie die Signaturdatei herunter und bestätigen Sie die Signatur mit openssl:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.4.10-asm.18-osx.tar.gz.1.sig istio-1.4.10-asm.18-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    Die erwartete Ausgabe ist Verified OK.

  6. Windows

  7. Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-win.zip
  8. Laden Sie die Signaturdatei herunter und bestätigen Sie die Signatur mit openssl:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.4.10-asm.18-win.zip.1.sig istio-1.4.10-asm.18-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    Die erwartete Ausgabe ist Verified OK.

  9. Entpacken Sie die Inhalte der Datei in einem Verzeichnis Ihres Dateisystems. So extrahieren Sie beispielsweise den Inhalt in das aktuelle Arbeitsverzeichnis:
    tar xzf istio-1.4.10-asm.18-linux.tar.gz

    Mit dem Befehl wird in Ihrem aktuellen Arbeitsverzeichnis istio-1.4.10-asm.18 ein Installationsverzeichnis erstellt, das Folgendes enthält:

    • Beispielanwendungen in samples
    • Die folgenden Tools im Verzeichnis bin:
      • istioctl: Sie verwenden istioctl, um Anthos Service Mesh zu installieren.
      • asmctl: Sie verwenden asmctl, um Ihre Sicherheitskonfiguration nach der Installation von Anthos Service Mesh zu validieren. (Derzeit wird asmctl in GKE on VMware nicht unterstützt.)

  10. Prüfen Sie, ob Sie sich im Stammverzeichnis der Anthos Service Mesh-Installation befinden.
    cd istio-1.4.10-asm.18
  11. Fügen Sie die Tools der Einfachheit halber im Verzeichnis /bin Ihrem PATH hinzu.
    export PATH=$PWD/bin:$PATH

Upgrade von Anthos Service Mesh durchführen

In diesem Abschnitt wird beschrieben, wie Sie Anthos Service Mesh aktualisieren und aktivieren:

  • Die auf der Seite Unterstützte Features aufgeführten unterstützten Standardfeatures
  • Anthos Service Mesh-Zertifizierungsstelle (Mesh CA)
  • Die Telemetrie-Datenpipeline, die das Anthos Service Mesh-Dashboard in der Google Cloud Console unterstützt

Informationen zum Aktivieren der unterstützten optionalen Features finden Sie unter Optionale Features aktivieren.

So führen Sie ein Upgrade von Anthos Service Mesh durch:

Wählen Sie einen der folgenden Befehle aus, um Anthos Service Mesh im mTLS-Authentifizierungsmodus (mutual TLS, gegenseitiges TLS) PERMISSIVE oder im mTLS-Modus STRICT zu konfigurieren.

PERMISSIVE-mTLS

istioctl manifest apply --set profile=asm \
  --set values.global.trustDomain=${WORKLOAD_POOL} \
  --set values.global.sds.token.aud=${WORKLOAD_POOL} \
  --set values.nodeagent.env.GKE_CLUSTER_URL=https://container.googleapis.com/v1/projects/${PROJECT_ID}/locations/${CLUSTER_LOCATION}/clusters/${CLUSTER_NAME} \
  --set values.global.meshID=${MESH_ID} \
  --set values.global.proxy.env.GCP_METADATA="${PROJECT_ID}|${PROJECT_NUMBER}|${CLUSTER_NAME}|${CLUSTER_LOCATION}"

STRICT-mTLS

istioctl manifest apply --set profile=asm \
  --set values.global.trustDomain=${WORKLOAD_POOL} \
  --set values.global.sds.token.aud=${WORKLOAD_POOL} \
  --set values.nodeagent.env.GKE_CLUSTER_URL=https://container.googleapis.com/v1/projects/${PROJECT_ID}/locations/${CLUSTER_LOCATION}/clusters/${CLUSTER_NAME} \
  --set values.global.meshID=${MESH_ID} \
  --set values.global.proxy.env.GCP_METADATA="${PROJECT_ID}|${PROJECT_NUMBER}|${CLUSTER_NAME}|${CLUSTER_LOCATION}" \
  --set values.global.mtls.enabled=true

Komponenten der Steuerungsebene prüfen

Beim Upgrade müssen die Komponenten der Steuerungsebene neu installiert werden. Das dauert etwa fünf bis zehn Minuten. Die alten Komponenten der Steuerungsebene werden beendet und bei der Installation der neuen Komponenten gelöscht. Sie können den Fortschritt mithilfe des Werts in der Spalte AGE der Arbeitslasten prüfen.

kubectl get pod -n istio-system
NAME                                     READY   STATUS        RESTARTS   AGE
istio-galley-76d684bf9-jwz65             2/2     Running       0          5m36s
istio-ingressgateway-5bfdf7c586-v6wxx    2/2     Terminating   0          25m
istio-ingressgateway-7b598c5557-b88md    2/2     Running       0          5m44s
istio-nodeagent-bnjg7                    1/1     Running       0          5m16s
istio-nodeagent-cps2j                    1/1     Running       0          5m10s
istio-nodeagent-f4x46                    1/1     Running       0          5m26s
istio-nodeagent-jbl5x                    1/1     Running       0          5m38s
istio-pilot-5dc4bc4dbf-ds5dh             2/2     Running       0          5m30s
istio-pilot-74665549c5-7r6qh             2/2     Terminating   0          25m
istio-sidecar-injector-7ddff4b99-b76l7   1/1     Running       0          5m36s
promsd-6d4d5b7c5c-dgnd7                  2/2     Running       0          5m30s

In diesem Beispiel gibt es zwei Instanzen von istio-ingressgateway und istio-pilot. Die Instanzen mit 25m in der Spalte AGE werden beendet. Alle anderen Komponenten werden neu installiert.

Upgrade validieren

Wir empfehlen die Verwendung des Analysetools asmctl, um die grundlegende Konfiguration Ihres Projekts, Ihres Clusters und Ihrer Arbeitslasten zu prüfen. Wenn ein asmctl-Test fehlschlägt, empfiehlt asmctl Lösungen, sofern möglich. Mit dem Befehl asmctl validate werden einfache Tests durchgeführt, mit denen Folgendes geprüft wird:

  1. Die von Anthos Service Mesh benötigten APIs sind für das Projekt aktiviert.
  2. Das Istio-Ingress-Gateway ist ordnungsgemäß für den Aufruf von Mesh CA konfiguriert.
  3. Der allgemeine Zustand von Istiod und Istio-Ingressgateway.

Wenn Sie den Befehl asmctl validate mit dem optionalen Flag --with-testing-workloads zusätzlich zu den grundlegenden Tests ausführen, führt asmctl die Sicherheitstests aus, die Folgendes prüfen:

  1. Die gegenseitige TLS-Kommunikation (mTLS) ist richtig konfiguriert.
  2. Die Mesh CA kann Zertifikate ausstellen.

Zum Ausführen der Sicherheitstests stellt asmctl Arbeitslasten in Ihrem Cluster in einem Test-Namespace bereit, führt die mTLS-Kommunikationstests aus, gibt die Ergebnisse aus und löscht den Test-Namespace.

So führen Sie asmctl aus:

  1. Achten Sie darauf, dass gcloud-Standardanmeldedaten für Anwendungen festgelegt ist:

     gcloud auth application-default login
    
  2. Rufen Sie, falls noch nicht geschehen, Authentifizierungsdaten für die Interaktion mit dem Cluster ab:

     gcloud container clusters get-credentials ${CLUSTER_NAME}
    
  3. So führen Sie sowohl die grundlegenden als auch die Sicherheitstests durch (sofern die istio-1.4.10-asm.18/bin) im PATH enthalten ist):

    asmctl validate --with-testing-workloads
    

    Bei Erfolg meldet der Befehl eine Ausgabe, die in etwa so aussieht:

    [asmctl version 0.3.0]
    Using Kubernetes context: example-project_us-central1-example-cluster
    To change the context, use the --context flag
    Validating enabled APIs
    OK
    Validating ingressgateway configuration
    OK
    Validating istio system
    OK
    Validating sample traffic
    Launching example services...
    Sent traffic to example service http code: 200
    verified mTLS configuration
    OK
    Validating issued certs
    OK
    

Sidecar-Proxys aktualisieren

Alle Arbeitslasten, die vor dem Aktualisieren von Anthos Service Mesh auf Ihrem Cluster ausgeführt wurden, müssen den Sidecar-Proxy enthalten oder aktualisiert haben, damit sie die aktuelle Anthos Service Mesh-Version haben.

Mit der automatischen Sidecar-Einfügung können Sie die Sidecar-Dateien für vorhandene Pods mit einem Pod-Neustart aktualisieren. Wie Sie Pods neu starten, hängt davon ab, ob sie als Teil einer Bereitstellung erstellt wurden.

  1. Starten Sie die Bereitstellung neu, wenn Sie eine Bereitstellung verwendet haben. Dadurch werden alle Pods mit Sidecar-Dateien neu gestartet:

    kubectl rollout restart YOUR_DEPLOYMENT -n YOUR_NAMESPACE

    Wenn Sie keine Bereitstellung verwendet haben, löschen Sie die Pods, und sie werden automatisch mit Sidecar-Dateien neu erstellt:

    kubectl delete pod -n YOUR_NAMESPACE --all
  2. Prüfen Sie, ob alle Pods im Namespace Sidecar-Dateien eingefügt haben:

    kubectl get pod -n YOUR_NAMESPACE --all

    In der folgenden Beispielausgabe des vorherigen Befehls sehen Sie, dass die Spalte READY zwei Container für jede Ihrer Arbeitslasten enthält: den primären Container und den Container für den Sidecar-Proxy.

    NAME                    READY   STATUS    RESTARTS   AGE
    YOUR_WORKLOAD           2/2     Running   0          20s
    ...
    

Autorisierungsrichtlinien aktualisieren

Wenn Sie ein Upgrade von der Open-Source-Version Istio 1.4.x oder einer früheren Version von Anthos Service Mesh ausführen und vorhandene Autorisierungsrichtlinien haben, müssen Sie diese möglicherweise aktualisieren. Weitere Informationen finden Sie unter Autorisierungsrichtlinien aktualisieren.