Anthos Service Mesh – Kurzanleitung für GKE

In dieser Anleitung installieren Sie Anthos Service Mesh 1.11.8-asm.4 mithilfe des von Google bereitgestellten asmcli-Tools in einem neuen GKE-Cluster (Google Kubernetes Engine). In dieser Anleitung wird Folgendes beschrieben:

  1. Google Cloud-Projekt konfigurieren
  2. GKE-Cluster mit der Mindestanzahl von vCPUs erstellen, die von Anthos Service Mesh benötigt werden
  3. Anthos Service Mesh mit einer clusterinternen Steuerungsebene installieren
  4. Beispielanwendung bereitstellen, um Telemetriedaten auf den Anthos Service Mesh-Dashboards in der Google Cloud Console aufzurufen
  5. Beispielanwendung verfügbar machen und darauf zugreifen

Um die Kurzanleitung zu vereinfachen und nicht mehrere Pfade zu haben, wurden folgende Entscheidungen getroffen:

  1. Anthos Service Mesh-Zertifizierungsstelle (Mesh CA) aktivieren
  2. Ingress-Gateway zur Freigabe der Anwendung bereitstellen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss dieser Kurzanleitung können Sie weitere Kosten durch das Löschen des Clusters vermeiden. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Kubernetes Engine API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Kubernetes Engine API.

    Enable the API

  8. Notieren Sie sich die Projekt-ID.

Anthos Service Mesh erfordert zwar andere APIs, aber asmcli aktiviert sie für Sie. Die GKE Enterprise API wird durch das Skript asmcli nicht aktiviert, um die Abrechnungskosten niedrig zu halten. Es gibt einige geringfügige Unterschiede in der Google Cloud Console, wenn die GKE Enterprise API aktiviert ist. Weitere Informationen zu diesen Unterschieden finden Sie unter Unterschiede zwischen GKE Enterprise und Anthos Service Mesh.

Erforderliche Tools installieren

Sie können das Tool in Cloud Shell oder auf Ihrem lokalen Computer ausführen, auf dem Linux ausgeführt wird. Cloud Shell installiert alle erforderlichen Tools vorab. macOS wird nicht unterstützt, da eine ältere Version von Bash enthalten ist.

Cloud Shell

Cloud Shell stellt eine g1-small Compute Engine-VM bereit, auf der ein Debian-basiertes Linux-Betriebssystem ausgeführt wird. Cloud Shell bietet folgende Vorteile:

  • Cloud Shell umfasst gcloud, kubectl, kpt und die anderen erforderlichen Befehlszeilentools.

  • Ihr $HOME-Verzeichnis in Cloud Shell verfügt über 5 GB nichtflüchtigen Speicher.

  • Es stehen verschiedene Texteditoren zur Auswahl:

    • Code-Editor, auf den Sie zugreifen, indem Sie oben im Cloud Shell-Fenster auf klicken.

    • Emacs, Vim oder Nano, auf die Sie in Cloud Shell über die Befehlszeile zugreifen.

So verwenden Sie Cloud Shell:

  1. Öffnen Sie die Google Cloud Console.
  2. Wählen Sie Ihr Google Cloud-Projekt aus.
  3. Klicken Sie im oberen Bereich des Google Cloud Console-Fensters auf Cloud Shell aktivieren.

    Google Cloud Platform Console

    Im unteren Bereich der Google Cloud Console wird ein neues Feld mit einer Cloud Shell-Sitzung und einer Befehlszeilen-Eingabeaufforderung geöffnet.

    Cloud Shell-Sitzung

Lokaler Linux-Computer

  1. Die folgenden Tools müssen installiert sind:

  2. Authentifizieren Sie sich über die gcloud CLI:

    gcloud auth login
    
  3. Aktualisieren Sie die Komponenten:

    gcloud components update
    
  4. Prüfen Sie, ob sich git in Ihrem Pfad befindet, damit kpt es finden kann.

