In dieser Anleitung wird erläutert, wie Sie die Beispielanwendung Online Boutique für Anthos Service Mesh installieren. Wenn Sie Anthos Service Mesh nicht installiert haben, lesen Sie die Installationsanleitung.
Beispiel herunterladen und bereitstellen
Um die Anwendung bereitzustellen, müssen Sie zuerst die Online Boutique-Manifeste aus dem anthos-service-mesh-packages
-Repository mit kpt
herunterladen. Die Online Boutique-Beispielanwendung im anthos-service-mesh-packages
-Repository wird aus dem ursprünglichen Set von Manifesten im microservices-demo
-Repository modifiziert. Gemäß den Best Practices wird jeder Dienst in einem separaten Namespace mit einem eigenen Dienstkonto bereitgestellt.
Installieren Sie
kpt
, falls noch nicht geschehen:gcloud components install kpt
Laden Sie das Beispiel mit
kpt
herunter:kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/samples/online-boutique \ online-boutique
Erwartete Ausgabe
Package "online-boutique": Fetching https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages@main From https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages * branch main -> FETCH_HEAD Adding package "samples/online-boutique". Fetched 1 package(s).
Rufen Sie das Verzeichnis
online-boutique
auf:cd online-boutique
Erstellen Sie die Namespaces für die Anwendung:
kubectl apply -f 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
Stellen Sie das Beispiel im Cluster bereit:
Erstellen Sie die Dienstkonten und Deployments:
kubectl apply -f 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 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 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
Automatische Sidecar-Injektion aktivieren
Um das automatische Einfügen der Sidecar-Datei (automatische Injektion) für die Beispielanwendung zu aktivieren, müssen Sie ein Überarbeitungslabel zu den Namespace der Beispielanwendung hinzufügen. Welches Label Sie hinzufügen, hängt davon ab, ob Sie verwaltetes Anthos Service Mesh oder die clusterinterne Steuerungsebene installiert haben. Das Überarbeitungslabel wird vom Sidecar-Injektor-Webhook verwendet, um eingefügte Sidecars mit einer bestimmten Überarbeitung der Steuerungsebene zu verknüpfen.
Clusterintern
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 der Anthos Service Mesh-Version entsprechende Überarbeitungslabel aus, z. B.
asm-1118-4
Wenden Sie das Überarbeitungslabel auf die Anwendungs-Namespaces an. Im folgenden Befehl ist REVISION der Wert des Überarbeitungslabels
istiod
, den Sie im vorherigen Schritt notiert 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
Starten Sie die Pods neu:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl rollout restart deployment -n ${ns} done;
Erwartete Ausgabe:
deployment.apps/adservice restarted deployment.apps/cartservice restarted deployment.apps/checkoutservice restarted deployment.apps/currencyservice restarted deployment.apps/emailservice restarted deployment.apps/frontend restarted deployment.apps/loadgenerator restarted deployment.apps/paymentservice restarted deployment.apps/productcatalogservice restarted deployment.apps/recommendationservice restarted deployment.apps/shippingservice restarted
Verwaltetes Dienst-Mesh
Verwenden Sie folgenden Befehl, um die verfügbaren Release-Kanäle zu finden:
kubectl -n istio-system get controlplanerevision
Die Ausgabe sieht in etwa so aus:
NAME AGE asm-managed 6d7h asm-managed-rapid 6d7h
In der Ausgabe ist der Wert in der
NAME
-Spalte das Überarbeitungslabel, das dem verfügbaren Release-Kanal für die Anthos Service Mesh-Version entspricht.Wählen Sie eines der verfügbaren Überarbeitungslabel aus und wenden Sie es auf die Anwendungs-Namespaces an:
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
Wenn Sie auch die optionale von Google verwaltete Datenebene bereitgestellt haben, annotieren Sie die Anwendungs-Namespaces so:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl annotate --overwrite namespace $ns mesh.cloud.google.com/proxy='{"managed":"true"}' done;
Starten Sie die Pods neu:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl rollout restart deployment -n ${ns} done;
Erwartete Ausgabe:
deployment.apps/adservice restarted deployment.apps/cartservice restarted deployment.apps/checkoutservice restarted deployment.apps/currencyservice restarted deployment.apps/emailservice restarted deployment.apps/frontend restarted deployment.apps/loadgenerator restarted deployment.apps/paymentservice restarted deployment.apps/productcatalogservice restarted deployment.apps/recommendationservice restarted deployment.apps/shippingservice restarted
Anwendung freigeben und darauf zugreifen
Die Art und Weise, wie Sie die Anwendung außerhalb des Mesh-Netzwerks freigeben, hängt davon ab, ob Sie ein Ingress-Gateway bereitgestellt haben. Sie können die Anwendung mit einem Istio-Ingress-Gateway oder einem Kubernetes-Dienst freigeben.
Ingress-Gateway verwenden
Wenn Sie ein Ingress-Gateway im Cluster bereitgestellt haben, führen Sie folgende Schritte aus, um die Anwendung über das Gateway verfügbar zu machen.
Stellen Sie
Gateway
undVirtualService
für den Frontend-Dienst bereitkubectl apply -f 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. Ersetzen Sie die Platzhalter durch die folgenden Informationen:
GATEWAY_SERVICE_NAME: der Name des Ingress-Gateway-Dienstes. Wenn Sie das Beispielgateway ohne Änderung bereitgestellt oder das Standardgateway für eingehenden Traffic bereitgestellt haben, lautet der Name
istio-ingressgateway
.GATEWAY_NAMESPACE: Der Namespace, in dem Sie das Ingress-Gateway bereitgestellt haben: Wenn Sie das Standard-Gateway für eingehenden Traffic bereitgestellt haben, lautet der Namespace
istio-system
.
kubectl get service GATEWAY_SERVICE_NAME -n GATEWAY_NAMEPSACE
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
.Rufen Sie die Anwendung in Ihrem Browser auf, um die Installation zu bestätigen:
http://EXTERNAL_IP/
Kein Ingress-Gateway
Wenn Sie kein Ingress-Gateway bereitgestellt oder die Anwendung über einen Kubernetes-Dienst verfügbar gemacht haben, führen Sie folgende Schritte aus:
Stellen Sie einen Dienst vom Typ
LoadBalancer
bereit, um den Frontend-Dienst verfügbar zu machen:kubectl apply -f frontend-external.yaml
Suchen Sie die externe IP-Adresse des Dienstes
frontend-external
:kubectl get service frontend-external -n frontend
Rufen Sie die Anwendung in Ihrem Browser auf, um die Installation zu bestätigen:
http://EXTERNAL_IP/
Für GKE können Sie die Anthos Service Mesh-Beobachtbarkeitsfeatures in der Google Cloud Console untersuchen. Beachten Sie, dass es bis zu 10 Minuten dauern kann, bis die Topologiegrafik die Dienste in Ihrem Mesh-Netzwerk anzeigt.
Bereinigen
Bevor Sie "Online Boutique" löschen, sollten Sie Anthos Service Mesh nach Beispielen: mTLS durchbearbeiten. Dort wird das Beispiel verwendet. Wenn Sie fertig sind, entfernen Sie die Beispielanwendung "Online Boutique" mit folgenden Befehlen:
Löschen Sie die Anwendungs-Namespaces:
kubectl delete -f 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 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