In dieser Anleitung installieren Sie Anthos Service Mesh 1.12.9-asm.3 mithilfe des von Google bereitgestellten asmcli
-Tools in einem neuen GKE-Cluster (Google Kubernetes Engine). In dieser Anleitung wird Folgendes beschrieben:
- Google Cloud-Projekt konfigurieren
- GKE-Cluster mit der Mindestanzahl von vCPUs erstellen, die von Anthos Service Mesh benötigt werden
- Anthos Service Mesh mit einer clusterinternen Steuerungsebene installieren
- Beispielanwendung bereitstellen, um Telemetriedaten auf den Anthos Service Mesh-Dashboards in der Google Cloud Console aufzurufen
- Beispielanwendung verfügbar machen und darauf zugreifen
Um die Kurzanleitung zu vereinfachen und nicht mehrere Pfade zu haben, wurden folgende Entscheidungen getroffen:
- Anthos Service Mesh-Zertifizierungsstelle (Mesh CA) aktivieren
- 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.
Nach Abschluss dieser Kurzanleitung können Sie weitere Kosten durch das Löschen des Clusters vermeiden. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine API.
- 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 edit klicken.
Emacs, Vim oder Nano, auf die Sie in Cloud Shell über die Befehlszeile zugreifen.
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Lokaler Linux-Computer
Die folgenden Tools müssen installiert sind:
- Die Google Cloud CLI
- Die Standard-Befehlszeilentools:
awk
,curl
,grep
,sed
undtr
. - git
- kpt
- kubectl
- jq
Authentifizieren Sie sich mit Google Cloud-CLI:
gcloud auth login --project PROJECT_ID
Aktualisieren Sie die Komponenten:
gcloud components update
Prüfen Sie, ob sich
git
in Ihrem Pfad befindet, damitkpt
es finden kann.
GKE-Cluster erstellen
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
- CLUSTER_NAME: Der Name Ihres Clusters. Der Name darf nur kleingeschriebene, alphanumerische Zeichen und
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.
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.
Laden Sie die Version herunter, mit der Anthos Service Mesh 1.12.9 in das aktuelle Arbeitsverzeichnis installiert wird:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.12 > 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
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.
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
Aktivieren Sie die automatische Einfügung auf dem Gateway. Welche Schritte erforderlich sind, hängt davon ab, ob Sie Standardlabels für Einfügungen (Beispiel:
istio-injection=enabled
) oder die Überarbeitungslabel im Gateway-Namespace verwenden möchten. Das Standard-Überarbeitungs-Tag und das Überarbeitungslabel werden vom Sidecar-Injektor-Webhook dazu verwendet, eingefügte Proxys einer bestimmten Überarbeitung der Steuerungsebene zuzuordnen.Standard-Injektionslabels
Wenden Sie die Standard-Injektionslabels auf den Namespace an.
kubectl label namespace GATEWAY_NAMESPACE istio-injection=enabled istio.io/rev-
Überarbeitungslabel
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-1129-3
Wenden Sie das Überarbeitungslabel auf den Namespace an. Im folgenden Befehl ist
REVISION
der Wert des Überarbeitungslabelsistiod
, den Sie im vorherigen Schritt notiert haben.kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev=REVISION --overwrite
Erwartete Ausgabe:
namespace/GATEWAY_NAMESPACE labeled
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
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.
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
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
Stellen Sie die Beispielanwendung im Cluster bereit:
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
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
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.
Stellen Sie
Gateway
undVirtualService
für den Frontend-Dienst bereitkubectl 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
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
.- GATEWAY_SERVICE_NAME: Der Name des Ingress-Gateway-Dienstes. Wenn Sie das Beispiel-Gateway ohne Änderung bereitgestellt haben, wäre dies
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.
Wechseln Sie in der Google Cloud Console zu Anthos Service Mesh.
Wählen Sie das Google Cloud-Projekt aus der Drop-down-Liste in der Menüleiste aus.
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:
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
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:
Führen Sie dazu diesen Befehl aus:
gcloud container clusters delete CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
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:
- Clusteranforderungen
- Optionen und Flags des
asmcli
-Tools - Dienste bereitstellen
- In dieser Anleitung verwendete
gcloud
-Befehle