Anthos Service Mesh auf einem GKE Autopilot-Cluster bereitstellen


In dieser Anleitung wird beschrieben, wie Sie verwaltetes Anthos Service Mesh in einem GKE Autopilot-Cluster (Google Kubernetes Engine) einrichten. Anthos Service Mesh ist ein vollständig verwaltetes Service Mesh, das auf Istio basiert.

In dieser Anleitung erfahren Sie, wie Sie ein produktionsfertiges Service Mesh konfigurieren, das auf einem einzelnen GKE Autopilot-Cluster mit Standardeinstellungen ausgeführt wird. Wir empfehlen Ihnen außerdem, beim Entwerfen Ihrer Umgebung auch den vollständigen Bereitstellungsleitfaden für Anthos Service Mesh zu lesen.

Vorteile der Ausführung von verwaltetem Anthos Service Mesh mit GKE Autopilot

Wenn Sie GKE im Autopilot-Modus verwenden, übernimmt Google die Einrichtung und Verwaltung Ihres Clusters automatisch. Im Autopilot-Modus wird der Betrieb eines Clusters optimiert und Sie können sich auf Ihre Anwendungen konzentrieren. Auf die gleiche Weise ist das verwaltete Anthos Service Mesh ein vollständig verwaltetes Service Mesh, das Sie mit einigen Schritten bereitstellen können.

  • Sie stellen verwaltetes Anthos Service Mesh mit der Fleet API bereit, ohne clientseitige Tools wie istioctl zu benötigen.
  • Anthos Service Mesh fügt Sidecar-Proxys automatisch in Arbeitslasten ein, ohne dass erhöhte Berechtigungen für Ihre Container gewährt werden müssen.
  • Sie können umfangreiche Dashboards für Ihr Mesh-Netzwerk und Ihre Dienste ohne zusätzliche Konfiguration aufrufen und diese Messwerte dann verwenden, um Service Level Objectives (SLOs) und Benachrichtigungen zu konfigurieren und den Zustand Ihrer Anwendungen zu überwachen.
  • Die verwaltete Anthos Service Mesh-Steuerungsebene wird automatisch aktualisiert, damit Sie die neuesten Sicherheitspatches und Features erhalten.
  • Die von Anthos Service Mesh verwaltete Datenebene aktualisiert die Sidecar-Proxys in Ihren Arbeitslasten automatisch, sodass Sie Dienste nicht selbst neu starten müssen, wenn Proxy-Upgrades und Sicherheitspatches verfügbar sind.
  • Anthos Service Mesh ist ein unterstütztes Produkt und kann mit standardmäßigen Open-Source-Istio-APIs konfiguriert werden. Siehe Unterstützte Funktionen.

Lernziele

  • Erstellen Sie einen GKE Autopilot-Cluster
  • Verwaltetes Anthos Service Mesh mit der Fleet API bereitstellen
  • Mesh-Ingress-Gateways in einem dedizierten Namespace bereitstellen
  • Beispielanwendung bereitstellen
  • Anthos Service Mesh so konfigurieren, dass die strikte gegenseitige TLS-Authentifizierung (mTLS) für die Dienst-zu-Dienst-Kommunikation erzwungen wird
  • Anthos Service Mesh-Dashboards aufrufen und prüfen, ob Dienste eine Verbindung mit mTLS herstellen

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 der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

Die Software, die Sie für diese Anleitung benötigen, ist in Cloud Shell vorinstalliert, einschließlich kubectl, gcloud CLI, Helm und Terraform. Wenn Sie Cloud Shell nicht verwenden, müssen Sie die gcloud CLI installieren.

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.
  3. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Installieren Sie die Google Cloud CLI.
  7. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  8. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  9. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  10. Gewähren Sie Ihrem Google-Konto Rollen. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus: roles/container.containerAdmin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
    • Ersetzen Sie EMAIL_ADDRESS durch Ihre E-Mail-Adresse.
    • Ersetzen Sie ROLE durch jede einzelne Rolle.

Umgebung einrichten

Sie können Ihre Umgebung mit der gcloud CLI oder Terraform einrichten.

