Déployer l'exemple d'application Boutique en ligne

Ce guide explique comment installer l'exemple d'application Online Boutique consacré à Anthos Service Mesh. Si vous n'avez pas installé Anthos Service Mesh, consultez le guide d'installation.

Télécharger et déployer l'exemple

Pour déployer l'application, vous devez d'abord télécharger les fichiers manifestes Online Boutique à partir du dépôt anthos-service-mesh-packages à l'aide de kpt. L'exemple d'application Online Boutique du dépôt anthos-service-mesh-packages est modifié à partir de l'ensemble de fichiers manifestes d'origine dans le dépôt microservices-demo. Conformément aux bonnes pratiques, chaque service est déployé dans un espace de noms distinct avec un compte de service unique.

  1. Si ce n'est pas déjà fait, installez kpt :

    gcloud components install kpt
    
  2. Téléchargez l'exemple à l'aide de kpt :

    kpt pkg get \
      https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/samples/online-boutique \
      online-boutique
    

    Résultat attendu

    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. Accédez au répertoire online-boutique :

    cd online-boutique
    
  4. Créez les espaces de noms pour l'application :

    kubectl apply -f kubernetes-manifests/namespaces
    

    Résultat attendu :

    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. Déployez l'exemple sur le cluster.

    1. Créez les comptes de service et les déploiements :

      kubectl apply -f kubernetes-manifests/deployments
      

      Résultat attendu :

      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. Créez les services :

      kubectl apply -f kubernetes-manifests/services
      

      Résultat attendu :

      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. Créez les entrées de service :

      kubectl apply -f istio-manifests/allow-egress-googleapis.yaml
      

      Résultat attendu :

      serviceentry.networking.istio.io/allow-egress-googleapis created
      serviceentry.networking.istio.io/allow-egress-google-metadata created
      

Activer l'injection side-car automatique

Pour activer l'injection side-car automatique (injection automatique) pour l'exemple d'application, vous devez ajouter un libellé de révision à l'espace de noms de l'exemple. Le libellé que vous ajoutez varie selon que vous avez déployé Anthos Service Mesh géré ou installé le plan de contrôle dans le cluster. Le libellé de révision est utilisé par le webhook d'injecteur side-car pour associer les side-cars injectés à une révision du plan de contrôle particulière.

Dans le cluster

  1. Exécutez la commande suivante pour localiser le libellé de révision sur istiod :

    kubectl get deploy -n istio-system -l app=istiod -o \
      jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
    

    La commande génère le libellé de révision correspondant à la version d'Anthos Service Mesh, par exemple : asm-1118-4

  2. Appliquez le libellé de révision aux espaces de noms de l'application. Dans la commande suivante, REVISION correspond à la valeur du libellé de révision istiod que vous avez notée à l'étape précédente.

    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;
    

    Résultat attendu :

    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. Redémarrez les pods :

    for ns in ad cart checkout currency email frontend loadgenerator \
      payment product-catalog recommendation shipping; do
        kubectl rollout restart deployment -n ${ns}
    done;
    

    Résultat attendu :

    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
    

Maillage de services géré

  1. Exécutez la commande suivante pour localiser les versions disponibles :

    kubectl -n istio-system get controlplanerevision
    

    Le résultat ressemble à ce qui suit :

    NAME                AGE
    asm-managed         6d7h
    asm-managed-rapid   6d7h
    

    Dans le résultat, la valeur de la colonne NAME est le libellé de révision qui correspond à la version disponible pour la version d'Anthos Service Mesh.

  2. Sélectionnez l'un des libellés de révision disponibles et appliquez-le aux espaces de noms de l'application :

    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;
    

    Résultat attendu :

    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. Si vous avez également déployé le plan de données géré par Google facultatif, annotez les espaces de noms de l'application comme suit :

    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;
    
  4. Redémarrez les pods :

    for ns in ad cart checkout currency email frontend loadgenerator \
      payment product-catalog recommendation shipping; do
        kubectl rollout restart deployment -n ${ns}
    done;
    

    Résultat attendu :

    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
    

Exposer l'application et y accéder

La façon dont vous exposez l'application en dehors du maillage varie selon que vous avez ou non déployé une passerelle d'entrée. Vous pouvez choisir d'exposer l'application à l'aide d'une passerelle d'entrée Istio ou à l'aide d'un service Kubernetes.

Utiliser la passerelle d'entrée

Si vous avez déployé une passerelle d'entrée sur le cluster, procédez comme suit pour exposer l'application à l'aide de la passerelle.

  1. Déployez Gateway et VirtualService pour le service d'interface.

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

    Résultat attendu :

    gateway.networking.istio.io/frontend-gateway created
    virtualservice.networking.istio.io/frontend-ingress created
    
  2. Récupérez l'adresse IP externe de la passerelle d'entrée : Remplacez les espaces réservés par les informations suivantes :

    • GATEWAY_SERVICE_NAME : nom du service de passerelle d'entrée. Si vous avez déployé l'exemple de passerelle sans modification ou si vous avez déployé la passerelle d'entrée par défaut, le nom est istio-ingressgateway.

    • GATEWAY_NAMESPACE : espace de noms dans lequel vous avez déployé la passerelle d'entrée. Si vous avez déployé la passerelle d'entrée par défaut, l'espace de noms est istio-system.

    kubectl get service GATEWAY_SERVICE_NAME  -n GATEWAY_NAMEPSACE
    

    Le résultat est semblable à :

    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
    

    Dans cet exemple, l'adresse IP de la passerelle d'entrée est 35.239.7.64.

  3. Accédez à l'application dans votre navigateur pour confirmer l'installation :

    http://EXTERNAL_IP/
    

Aucune passerelle d'entrée

Si vous n'avez pas déployé de passerelle d'entrée ou choisi d'exposer l'application à l'aide d'un service Kubernetes, procédez comme suit :

  1. Déployez un service de type LoadBalancer pour exposer le service d'interface.

    kubectl apply -f frontend-external.yaml
    
  2. Recherchez l'adresse IP externe du service frontend-external :

    kubectl get service frontend-external -n frontend
    
  3. Accédez à l'application dans votre navigateur pour confirmer l'installation :

    http://EXTERNAL_IP/
    

Vous pouvez explorer les fonctionnalités d'observabilité d'Anthos Service Mesh pour GKE dans la console Google Cloud. Notez que l'affichage des services de votre maillage dans le graphique de topologie peut prendre jusqu'à 10 minutes.

Effectuer un nettoyage

Si vous souhaitez suivre le tutoriel Exemple avec Anthos Service Mesh : mTLS, il est conseillé de le faire avant de supprimer Online Boutique, car il utilise cet exemple. Lorsque vous avez terminé, exécutez les commandes suivantes pour supprimer l'exemple Online Boutique :

  1. Supprimez les espaces de noms de l'application :

    kubectl delete -f kubernetes-manifests/namespaces
    

    Résultat attendu :

    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. Supprimez les entrées de service :

    kubectl delete -f istio-manifests/allow-egress-googleapis.yaml
    

    Résultat attendu :

    serviceentry.networking.istio.io "allow-egress-googleapis" deleted
    serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
    

Étape suivante