GKE-Cluster erstellen

  1. Führen Sie den folgenden Befehl aus, um den Cluster mit der Mindestanzahl von vCPUs zu erstellen, die für Anthos Service Mesh erforderlich ist. Ersetzen Sie im Befehl die Platzhalter durch folgende Informationen:

    • CLUSTER_NAME: Der Name Ihres Clusters. Der Name darf nur kleingeschriebene, alphanumerische Zeichen und - enthalten, muss mit einem Buchstaben beginnen und mit einem alphanumerischen Zeichen enden. Er darf nicht länger als 40 Zeichen sein.
    • PROJECT_ID: Die Projekt-ID, in der der Cluster erstellt wird.
    • CLUSTER_LOCATION: Die Zone des Clusters, z. B. us-central1-a.
    gcloud container clusters create CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION \
        --machine-type=e2-standard-4 \
        --num-nodes=2 \
        --workload-pool=PROJECT_ID.svc.id.goog
    

    Das Erstellen des Clusters dauert einige Minuten. Während der Cluster erstellt wird, zeigt der Befehl gcloud Folgendes an:

    Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...working...
    

    Die erwartete Ausgabe nach erfolgreicher Erstellung sieht in etwa so aus:

    Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...done.
    Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
    To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/CLUSTER_LOCATION/CLUSTER_NAME?project=PROJECT_ID
    kubeconfig entry generated for CLUSTER_NAME.
    NAME: CLUSTER_NAME
    LOCATION: CLUSTER_LOCATION
    MASTER_VERSION: 1.20.10-gke.1600
    MASTER_IP: 198.51.100.1
    MACHINE_TYPE: e2-standard-4
    NODE_VERSION: 1.20.10-gke.1600
    NUM_NODES: 2
    STATUS: RUNNING
    
  2. Rufen Sie die Anmeldedaten für die Authentifizierung ab, um mit dem Cluster zu interagieren.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    

    Erwartete Ausgabe:

    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for CLUSTER_NAME.
    
  3. Legen Sie den aktuellen Kontext für kubectl auf den Cluster fest.

    kubectl config set-context CLUSTER_NAME
    

    Erwartete Ausgabe:

    Context "CLUSTER_NAME" created.
    

asmcli herunterladen

In diesem Abschnitt wird beschrieben, wie Sie asmcli herunterladen.

  1. Laden Sie die Version herunter, mit der Anthos Service Mesh 1.11.8 in das aktuelle Arbeitsverzeichnis installiert wird:

    curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.11 > asmcli
    

    Erwartete Ausgabe:

    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
    100  167k  100  167k    0     0   701k      0 --:--:-- --:--:-- --:--:--  701k
    
  2. Machen Sie das Skript ausführbar:

    chmod +x asmcli
    

Anthos Service Mesh installieren