gcloud

  1. Legen Sie Umgebungsvariablen fest:

    PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    
  2. Aktivieren Sie die Mesh API:

    gcloud services enable mesh.googleapis.com
    

    Durch Aktivieren von mesh.googleapis.com werden die folgenden APIs aktiviert:

    API Zweck Kann deaktiviert werden?
    meshconfig.googleapis.com Anthos Service Mesh verwendet die Mesh Configuration API, um Konfigurationsdaten von Ihrem Mesh an Google Cloud weiterzuleiten. Darüber hinaus können Sie durch Aktivieren der Mesh Configuration API auf die Anthos Service Mesh-Seiten in der Google Cloud Console zugreifen und die Anthos Service Mesh-Zertifizierungsstelle (Mesh CA) verwenden. Nein
    meshca.googleapis.com Bezieht sich auf die Anthos Service Mesh-Zertifizierungsstelle, die von verwaltetem Anthos Service Mesh verwendet wird. Nein
    container.googleapis.com Erforderlich zum Erstellen von Google Kubernetes Engine-Clustern (GKE). Nein
    gkehub.googleapis.com Erforderlich zum Verwalten des Mesh-Netzwerks als Flotte. Nein
    monitoring.googleapis.com Erforderlich zum Erfassen von Telemetrie für Mesh-Arbeitslasten. Nein
    stackdriver.googleapis.com Erforderlich für die Verwendung der Dienste-UI. Nein
    opsconfigmonitoring.googleapis.com Erforderlich, um die Services-UI für Cluster außerhalb von Google Cloud zu verwenden. Nein
    connectgateway.googleapis.com Erforderlich, damit die verwaltete Anthos Service Mesh-Steuerungsebene auf Mesh-Arbeitslasten zugreifen kann. Ja*
    trafficdirector.googleapis.com Ermöglicht eine hochverfügbare und skalierbare verwaltete Steuerungsebene. Ja*
    networkservices.googleapis.com Ermöglicht eine hochverfügbare und skalierbare verwaltete Steuerungsebene. Ja*
    networksecurity.googleapis.com Ermöglicht eine hochverfügbare und skalierbare verwaltete Steuerungsebene. Ja*

Terraform

gcloud config set project PROJECT_ID
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
export GOOGLE_CLOUD_PROJECT

GKE-Cluster erstellen

Erstellen Sie einen GKE-Cluster im Autopilot-Modus.

gcloud

  1. Erstellen Sie einen Cluster, der als Mitglied einer Flotte registriert ist:

    gcloud container clusters create-auto asm-cluster \
        --location="us-central1" \
        --enable-fleet
    
  2. Prüfen Sie, ob der Cluster bei der Flotte registriert ist:

    gcloud container fleet memberships list
    

    Die Ausgabe sieht in etwa so aus:

    NAME: asm-cluster
    EXTERNAL_ID:
    LOCATION: us-central1
    

    Notieren Sie sich den Namen der Mitgliedschaft, da Sie ihn zum Konfigurieren von Anthos Service Mesh benötigen.

Terraform

Zum Erstellen eines GKE-Clusters können Sie die Ressource google_container_cluster verwenden. Sie legen den Block fleet so fest, dass der Cluster beim Erstellen einer Flotte hinzugefügt wird.

resource "google_container_cluster" "cluster" {
  name                = "asm-cluster"
  location            = var.region
  deletion_protection = false # Warning: Do not set deletion_protection to false for production clusters

  enable_autopilot = true
  fleet {
    project = data.google_project.project.name
  }
}

data "google_project" "project" {}

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Verwaltetes Anthos Service Mesh bereitstellen

Sie stellen verwaltetes Anthos Service Mesh mithilfe des Features servicemesh für die Flottenmitgliedschaft für Ihren Cluster bereit.

gcloud

  1. Aktivieren Sie die Anthos Service Mesh-Flottenfunktion für das Projekt:

    gcloud container fleet mesh enable
    
  2. Aktivieren Sie die automatische Verwaltung des Mesh-Netzwerks:

    gcloud container fleet mesh update \
        --management=automatic \
        --memberships=MEMBERSHIP_NAME \
        --location=us-central1
    

    Ersetzen Sie MEMBERSHIP_NAME durch den Mitgliedschaftsnamen, der bei der Registrierung des Clusters bei der Flotte aufgeführt wurde.

Terraform

Zum Aktivieren der Mesh-API können Sie die Ressource google_project_service verwenden.

Sie verwenden die Ressourcen google_gke_hub_feature und google_gke_hub_feature_membership, um verwaltetes Anthos Service Mesh auf Ihrem Cluster zu konfigurieren.

resource "google_project_service" "mesh_api" {
  service = "mesh.googleapis.com"

  disable_dependent_services = true
}

resource "google_gke_hub_feature" "feature" {
  name     = "servicemesh"
  location = "global"

  depends_on = [
    google_project_service.mesh_api
  ]
}

resource "google_gke_hub_feature_membership" "feature_member" {
  location   = "global"
  feature    = google_gke_hub_feature.feature.name
  membership = google_container_cluster.cluster.fleet.0.membership
  membership_location = google_container_cluster.cluster.location
  mesh {
    management = "MANAGEMENT_AUTOMATIC"
  }
}

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Prüfen, ob die Steuerungsebene aktiv ist

