In dieser Anleitung wird beschrieben, wie Sie verwaltetes Cloud Service Mesh in einem GKE Autopilot-Cluster (Google Kubernetes Engine) einrichten. Cloud 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 Cloud Service Mesh zu lesen.
Vorteile der Ausführung von verwaltetem Cloud 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 Cloud Service Mesh ein vollständig verwaltetes Service Mesh, das Sie mit einigen Schritten bereitstellen können.
- Sie stellen verwaltetes Cloud Service Mesh mit der Fleet API bereit, ohne clientseitige Tools wie
istioctl
zu benötigen. - Cloud 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 Cloud Service Mesh-Steuerungsebene wird automatisch aktualisiert, damit Sie die neuesten Sicherheitspatches und Features erhalten.
- Die von Cloud 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.
- Cloud Service Mesh ist ein unterstütztes Produkt und kann mit standardmäßigen Open-Source-Istio-APIs konfiguriert werden. Siehe Unterstützte Funktionen.
Ziele
- Erstellen Sie einen GKE Autopilot-Cluster
- Verwaltetes Cloud Service Mesh mit der Fleet API bereitstellen
- Mesh-Ingress-Gateways in einem dedizierten Namespace bereitstellen
- Beispielanwendung bereitstellen
- Cloud Service Mesh so konfigurieren, dass die strikte gegenseitige TLS-Authentifizierung (mTLS) für die Dienst-zu-Dienst-Kommunikation erzwungen wird
- Cloud 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.
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.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.containerAdmin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Umgebung einrichten
Sie können Ihre Umgebung mit der gcloud CLI oder Terraform einrichten.
gcloud
Legen Sie Umgebungsvariablen fest:
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
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
Cloud 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 Cloud Service Mesh-Seiten in der Google Cloud Console zugreifen und die Cloud Service Mesh-Zertifizierungsstelle verwenden. Nein meshca.googleapis.com
Bezieht sich auf die Cloud Service Mesh-Zertifizierungsstelle, die von verwaltetem Cloud 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 Cloud 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
Erstellen Sie einen Cluster, der als Mitglied einer Flotte registriert ist:
gcloud container clusters create-auto asm-cluster \ --location="us-central1" \ --enable-fleet
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 Cloud 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.
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Verwaltetes Cloud Service Mesh bereitstellen
Sie stellen verwaltetes Anthos Service Mesh mithilfe des Features servicemesh
für die Flottenmitgliedschaft für Ihren Cluster bereit.
gcloud
Aktivieren Sie die Cloud Service Mesh-Flottenfunktion für das Projekt:
gcloud container fleet mesh enable
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.
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 Cloud Service Mesh-Steuerungsebene sicher verwaltet und automatisch aktualisiert werden kann.
Laden Sie die Anmeldedaten herunter, damit Sie auf den Cluster zugreifen können:
gcloud container clusters get-credentials asm-cluster --location=us-central1
Erstellen Sie einen Namespace für das Gateway-Deployment:
kubectl create namespace bank-gateways
Fügen Sie dem Namespace ein Label hinzu, damit die Cloud Service Mesh-Steuerungsebene die Gateway-Konfiguration automatisch in das Deployment einfügt.
kubectl label namespace bank-gateways istio-injection=enabled
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 inlimits
festgelegt sind. Das Istio-Projekt veröffentlicht Informationen zu Leistung und Skalierbarkeit.
Beispielanwendung bereitstellen
Erstellen Sie einen Kubernetes-Namespace für die Bereitstellung:
kubectl create namespace bank-sample
Fügen Sie dem Namespace ein Label hinzu, damit Cloud Service Mesh Sidecar-Proxys automatisch in die Beispiel-Pods einfügt:
kubectl label namespace bank-sample istio-injection=enabled
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/
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
Erstellen Sie die Istio-Ressourcen
Gateway
undVirtualService
, 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
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"
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.
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
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.
Cloud Service Mesh-Dashboards ansehen
Rufen Sie in der Google Cloud Console Cloud Service Mesh auf, um die Dashboards für Ihr Mesh aufzurufen:
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 denfrontend
-Dienst gesendet, der als Teil der Beispielanwendung bereitgestellt wird. Cloud Service Mesh sendet Messwerte, Logs und (optional) Traces automatisch an Google Cloud Observability.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
Delete a Google Cloud project:
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
Löschen Sie die Beispielanwendung und die Gateways:
kubectl delete namespace bank-sample kubectl delete namespace bank-gateways
Folgen Sie der Anleitung zum Deinstallieren von Cloud Service Mesh.
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