Migrer un plan de contrôle intégré au cluster vers un plan de contrôle géré sur un nouveau cluster
Ce tutoriel explique comment migrer une application d'un cluster Google Kubernetes Engine (GKE) utilisant Cloud Service Mesh intégré au cluster vers un nouveau cluster qui utilise Cloud Service Mesh géré, le maillage de services entièrement géré et compatible avec Istio de Google.
Dans ce tutoriel, vous allez :
- Créer un cluster Google Kubernetes Engine, puis installer Cloud Service Mesh intégré au cluster et la passerelle d'entrée Cloud Service Mesh sur le cluster. Ce cluster servira de cluster existant à partir duquel vous souhaitez migrer.
- Déployer l'exemple d'application Boutique en ligne sur le cluster avec Cloud Service Mesh intégré au cluster.
- Créer un autre cluster Google Kubernetes Engine dans le même Google Cloud projet.
- Provisionner Cloud Service Mesh géré sur le deuxième cluster et déployer la passerelle d'entrée Cloud Service Mesh.
- Déployer Boutique en ligne sur le cluster avec Cloud Service Mesh géré pour répliquer le déploiement à partir du cluster avec Cloud Service Mesh intégré au cluster.
- Transférer 50 % du trafic utilisateur du cluster avec Cloud Service Mesh intégré au cluster vers le cluster avec Cloud Service Mesh géré à l'aide des fonctionnalités de répartition du trafic d'Istio sur le cluster avec Cloud Service Mesh intégré au cluster.
- Terminer la migration de Cloud Service Mesh intégré au cluster vers Cloud Service Mesh géré en faisant pointer l'entrée du système de noms de domaine (DNS) du cluster avec Cloud Service Mesh intégré au cluster vers le cluster avec Cloud Service Mesh géré.
Déploiement Canary
Le "déploiement Canary" est une technique utilisée dans le développement de logiciels pour tester une nouvelle version d'un logiciel avant de la publier pour tous les utilisateurs. Il s'agit d'augmenter progressivement le pourcentage de trafic envoyé à la nouvelle version. Dans ce tutoriel, vous allez configurer un nouveau cluster avec Cloud Service Mesh géré et y transférer progressivement le trafic utilisateur. Vous commencerez par diriger 0 % du trafic utilisateur vers le nouveau cluster, puis 50 % et, enfin, 100 %. En production, vous devez utiliser des incréments plus petits et plus nombreux. Si, à un moment donné, vous constatez que le nouveau cluster n'est pas en mesure de gérer un pourcentage de trafic, vous pouvez effectuer un rollback en réduisant le pourcentage à 0 %.
Plan de contrôle Canary ou cluster Canary
Il existe deux stratégies couramment utilisées pour les migrations de Cloud Service Mesh intégré au cluster vers Cloud Service Mesh géré :
- Migration vers un cluster Canary : dans cette stratégie, vous créez un cluster, puis vous provisionnez Cloud Service Mesh géré dessus.
- Migration vers un plan de contrôle Canary : dans cette stratégie, vous provisionnez Cloud Service Mesh géré sur le même cluster qu' Istio. Il ne s'agit pas d'un chemin de migration compatible avec Cloud Service Mesh.
Dans ce tutoriel, vous allez découvrir la stratégie de migration vers un cluster Canary.
Coûts
Ce tutoriel utilise les composants facturables suivants de Google Cloud:
Une fois que vous aurez terminé ce tutoriel, évitez de payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Connectez-vous à votre Google Cloud compte. Si vous n'avez jamais utilisé Google Cloud, créez un compte pour évaluer les performances de nos produits dans des scénarios réels. Les nouveaux clients bénéficient également de 300 $de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Lancer Cloud Shell
Dans ce tutoriel, vous allez utiliser Cloud Shell, un shell environnement hébergé sur Google Cloud qui vous permet de gérer vos Google Cloud ressources.
Cloud Shell est préinstallé avec les outils de ligne de commande, Google Cloud CLI, kubectl et istioctl. gcloud CLI fournit l'interface CLI principale pour Google Cloud.
Ouvrez une session Cloud Shell. En haut à droite de cette page, cliquez sur terminal , puis sur Confirmer. Une session Cloud Shell s'ouvre dans un cadre situé en bas de la page. Exécutez les commandes suivantes dans cette session Cloud Shell session.
Télécharger l'exemple de code
Clonez les dépôts Git contenant les ressources Kubernetes et Istio que vous allez utiliser :
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Configurer le cluster avec Cloud Service Mesh intégré au cluster
Créer le cluster et installer Cloud Service Mesh intégré au cluster
Dans la section, vous allez créer votre cluster qui utilise Cloud Service Mesh intégré au cluster. En pratique, il s'agit du ou des clusters que vous utilisez déjà.
Remplacez
PROJECT_IDpar l' ID de votre projet, puis créez un nouveau cluster :gcloud container clusters create cluster-with-in-cluster-asm \ --project=PROJECT_ID \ --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool=PROJECT_ID.svc.id.googRenommez le contexte de cluster pour faciliter l'utilisation du cluster :
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \ cluster-with-in-cluster-asmVérifiez que le contexte de cluster a été renommé :
kubectl config get-contexts --output="name"Téléchargez la version qui installe Cloud Service Mesh 1.22.8 dans le répertoire de travail actuel :
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.22 > asmcliVous serez invité à saisir "y", puis à appuyer sur Entrée.
Le résultat est semblable à :
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701kRendez le script
asmcliexécutable :chmod +x asmcliInstallez Cloud Service Mesh intégré au cluster à l'aide de
asmcli:./asmcli install \ --project_id PROJECT_ID \ --cluster_name cluster-with-in-cluster-asm \ --cluster_location us-central1-a \ --output_dir . \ --enable_all \ --ca mesh_caL'exécution de l'outil
asmclipeut prendre plusieurs minutes. L'outil génère des messages d'information pour que vous puissiez suivre sa progression.En cas de réussite, le résultat est semblable à :
... asmcli: Successfully installed ASM.
Déployer la passerelle d'entrée de Cloud Service Mesh
Vous allez déployer la passerelle d'entrée de Cloud Service Mesh dans un espace de noms distinct appelé
asm-ingress. Créez l'espace de noms :kubectl \ --context cluster-with-in-cluster-asm \ create namespace asm-ingressUtilisez l'étiquette
istio.io/rev=asm-1228-5pour ajouter l'espace de nomsasm-ingressau maillage de services et activer l'injection automatique de proxy side-car.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1228-5Le résultat est semblable à :
namespace/asm-ingress labeledDéployez la passerelle d'entrée Cloud Service Mesh :
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yamlLe résultat est semblable à :
serviceaccount/asm-ingressgateway created service/asm-ingressgateway created deployment.apps/asm-ingressgateway created gateway.networking.istio.io/asm-ingressgateway created
Déployer Online Boutique
Vous allez déployer Boutique en ligne dans un espace de noms distinct appelé
onlineboutique. Créez l'espace de noms :kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutiqueUtilisez l'étiquette
istio.io/rev=asm-1228-5pour ajouter l'espace de nomsonlineboutiqueau maillage de services et activer l'injection automatique de proxy side-car.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1228-5Le résultat est semblable à :
namespace/onlineboutique labeledDéployez les 12 services de Boutique en ligne, y compris le générateur de charge qui imite le trafic utilisateur :
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yamlRécupérez l'adresse IP externe de la passerelle d'entrée Cloud Service Mesh :
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'Copiez l'adresse IP externe de la passerelle d'entrée, puis accédez-y dans votre navigateur Web. L'exemple d'application Boutique en ligne s'affiche.
Configurer le nouveau cluster avec Cloud Service Mesh géré
Créer le cluster et provisionner Cloud Service Mesh géré
Dans cette section, vous allez créer le cluster vers lequel vous allez migrer. Vous allez provisionner Cloud Service Mesh géré et déployer Boutique en ligne afin de répliquer les déploiements à partir du cluster qui utilise Cloud Service Mesh intégré au cluster.
Créez un cluster :
gcloud container clusters create cluster-with-csm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.googRenommez le contexte de cluster pour faciliter l'utilisation du cluster :
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-csm \ cluster-with-csmVérifiez que le contexte de cluster a été renommé :
kubectl config get-contexts --output="name"Activez Cloud Service Mesh sur le parc de votre projet. Un parc est un regroupement logique de clusters Kubernetes et d'autres ressources que vous pouvez gérer ensemble.
gcloud container fleet mesh enable --project PROJECT_IDLe résultat est semblable à :
Waiting for Feature Service Mesh to be created...done.Enregistrez le cluster dans le parc du projet :
gcloud container fleet memberships register cluster-with-csm-membership \ --gke-cluster=us-central1-a/cluster-with-csm \ --enable-workload-identity \ --project PROJECT_IDLe résultat est semblable à :
Waiting for membership to be created...done. Finished registering to the Fleet.Activez Cloud Service Mesh géré sur le cluster :
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_IDLe résultat est semblable à :
Waiting for Feature Service Mesh to be updated...done.Vérifiez que Cloud Service Mesh géré a été provisionné pour le cluster et qu'il est prêt à être utilisé :
gcloud container fleet mesh describe --project PROJECT_IDIl peut s'écouler environ 10 minutes avant que Cloud Service Mesh ne soit provisionné et prêt à être utilisé sur le cluster. Si
controlPlaneManagement.state: DISABLEDoucontrolPlaneManagement.state: PROVISIONINGs'affiche, vous devez relancer la commande précédente toutes les deux ou trois minutes jusqu'à ce quecontrolPlaneManagement.state: ACTIVEs'affiche.Le résultat est semblable à :
createTime: '2022-07-06T01:05:39.110120474Z' membershipSpecs: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. state: ACTIVE state: code: OK description: 'Revision(s) ready for use: asm-managed.' updateTime: '2022-07-06T01:19:24.243993678Z' name: projects/your-project-id/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-07-06T01:19:27.475885687Z'
Déployer la passerelle d'entrée de Cloud Service Mesh
Vous allez déployer la passerelle d'entrée de Cloud Service Mesh dans un espace de noms distinct appelé
asm-ingress. Créez l'espace de noms :kubectl \ --context cluster-with-csm \ create namespace asm-ingressUtilisez l'étiquette
istio.io/rev=asm-managedpour ajouter l'espace de nomsasm-ingressau maillage de services et activer l'injection automatique de proxy side-car.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'Déployez la passerelle d'entrée Cloud Service Mesh :
kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yamlLe résultat est semblable à :
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Déployer Online Boutique
Vous allez déployer Boutique en ligne dans un espace de noms distinct appelé
onlineboutique. Créez l'espace de noms :kubectl \ --context cluster-with-csm \ create namespace onlineboutiqueUtilisez l'étiquette
istio.io/rev=asm-managedpour ajouter l'espace de nomsonlineboutiqueau maillage de services et activer l'injection automatique de proxy side-car.kubectl \ --context cluster-with-csm \ label namespace onlineboutique 'istio.io/rev=asm-managed'Déployez les 12 services de Boutique en ligne, y compris le générateur de charge qui imite le trafic utilisateur :
kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yamlRécupérez l'adresse IP externe de la passerelle d'entrée Cloud Service Mesh :
kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'Copiez l'adresse IP externe du service
asm-ingressgateway, puis accédez-y dans votre navigateur Web. L'exemple d'application Boutique en ligne s'affiche. Vous utiliserez l'adresse IP externe dans la section suivante. Copiez-la donc dans une variable d'environnement :export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \ kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Tester le cluster avec Cloud Service Mesh à l'aide d'un déploiement Canary
Dans cette section, vous allez configurer le cluster avec Cloud Service Mesh intégré au cluster de sorte que 50 % du trafic utilisateur vers Boutique en ligne soit transféré vers l'instance de Boutique en ligne sur le cluster avec Cloud Service Mesh géré. Pour ce faire, vous allez déployer deux ressources Istio sur le cluster avec Cloud Service Mesh intégré au cluster :
- ServiceEntry pour informer Cloud Service Mesh intégré au cluster du point de terminaison Online Boutique du cluster Cloud Service Mesh géré
- VirtualService pour indiquer à la passerelle d'entrée Cloud Service Mesh intégré au cluster de répartir le trafic à 50/50.
Définissez l'adresse IP de la passerelle d'entrée du cluster Cloud Service Mesh géré dans la ressource
ServiceEntry:sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM}/" anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yamlDéployez
ServiceEntrysur le cluster avec Cloud Service Mesh intégré au cluster :kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yamlDéployez
VirtualServicesur le cluster avec Cloud Service Mesh intégré au cluster :kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yamlAccédez à l'adresse IP de la passerelle d'entrée du cluster avec Cloud Service Mesh intégré au cluster dans votre navigateur Web :
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get serviceActualisez la page d'accueil de Boutique en ligne plusieurs fois et vérifiez le pied de page à chaque fois. Notez que 50 % des requêtes sont gérées par un pod sur le cluster avec Cloud Service Mesh géré.
Migrer vers le cluster avec Cloud Service Mesh géré
Cette section suppose que vous possédez un nom de domaine et que vous avez accès à ses paramètres DNS (serveur de noms de domaine).
Ajoutez un enregistrement A aux paramètres DNS pour faire pointer le nom de domaine (par exemple, example.com) vers l'adresse IP de la passerelle d'entrée s'exécutant sur le cluster avec Cloud Service Mesh intégré au cluster.
Accédez à Boutique en ligne en accédant au nom de domaine dans votre navigateur Web.
Réduisez la valeur TTL (Time To Live) de l'enregistrement DNS pour vous assurer de pouvoir rétablir rapidement l'entrée DNS si vous devez effectuer un rollback.
Définissez l'enregistrement A de votre nom de domaine sur l'adresse IP externe de la passerelle d'entrée du cluster avec Cloud Service Mesh géré.
Une fois la migration terminée, supprimez le cluster avec Cloud Service Mesh intégré au cluster :
gcloud container clusters delete cluster-with-in-cluster-asm \ --zone=us-central1-a \ --project=PROJECT_ID
Effectuer un nettoyage
Pour éviter que les ressources utilisées dans ce tutoriel ne soient facturées sur votre Google Cloud compte, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
- Dans la Google Cloud console, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez Arrêter pour supprimer le projet.
Supprimer les ressources
Supprimez le cluster avec Cloud Service Mesh géré :
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Étape suivante
- En savoir plus sur Cloud Service Mesh géré
- Découvrez les bonnes pratiques de sécurité pour Cloud Service Mesh.