Warten Sie, bis controlPlaneManagement.state den Wert ACTIVE hat. Dies kann bis zu 15 Minuten dauern.

watch -n 30 gcloud container fleet mesh describe

Die Ausgabe sieht etwa so aus:

membershipSpecs:
  projects/746296320118/locations/us-central1/memberships/asm-cluster:
    mesh:
      management: MANAGEMENT_AUTOMATIC
membershipStates:
  projects/746296320118/locations/us-central1/memberships/asm-cluster:
    servicemesh:
      controlPlaneManagement:
        details:
        - code: REVISION_READY
          details: 'Ready: asm-managed'
        state: ACTIVE
      dataPlaneManagement:
        details:
        - code: PROVISIONING
          details: Service is provisioning.
        state: PROVISIONING
    state:
      code: OK
      description: 'Revision(s) ready for use: asm-managed.'

Der Abschnitt dataPlaneManagement bleibt im Status PROVISIONING, bis Sie das Ingress-Gateway bereitstellen, da Autopilot-Cluster erst dann Knoten bereitstellen, wenn Sie eine Arbeitslast bereitstellen.

Mesh-Ingress-Gateway bereitstellen

In diesem Abschnitt stellen Sie ein Mesh-Ingress-Gateway bereit, um eingehenden Traffic für die Beispielanwendung zu verarbeiten. Ein Ingress-Gateway ist ein Load-Balancer, der am Rand des Mesh-Netzwerks ausgeführt wird und eingehende oder ausgehende HTTP/TCP-Verbindungen empfängt.

Sie stellen das Gateway in einem dedizierten Namespace bereit und kennzeichnen die Bereitstellung mit einem Label, damit Ihr Gateway von der Anthos Service Mesh-Steuerungsebene sicher verwaltet und automatisch aktualisiert werden kann.

  1. Laden Sie die Anmeldedaten herunter, damit Sie auf den Cluster zugreifen können:

    gcloud container clusters get-credentials asm-cluster --location=us-central1
    
  2. Erstellen Sie einen Namespace für das Gateway-Deployment:

    kubectl create namespace bank-gateways
    
  3. Fügen Sie dem Namespace ein Label hinzu, damit die Anthos Service Mesh-Steuerungsebene die Gateway-Konfiguration automatisch in das Deployment einfügt.

    kubectl label namespace bank-gateways istio-injection=enabled
    
  4. Stellen Sie das Ingress-Gateway im Namespace bereit:

    Helm

    helm repo add istio https://istio-release.storage.googleapis.com/charts
    helm repo update
    helm install --wait --namespace bank-gateways \
        --set resources.requests.cpu=250m \
        --set resources.requests.memory=512Mi \
        --set resources.requests.ephemeral-storage=1Gi \
        --set resources.limits.cpu=250m \
        --set resources.limits.memory=512Mi \
        --set resources.limits.ephemeral-storage=1Gi \
        istio-ingressgateway istio/gateway
    

    kubectl

    kubectl apply -n bank-gateways \
        -k https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages/tree/main/samples/gateways/istio-ingressgateway
    kubectl -n bank-gateway wait "deployment/istio-ingressgateway"  \
        --for=condition=available --timeout=240s
    

    Achten Sie darauf, dass Sie angemessene Ressourcenanfragen stellen, wenn Sie die Bereitstellung in einer Produktionsumgebung vornehmen. GKE Autopilot berücksichtigt nur Ressourcenwerte, die in requests und nicht in limits festgelegt sind. Das Istio-Projekt veröffentlicht Informationen zu Leistung und Skalierbarkeit.

