Déployer l'exemple de Bookinfo

Cette page explique comment déployer un exemple d'application sur Cloud Service Mesh. Si vous n'avez pas encore intégré Cloud Service Mesh, consultez le guide d'intégration.

Plusieurs exemples d'applications sont fournis avec l'installation de Cloud Service Mesh. Ce guide vous explique comment déployer l'exemple BookInfo. Il s'agit d'une simple application de librairie fictive composée de quatre services qui fournissent une page produit Web, des détails sur les livres, des avis (avec plusieurs versions du service d'avis) et des notes, le tout géré à l'aide de Cloud Service Mesh. Le code source et tous les autres fichiers utilisés dans cet exemple se trouvent dans le répertoire d'installation de Cloud Service Mesh, dans samples/bookinfo.

Accès au réseau pour les exemples d'images

L'outil asmcli ne vérifie ni n'extrait rien de Docker Hub (docker.io) lors de l'installation du maillage principal. Toutefois, le déploiement d'images de conteneurs tierces après l'installation déclenche le Kubelet pour récupérer des exemples d'images d'application à partir de Docker Hub et du CDN Cloudflare sous-jacent de Docker Hub.

Dans les réseaux restreints ou isolés, ces extractions d'images échouent, sauf si elles sont explicitement prises en charge.

Pour faciliter l'extraction de vos images, choisissez l'une des approches suivantes :

  • Autoriser le trafic de sortie

    Mettez à jour votre pare-feu ou votre proxy pour autoriser le trafic HTTPS (port 443) vers les domaines suivants. Notez que le domaine Cloudflare est requis, car Docker Hub utilise des redirections HTTP 307 pour diffuser les calques d'image.

    • docker.io
    • hub.docker.com
    • *.cloudflarestorage.com
  • Mettre en miroir vers un registre privé

    Pour les environnements entièrement restreints, n'ouvrez pas les ports de pare-feu. À la place, copiez les exemples d'images requis dans votre registre interne et configurez votre cluster pour qu'il utilise votre registre interne.

    Pour obtenir des instructions détaillées sur la configuration dans les environnements GDC, consultez Utiliser un miroir de registre pour les images de conteneur.

Activer l'injection side-car automatique

  1. Activez l'espace de noms pour l'injection : Les étapes dépendent de votre mise en œuvre du plan de contrôle.

    Plan de contrôle géré (TD)

    1. Appliquez les étiquettes d'injection par défaut à l'espace de noms.
    kubectl label namespace default \
        istio.io/rev- istio-injection=enabled --overwrite
    

    Plan de contrôle géré (Istiod)

    Recommandation : Exécutez la commande suivante pour appliquer l'étiquette d'injection par défaut à l'espace de noms :

      kubectl label namespace default \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Si vous utilisez déjà le plan de contrôle Istiod géré : nous vous recommandons d'utiliser l'injection par défaut, mais l'injection basée sur les révisions est acceptée. Suivez les instructions suivantes :

    1. Exécutez la commande suivante pour localiser les canaux de publication disponibles :

      kubectl -n istio-system get controlplanerevision
      

      Le résultat ressemble à ce qui suit :

      NAME                AGE
      asm-managed-rapid   6d7h
      

      REMARQUE : Si deux révisions du plan de contrôle apparaissent dans la liste ci-dessus, supprimez-en une. Il n'est pas possible d'avoir plusieurs canaux de plan de contrôle dans un même cluster.

      Dans le résultat, la valeur de la colonne NAME est l'étiquette de révision qui correspond au canal de publication disponible pour la version de Cloud Service Mesh.

    2. Appliquez l'étiquette de révision à l'espace de noms :

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

    Dans le cluster

    Recommandation : Exécutez la commande suivante pour appliquer l'étiquette d'injection par défaut à l'espace de noms :

      kubectl label namespace default \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Nous vous recommandons d'utiliser l'injection par défaut, mais l'injection basée sur les révisions est acceptée : Suivez les instructions ci-dessous :

    1. Exécutez la commande suivante pour localiser l'étiquette de révision sur istiod :

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. Appliquez l'étiquette de révision à l'espace de noms. Dans la commande suivante, REVISION_LABEL correspond à la valeur du libellé de révision istiod que vous avez notée à l'étape précédente.

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

