Beispielanwendung Online Boutique bereitstellen
In dieser Anleitung wird erläutert, wie Sie die Beispielanwendung Online Boutique für Cloud Service Mesh installieren. Wenn Sie Cloud Service Mesh bereitstellen müssen, lesen Sie den Bereitstellungsleitfaden.
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
Wenden Sie das Standard-Injektionslabel 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-injection=enabled --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 das verwaltete Cloud Service Mesh verwenden und die optionale 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 wie im Vorbereitungsschritt angegeben, ein Ingress-Gateway für den Cluster bereitgestellt haben, führen Sie die folgenden 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 und ersetzen Sie die Platzhalter durch folgende 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_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
.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/
Sie können sich die Cloud Service Mesh-Beobachtbarkeitsfunktionen in der Google Cloud Console ansehen. 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 Cloud Service Mesh anhand von 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