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.
Si ce n'est pas déjà fait, installez
kpt
:gcloud components install kpt
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).
Accédez au répertoire
online-boutique
:cd online-boutique
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
Déployez l'exemple sur le cluster.
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
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
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 automatique, vous devez ajouter un libellé à vos espaces de noms en utilisant les libellés d'injection par défaut, si le tag par défaut est configuré, ou bien le libellé de révision. Le libellé que vous ajoutez varie selon que vous avez déployé Anthos Service Mesh géré ou que vous avez installé le plan de contrôle intégré au cluster. Le libellé est utilisé par le webhook d'injecteur side-car pour associer les side-cars injectés à une révision spécifique du plan de contrôle.
Dans le cluster
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-1139-10
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
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é
Appliquez le libellé de révision aux espaces de noms de l'application. Dans la commande suivante, le libellé REVISION doit correspondre à la valeur de l'option
--channel
que vous avez spécifiée lors du provisionnement deasmcli
.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
Si vous avez également déployé le plan de données géré 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;
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, comme spécifié dans les conditions préalables, procédez comme suit pour exposer l'application à l'aide de la passerelle.
Déployez
Gateway
etVirtualService
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
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_NAMESPACE
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
.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 :
Déployez un service de type
LoadBalancer
pour exposer le service d'interface.kubectl apply -f frontend-external.yaml
Recherchez l'adresse IP externe du service
frontend-external
:kubectl get service frontend-external -n frontend
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 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 :
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
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