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 noch 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.

  1. Installieren Sie kpt, falls noch nicht geschehen:

    gcloud components install kpt
    
  2. 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).
    
  3. Rufen Sie das Verzeichnis online-boutique auf:

    cd online-boutique
    
  4. 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
    
  5. Stellen Sie das Beispiel im Cluster bereit:

    1. 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
      
    2. 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
      
    3. 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 die automatische Einfügung zu aktivieren, versehen Sie Ihre Namespaces mit den Standard-Injektionslabels, wenn das Standard-Tag eingerichtet ist, oder Sie wenden das Überarbeitungslabel auf Ihren Namespace an. Welches Label Sie hinzufügen, hängt davon ab, ob Sie verwaltetes Cloud 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

  1. 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 Cloud Service Mesh-Version entspricht, z. B. asm-1187-26.

  2. 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
    
  3. 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

  1. Wenden Sie das Überarbeitungslabel auf die Anwendungs-Namespaces an. Im folgenden Befehl muss das Label REVISION der Wert Ihres verwalteten Cloud Service Mesh-Release-Kanals sein: asm-managed für regulär, asm-managed-rapid für schnell oder asm-managed-stable für stabil.

    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
    
  2. Wenn Sie auch 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;
    
  3. 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.

  1. Stellen Sie Gateway und VirtualService für den Frontend-Dienst bereit

    kubectl apply -f istio-manifests/frontend-gateway.yaml
    

    Erwartete Ausgabe:

    gateway.networking.istio.io/frontend-gateway created
    virtualservice.networking.istio.io/frontend-ingress created
    
  2. 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.

  3. 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:

  1. Stellen Sie einen Dienst vom Typ LoadBalancer bereit, um den Frontend-Dienst verfügbar zu machen:

    kubectl apply -f frontend-external.yaml
    
  2. Suchen Sie die externe IP-Adresse des Dienstes frontend-external:

    kubectl get service frontend-external -n frontend
    
  3. 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:

  1. 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
    
  2. 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
    

Nächste Schritte