Déployer l'application

Maintenant que l'injection automatique est activée sur l'espace de noms default, lorsque vous déployez les services de l'application BookInfo, les proxys side-car sont injectés avec chaque service.

  1. Sur la ligne de commande de l'ordinateur sur lequel vous avez installé Cloud Service Mesh, accédez à la racine du répertoire d'installation de Cloud Service Mesh. Si nécessaire, téléchargez le fichier d'installation dans le cluster, qui inclut l'application exemple bookinfo, puis extrayez-le.

  2. Déployez votre application sur l'espace de noms par défaut à l'aide de kubectl :

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. Confirmez que l'application a été correctement déployée en exécutant les commandes suivantes :

    kubectl get services
    

    Sortie :

    NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
    details                    10.0.0.31    <none>        9080/TCP             6m
    kubernetes                 10.0.0.1     <none>        443/TCP              7d
    productpage                10.0.0.120   <none>        9080/TCP             6m
    ratings                    10.0.0.15    <none>        9080/TCP             6m
    reviews                    10.0.0.170   <none>        9080/TCP             6m

    et

    kubectl get pod
    

    Sortie :

    NAME                                        READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17                 2/2       Running   0          6m
    productpage-v1-560495357-jk1lz              2/2       Running   0          6m
    ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
    reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
    reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
    reviews-v3-1813607990-8ch52                 2/2       Running   0          6m
  4. Enfin, définissez le routage de la passerelle d'entrée pour l'application :

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    

    Sortie :

    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created

Valider le déploiement de l'application

Pour vérifier si l'application Bookinfo fonctionne, vous devez envoyer du trafic à la passerelle d'entrée.

  • Si vous avez installé Cloud Service Mesh sur Google Distributed Cloud (logiciel uniquement) pour VMware, obtenez l'adresse IP externe de la passerelle d'entrée que vous avez configurée après l'installation de Cloud Service Mesh.

  • Si vous avez installé Cloud Service Mesh sur GKE, obtenez l'adresse IP externe de la passerelle d'entrée comme suit :

    kubectl get service istio-ingressgateway -n istio-system
    

    Résultat :

    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 du service d'entrée est 35.239.7.64.

Essayer l'application

  1. Vérifiez que l'application Bookinfo s'exécute avec curl :

    curl -I http://EXTERNAL_IP/productpage
    

    Si la réponse affiche 200, cela signifie que l'application fonctionne correctement avec Cloud Service Mesh.

  2. Pour afficher la page Web de Bookinfo, saisissez l'adresse suivante dans votre navigateur :

    http://EXTERNAL_IP/productpage
    

    Si vous actualisez la page plusieurs fois, vous devriez voir différentes versions d'avis affichées sur la page produits, chacune à tour de rôle (étoiles rouges, étoiles noires, aucune étoile).

Maintenant que vous disposez d'une application qui génère du trafic, vous pouvez explorer les pages Cloud Service Mesh dans la console Google Cloud pour consulter les métriques et les autres fonctionnalités d'observabilité.

Nettoyer

Lorsque vous avez terminé de tester l'exemple d'application Bookinfo, supprimez-le de votre cluster.

  1. Désinstallez Bookinfo à l'aide du script suivant :

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. Confirmez l'arrêt :

    kubectl get virtualservices   #-- there should be no virtual services
    kubectl get destinationrules  #-- there should be no destination rules
    kubectl get gateway           #-- there should be no gateway
    kubectl get pods              #-- the Bookinfo pods should be deleted
    

Étape suivante

Obtenez plus d'informations sur l'exemple d'application Bookinfo.