Beispielanwendung bereitstellen

  1. Erstellen Sie einen Kubernetes-Namespace für die Bereitstellung:

    kubectl create namespace bank-sample
    
  2. Fügen Sie dem Namespace ein Label hinzu, damit Anthos Service Mesh Sidecar-Proxys automatisch in die Beispiel-Pods einfügt:

    kubectl label namespace bank-sample istio-injection=enabled
    
  3. Beispielanwendung bereitstellen:

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
    kubectl apply -n bank-sample -f bank-of-anthos/extras/jwt/jwt-secret.yaml
    kubectl apply -n bank-sample -f bank-of-anthos/kubernetes-manifests/
    
  4. Warten Sie, bis die Anwendung bereit ist. Dieser Vorgang dauert einige Minuten.

    watch kubectl -n bank-sample get pods
    

    Wenn die Anwendung bereit ist, sieht die Ausgabe in etwa so aus:

    NAME                                 READY   STATUS    RESTARTS   AGE
    accounts-db-0                        2/2     Running   0          2m16s
    balancereader-5c695f78f5-x4wlz       2/2     Running   0          3m8s
    contacts-557fc79c5-5d7fg             2/2     Running   0          3m7s
    frontend-7dd589c5d7-b4cgq            2/2     Running   0          3m7s
    ledger-db-0                          2/2     Running   0          3m6s
    ledgerwriter-6497f5cf9b-25c6x        2/2     Running   0          3m5s
    loadgenerator-57f6896fd6-lx5df       2/2     Running   0          3m5s
    transactionhistory-6c498965f-tl2sk   2/2     Running   0          3m4s
    userservice-95f44b65b-mlk2p          2/2     Running   0          3m4s
    
  5. Erstellen Sie die Istio-Ressourcen Gateway und VirtualService, um die Anwendung hinter dem Ingress-Gateway verfügbar zu machen:

    kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
    
  6. Rufen Sie einen Link zur Beispielanwendung ab:

    INGRESS_HOST=$(kubectl -n bank-gateways get service istio-ingressgateway \
        -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://$INGRESS_HOST"
    
  7. Klicken Sie in einem Browser auf den Link, um die Beispielanwendung zu öffnen. Melden Sie sich mit dem Standardnutzernamen und -passwort an, um die Anwendung anzuzeigen.

Gegenseitiges TLS erzwingen

Prüfen Sie, ob der strikte Modus für gegenseitiges TLS (mTLS) aktiviert ist. Wenden Sie eine PeerAuthentication-Standardrichtlinie auf das Mesh im Namespace "istio-system" an.

  1. Speichern Sie das folgende Manifest als mesh-peer-authn.yaml:

    apiVersion: "security.istio.io/v1beta1"
    kind: "PeerAuthentication"
    metadata:
      name: "default"
      namespace: "istio-system"
    spec:
      mtls:
        mode: STRICT
    
  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f mesh-peer-authn.yaml
    

Sie können diese Konfiguration durch Erstellen von PeerAuthentication-Ressourcen in bestimmten Namespaces überschreiben.

Anthos Service Mesh-Dashboards entdecken

  1. Rufen Sie in der Google Cloud Console Anthos Service Mesh auf, um die Dashboards für Ihr Mesh aufzurufen:

    Zur Seite "Anthos Service Mesh"

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

    Sie sehen eine Übersichtstabelle mit allen Mikrodiensten in Ihrem Mesh-Netzwerk und eine grafische Visualisierung der Verbindungen zwischen den Mikrodiensten. Für jeden Mikrodienst zeigt die Tabelle drei der goldenen Signale des SRE:

    • Traffic – Anfragen pro Sekunde
    • Fehlerrate – ein Prozentsatz
    • Latenz – Millisekunden

    Diese Messwerte basieren auf dem tatsächlichen Traffic, der von den Mikrodiensten verarbeitet wird. Konstanter Test-Traffic wird automatisch von einem loadgenerator-Client an den frontend-Dienst gesendet, der als Teil der Beispielanwendung bereitgestellt wird. Anthos Service Mesh sendet Messwerte, Logs und (optional) Traces automatisch an Google Cloud Observability.

  3. Klicken Sie in der Tabelle auf den frontend-Dienst, um ein Dashboard für den Dienst aufzurufen. Sie sehen zusätzliche Messwerte für den Dienst und eine Visualisierung der eingehenden und ausgehenden Verbindungen. Sie können auch ein Service Level Object (SLO) erstellen, um den Dienst zu überwachen und Benachrichtigungen zu senden.

Prüfen, ob mTLS aktiviert ist

Klicken Sie auf den Sicherheitslink im Bereich, um eine Sicherheitsübersicht für den Dienst frontend aufzurufen. Die Tabelle und die Visualisierung zeigen ein grünes Schloss-Symbol für jede eingehende und ausgehende Verbindung zwischen Mikrodiensten. Dieses Symbol zeigt an, dass die Verbindung zur Authentifizierung und Verschlüsselung mTLS verwendet.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

So vermeiden Sie, dass Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:

Projekt löschen

    Google Cloud-Projekt löschen:

    gcloud projects delete PROJECT_ID

Einzelne Ressourcen löschen

Wenn Sie ein vorhandenes Projekt verwendet haben und es nicht löschen möchten, können Sie die einzelnen Ressourcen löschen.

gcloud

  1. Löschen Sie die Beispielanwendung und die Gateways:

    kubectl delete namespace bank-sample
    kubectl delete namespace bank-gateways
    
  2. Folgen Sie der Anleitung zum Deinstallieren von Anthos Service Mesh.

  3. Löschen Sie den GKE-Cluster:

    gcloud container clusters delete --region us-central1 asm-cluster --quiet
    

Terraform

Löschen Sie die Ressourcen, die Sie mit Terraform erstellt haben:

  terraform destroy

Nächste Schritte