Führen Sie das asmcli-Tool mit den folgenden Optionen aus, um Anthos Service Mesh im zuvor erstellten Cluster zu installieren. Wenn Sie diese Seite seit dem Erstellen des Clusters nicht geschlossen haben, enthalten die Platzhalter die Werte, die Sie für den Befehl gcloud container clusters create eingegeben haben.

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all  \
  --ca mesh_ca
  • --project_id, --cluster_name und --cluster_location geben die Projekt-ID an, in der sich der Cluster befindet, den Clusternamen und entweder die Clusterzone oder -region.
  • --fleet_id: Projekt-ID des Hostprojekts der Flotte. Wenn Sie diese Option nicht angeben, verwendet asmcli das Projekt, in dem der Cluster bei der Registrierung erstellt wurde.
  • --output_dir: Fügen Sie diese Option hinzu, um ein Verzeichnis anzugeben, in das asmcli das Paket anthos-service-mesh herunterlädt und in dem die Installationsdatei extrahiert wird, die istioctl, Beispiele und Manifeste enthält. Andernfalls lädt asmcli die Dateien in ein tmp-Verzeichnis herunter. Sie können entweder einen relativen Pfad oder einen vollständigen Pfad angeben. Die Umgebungsvariable $PWD funktioniert hier nicht.
  • --enable_all: Ermöglicht dem Skript Folgendes:
    • Erforderliche IAM-Berechtigungen gewähren.
    • Erforderliche Google APIs aktivieren.
    • Im Cluster ein Label festlegen, das das Mesh-Netzwerk identifiziert.
    • Cluster bei der Flotte registrieren, falls noch nicht geschehen.

    Es kann einige Minuten dauern, bis die Ausführung des asmcli-Tools abgeschlossen ist. Das Tool gibt Informationsnachrichten aus, damit Sie den Fortschritt verfolgen können.

    Erwartete Ausgabe bei erfolgreicher Installation:

    asmcli: Successfully installed ASM.
    

    Ingress-Gateway bereitstellen

    Anthos Service Mesh bietet Ihnen die Möglichkeit, Gateways als Teil Ihres Service Mesh bereitzustellen und zu verwalten. Ein Gateway beschreibt einen Load-Balancer, der am Rand des Mesh-Netzwerks arbeitet und eingehende oder ausgehende HTTP/TCP-Verbindungen empfängt. Gateways sind Envoy-Proxys, die Ihnen eine detaillierte Kontrolle über den in das Mesh-Netzwerk eingehenden und ausgehenden Traffic ermöglichen.

    1. Erstellen Sie einen Namespace für das Ingress-Gateway, falls Sie noch keinen haben. Gateways sind Nutzerarbeitslasten und sollten als Best Practice nicht im Namespace der Steuerungsebene bereitgestellt werden. Ersetzen Sie GATEWAY_NAMESPACE durch den Namen Ihres Namespace.

      kubectl create namespace GATEWAY_NAMESPACE
      

      Erwartete Ausgabe:

      namespace/GATEWAY_NAMESPACE created
      
    2. Aktivieren Sie die automatische Injektion auf dem Gateway, indem Sie ein Überarbeitungslabel auf den Gateway-Namespace anwenden. Das Überarbeitungslabel wird vom Sidecar-Injektor-Webhook verwendet, um eingefügte Proxys mit einer bestimmten Überarbeitung der Steuerungsebene zu verknüpfen.

      1. Verwenden Sie den folgenden Befehl, um das Überarbeitungslabel für istiod zu finden:

        kubectl get deploy -n istio-system -l app=istiod -o \
          "jsonpath={.items[*].metadata.labels['istio\.io/rev']}{'\n'}"
        

        Der Befehl gibt das Überarbeitungslabel aus, das der Anthos Service Mesh-Version entspricht, z. B. asm-1118-4

      2. Wenden Sie das Überarbeitungslabel auf den Namespace an. Im folgenden Befehl ist REVISION der Wert des Überarbeitungslabels istiod, den Sie im vorherigen Schritt notiert haben.

        kubectl label namespace GATEWAY_NAMESPACE \
          istio.io/rev=REVISION --overwrite
        

        Erwartete Ausgabe:

        namespace/GATEWAY_NAMESPACE labeled
        
    3. Sie können die Beispielkonfiguration für das Ingress-Gateway im Verzeichnis samples/gateways/istio-ingressgateway/ unverändert bereitstellen oder nach Bedarf ändern.

      kubectl apply -n GATEWAY_NAMESPACE \
        -f DIR_PATH/samples/gateways/istio-ingressgateway
      

      Erwartete Ausgabe:

      deployment.apps/istio-ingressgateway created
      poddisruptionbudget.policy/istio-ingressgateway created
      horizontalpodautoscaler.autoscaling/istio-ingressgateway created
      role.rbac.authorization.k8s.io/istio-ingressgateway created
      rolebinding.rbac.authorization.k8s.io/istio-ingressgateway created
      service/istio-ingressgateway created
      serviceaccount/istio-ingressgateway created
      

    Best Practices für Gateways

    Online Boutique-Beispiel bereitstellen

    Die Online Boutique-Beispielanwendung im anthos-service-mesh-packages-Repository wird aus dem ursprünglichen Satz von Manifesten im microservices-demo-Repository modifiziert. Gemäß den Best Practices wird jeder Dienst in einem separaten Namespace mit einem eigenen Dienstkonto bereitgestellt.

    1. Erstellen Sie die Namespaces für die Anwendung:

      kubectl apply -f \
        DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
      

      Erwartete Ausgabe:

      namespace/ad created
      namespace/cart created
      namespace/checkout created
      namespace/currency created
      namespace/email created
      namespace/frontend created
      namespace/loadgenerator created
      namespace/payment created
      namespace/product-catalog created
      namespace/recommendation created
      namespace/shipping created
      
    2. Aktivieren Sie die automatische Sidecar-Injektion (automatische Injektion). Das hier verwendete Überarbeitungslabel ist dasselbe, das auch zum Annotieren des Namespace für das Ingress-Gateway verwendet wird. Wenden Sie das Überarbeitungslabel auf die Anwendungs-Namespaces an. Im folgenden Befehl ist REVISION der Wert, mit dem Sie den Namespace des Ingress-Gateways annotiert haben.

      for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do
        kubectl label namespace $ns istio.io/rev=REVISION --overwrite
      done;
      

      Erwartete Ausgabe:

      namespace/ad labeled
      namespace/cart labeled
      namespace/checkout labeled
      namespace/currency labeled
      namespace/email labeled
      namespace/frontend labeled
      namespace/loadgenerator labeled
      namespace/payment labeled
      namespace/product-catalog labeled
      namespace/recommendation labeled
      namespace/shipping labeled
      
    3. Stellen Sie die Beispielanwendung im Cluster bereit:

      1. Erstellen Sie die Dienstkonten und Deployments:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/kubernetes-manifests/deployments
        

        Erwartete Ausgabe:

        serviceaccount/ad created
        deployment.apps/adservice created
        serviceaccount/cart created
        deployment.apps/cartservice created
        serviceaccount/checkout created
        deployment.apps/checkoutservice created
        serviceaccount/currency created
        deployment.apps/currencyservice created
        serviceaccount/email created
        deployment.apps/emailservice created
        serviceaccount/frontend created
        deployment.apps/frontend created
        serviceaccount/loadgenerator created
        deployment.apps/loadgenerator created
        serviceaccount/payment created
        deployment.apps/paymentservice created
        serviceaccount/product-catalog created
        deployment.apps/productcatalogservice created
        serviceaccount/recommendation created
        deployment.apps/recommendationservice created
        serviceaccount/shipping created
        deployment.apps/shippingservice created
        
      2. Erstellen Sie die Dienste:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/kubernetes-manifests/services
        

        Erwartete Ausgabe:

        service/adservice created
        service/cartservice created
        service/checkoutservice created
        service/currencyservice created
        service/emailservice created
        service/frontend created
        service/frontend-external created
        service/paymentservice created
        service/productcatalogservice created
        service/recommendationservice created
        service/shippingservice created
        
      3. Erstellen Sie die Diensteinträge:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
        

        Erwartete Ausgabe:

        serviceentry.networking.istio.io/allow-egress-googleapis created
        serviceentry.networking.istio.io/allow-egress-google-metadata created
        

    Anwendung freigeben und darauf zugreifen

    Es gibt mehrere Möglichkeiten, die Anwendung freizugeben. In dieser Anleitung verwenden wir dazu das oben bereitgestellte Ingress-Gateway. Weitere Möglichkeiten zur Freigabe der Online Boutique-Anwendung finden Sie im Abschnitt Anwendung freigeben und darauf zugreifen im Leitfaden für die Online Boutique-Beispielanwendung.

    1. Stellen Sie Gateway und VirtualService für den Frontend-Dienst bereit

      kubectl apply -f \
          DIR_PATH/samples/online-boutique/istio-manifests/frontend-gateway.yaml
      

      Erwartete Ausgabe:

      gateway.networking.istio.io/frontend-gateway created
      virtualservice.networking.istio.io/frontend-ingress created
      
    2. Rufen Sie die externe IP-Adresse des Ingress-Gateways ab und ersetzen Sie die Platzhalter durch folgende Informationen:

      • GATEWAY_SERVICE_NAME: Der Name des Ingress-Gateway-Dienstes. Wenn Sie das Beispiel-Gateway ohne Änderung bereitgestellt haben, wäre dies istio-ingressgateway.
      • GATEWAY_NAMESPACE: Der Namespace, in dem Sie das Ingress-Gateway bereitgestellt haben:
      kubectl get service GATEWAY_SERVICE_NAME \
          -n GATEWAY_NAMESPACE
      

      Die Ausgabe sieht etwa so aus:

      NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                      AGE
      istio-ingressgateway   LoadBalancer   10.19.247.233   35.239.7.64   80:31380/TCP,443:31390/TCP,31400:31400/TCP   27m

      In diesem Beispiel lautet die IP-Adresse des Ingress-Gateways 35.239.7.64.

    3. Rufen Sie die Anwendung in Ihrem Browser auf, um die Installation zu bestätigen:

      http://EXTERNAL_IP/
      

    Service Mesh-Dashboards aufrufen

    Nachdem Sie Arbeitslasten mit den eingefügten Sidecar-Proxys auf Ihrem Cluster bereitgestellt haben, können Sie die Anthos Service Mesh-Seiten in der Google Cloud Console entdecken, um alle Beobachtbarkeitsfunktionen von Anthos Service Mesh zu sehen. Nach der Bereitstellung von Arbeitslasten dauert es etwa ein oder zwei Minuten, bis Telemetriedaten in der Google Cloud Console angezeigt werden.

    In der Cloud Console wird der Zugriff auf Anthos Service Mesh durch die Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) gesteuert. Für den Zugriff auf Anthos Service Mesh-Seiten muss ein Projektinhaber den Nutzern die Rolle „Projektbearbeiter“ oder „Betrachter“ oder die unter Zugriff auf Anthos Service Mesh in der Google Cloud Console steuern beschriebenen restriktiveren Rollen gewähren.

    1. Wechseln Sie in der Google Cloud Console zu Anthos Service Mesh.

      Zu Anthos Service Mesh

    2. Wählen Sie das Google Cloud-Projekt aus der Drop-down-Liste in der Menüleiste aus.

    3. Wenn Sie mehr als ein Service Mesh haben, wählen Sie das Mesh aus der Drop-down-Liste Service Mesh aus.

    Weitere Informationen finden Sie unter Mit Anthos Service Mesh in der Google Cloud Console vertraut machen.

    Bereinigen

    Wenn Sie mehr über gegenseitiges TLS erfahren möchten, lesen Sie Anthos Service Mesh mit Beispiel: mTLS.

    • Wenn Sie den Cluster behalten und das Online Boutique-Beispiel entfernen möchten:

      1. Löschen Sie die Anwendungs-Namespaces:

        kubectl delete -f DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
        

        Erwartete Ausgabe:

        namespace "ad" deleted
        namespace "cart" deleted
        namespace "checkout" deleted
        namespace "currency" deleted
        namespace "email" deleted
        namespace "frontend" deleted
        namespace "loadgenerator" deleted
        namespace "payment" deleted
        namespace "product-catalog" deleted
        namespace "recommendation" deleted
        namespace "shipping" deleted
        
      2. Löschen Sie die Diensteinträge:

        kubectl delete -f DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
        

        Erwartete Ausgabe:

        serviceentry.networking.istio.io "allow-egress-googleapis" deleted
        serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
        
    • Wenn Sie zusätzliche Gebühren vermeiden möchten, löschen Sie den Cluster:

      1. Führen Sie dazu diesen Befehl aus:

        gcloud container clusters delete  CLUSTER_NAME \
            --project=PROJECT_ID \
            --zone=CLUSTER_LOCATION
        
      2. Geben Sie für die Eingabeaufforderung Möchten Sie fortfahren (J/N)? J ein.

        Nach einigen Minuten wird folgende Ausgabe angezeigt:

        Deleting cluster CLUSTER_NAME...done.
        Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
        

    Nächste Schritte

    Mehr zu folgenden Themen: