Beispielanwendung Online Boutique bereitstellen
In diesem Leitfaden wird erläutert, wie Sie die Beispielanwendung Online Boutique in einem der folgenden Ordner installieren: Cloud Service Mesh veranschaulichen. 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-Injection-Label 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 ein verwaltetes Cloud Service Mesh verwenden und das optionale verwaltete Datenebene die Anwendungs-Namespaces wie folgt annotieren:
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 die Features der Cloud Service Mesh-Beobachtbarkeit kennenlernen in der Google Cloud Console. 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 by example: mTLS verwendet das Beispiel. 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