Effectuer une migration depuis Istio 1.11 ou une version ultérieure vers Anthos Service Mesh

Ce tutoriel explique comment migrer une application depuis un cluster Google Kubernetes Engine (GKE) vers un nouveau cluster à l'aide d'Anthos Service Mesh géré, le maillage de services entièrement géré et conforme à Istio de Google.

Dans ce tutoriel, vous allez :

  1. Créer un cluster Google Kubernetes Engine, puis installer Istio et la passerelle d'entrée Istio sur le cluster Ce cluster agira en tant que cluster existant à partir duquel vous ne souhaitez plus être migré.
  2. Déployez l'exemple d'application Online Boutique (Boutique en ligne) sur le cluster avec Istio.
  3. Créer un autre cluster Google Kubernetes Engine dans le même projet Google Cloud
  4. Activez Anthos Service Mesh géré sur le deuxième cluster et déployez la passerelle d'entrée Anthos Service Mesh.
  5. Déployez Online Boutique sur le cluster avec Anthos Service Mesh pour répliquer le déploiement à partir du cluster avec Istio.
  6. Transférez 50% du trafic utilisateur du cluster avec Istio vers le cluster avec Anthos Service Mesh, en utilisant les fonctionnalités de répartition du trafic d'Istio sur le cluster avec Istio.
  7. Terminez la migration d'Istio vers Anthos Service Mesh en faisant pointer l'entrée DNS (Domain Name System) du cluster avec Istio vers le cluster doté d'Anthos Service Mesh.

Le trafic utilisateur est réparti à 50-50 entre un cluster utilisant Istio et un cluster équipé d'Anthos Service Mesh. Chaque cluster contient son propre déploiement de Boutique en ligne.

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 auprès de tous les utilisateurs. Cela implique une augmentation incrémentale du pourcentage de trafic envoyé vers la nouvelle version. Dans ce tutoriel, vous allez configurer un nouveau cluster avec Anthos Service Mesh géré et y transférer progressivement le trafic utilisateur. Vous allez commencer par diriger 0% du trafic utilisateur vers le nouveau cluster, puis 50 % et, enfin, 100%. En production, utilisez des incréments plus petits et plus nombreux. Si, à un moment donné, vous remarquez que le nouveau cluster est incapable de gérer un pourcentage du trafic, vous pouvez effectuer un rollback en réduisant ce pourcentage à 0%.

Plan de contrôle Canary et cluster Canary

Il existe deux stratégies couramment utilisées pour les migrations d'Istio vers Anthos Service Mesh géré:

  • Migration du plan de contrôle Canary: dans cette stratégie, vous provisionnez Anthos Service Mesh géré sur le cluster dans lequel vous avez actuellement installé Istio.
  • Migration d'un cluster Canary: dans cette stratégie, vous créez un cluster, puis y provisionnez Anthos Service Mesh géré.

Dans ce tutoriel, vous allez découvrir la stratégie de migration d'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

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activez les API requises.

    Activer les API

  5. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  7. Activez les API requises.

    Activer les API

Lancer Cloud Shell

Dans ce tutoriel, vous allez utiliser Cloud Shell, un environnement shell hébergé sur Google Cloud, qui vous permet de gérer vos ressources Google Cloud.

Cloud Shell est préinstallé sur les outils de ligne de commande Google Cloud CLI, kubectl et istioctl. La gcloud CLI fournit la CLI principale pour Google Cloud.

Ouvrez une session Cloud Shell en haut à droite de cette page, cliquez sur , puis sur Confirmer. Une session Cloud Shell s'ouvre dans un cadre situé plus bas sur la page. Exécutez les commandes suivantes dans cette session Cloud Shell.

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 Istio

Créer le cluster et installer Istio

Dans la section, vous allez créer un cluster qui utilise Istio. En pratique, il s'agit du ou des clusters que vous utilisez déjà.

  1. Remplacez PROJECT_ID par votre ID de projet et créez un cluster:

    gcloud container clusters create cluster-with-istio \
      --project=PROJECT_ID \
      --zone=us-central1-a \
      --machine-type=e2-standard-2 --num-nodes=3
    
  2. Renommez le contexte du cluster pour faciliter son utilisation:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-istio \
      cluster-with-istio
    
  3. Vérifiez que le contexte du cluster a été renommé:

    kubectl config get-contexts --output="name"
    
  4. Installez Istio sur le cluster. Pour plus de simplicité, vous allez installer le profil par défaut d'Istio et la version qui correspond à votre installation istioctl.

    istioctl install
    

    Vous serez invité à saisir "y", puis à appuyer sur Entrée.

    Le résultat est semblable à :

    This will install the Istio X.Y.Z default profile with ["Istio core" "Istiod" "Ingress gateways"] components into the cluster. Proceed? (y/N)
    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Ingress gateways installed
    ✔ Installation complete
    Making this installation the default for injection and validation.
    

Déployer Online Boutique

  1. Vous allez déployer Online Boutique dans un espace de noms distinct appelé onlineboutique. Créez l'espace de noms:

    kubectl \
      --context cluster-with-istio \
      create namespace onlineboutique
    
  2. Déployez les 12 services d'Online Boutique, qui incluent un générateur de charge qui imite le trafic utilisateur:

    kubectl \
      --namespace=onlineboutique \
      --context=cluster-with-istio \
      apply -f microservices-demo/release/kubernetes-manifests.yaml
    
  3. L'étape précédente a également déployé un service appelé frontend-external (de type LoadBalancer), auquel une adresse IP publique est attribuée. Cependant, vous ne souhaitez autoriser l'entrée publique que via le déploiement de la passerelle d'entrée Istio. Supprimez la ressource de service frontend-external:

    kubectl \
      --namespace=onlineboutique \
      --context=cluster-with-istio \
      delete service frontend-external
    
  4. Déployez une ressource Istio Gateway et une ressource Istio VirtualService pour permettre au trafic public d'accéder à Online Boutique:

    kubectl \
      --namespace=onlineboutique \
      --context=cluster-with-istio \
      apply -f microservices-demo/istio-manifests/frontend-gateway.yaml
    
  5. Obtenez l'adresse IP publique de la passerelle d'entrée Istio:

    kubectl \
      --namespace istio-system \
      --context=cluster-with-istio \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  6. Copiez l'adresse IP publique du service istio-ingressgateway, puis accédez-y via votre navigateur Web. L'application exemple Online Boutique s'affiche.

Configurer le nouveau cluster avec Anthos Service Mesh géré

Créer le cluster et provisionner le service Anthos Service Mesh géré

Dans cette section, vous allez créer le cluster vers lequel vous allez migrer. Vous allez provisionner un service Anthos Service Mesh géré et déployer Online Boutique afin de répliquer les déploiements à partir du cluster qui utilise Istio.

  1. Stockez votre numéro de projet dans une variable d'environnement:

    export PROJECT_NUMBER=$(gcloud projects \
      describe PROJECT_ID --format='get(projectNumber)')
    
  2. Créez un cluster :

    gcloud container clusters create cluster-with-managed-asm \
      --project=PROJECT_ID --zone=us-central1-a \
      --machine-type=e2-standard-4 --num-nodes=2 \
      --workload-pool PROJECT_ID.svc.id.goog \
      --labels mesh_id=proj-${PROJECT_NUMBER}
    
  3. Renommez le contexte du cluster pour faciliter son utilisation:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-managed-asm \
      cluster-with-managed-asm
    
  4. Vérifiez que le contexte du cluster a été renommé:

    kubectl config get-contexts --output="name"
    
  5. Activez Anthos Service Mesh sur le parc de votre projet. Un parc est un regroupement logique de clusters Kubernetes et d'autres ressources pouvant être gérés ensemble.

    gcloud container fleet mesh enable --project PROJECT_ID
    

    Le résultat est semblable à :

    Waiting for Feature Service Mesh to be created...done.
    
  6. Enregistrez le cluster dans le parc du projet :

    gcloud container fleet memberships register cluster-with-managed-asm-membership \
      --gke-cluster=us-central1-a/cluster-with-managed-asm \
      --enable-workload-identity \
      --project PROJECT_ID
    

    Le résultat est semblable à :

    Waiting for membership to be created...done.
    Created a new membership [projects/your-project-id/locations/global/memberships/cluster-with-gke-membership] for the cluster [cluster-with-gke-membership]
    Generating the Connect Agent manifest...
    Deploying the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect]...
    Deployed the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect].
    Finished registering the cluster [cluster-with-gke-membership] with the Fleet.
    
  7. Activez Anthos Service Mesh géré sur le cluster:

    gcloud container fleet mesh update \
      --management automatic \
      --memberships cluster-with-managed-asm-membership \
      --project PROJECT_ID
    

    Le résultat est semblable à :

    Waiting for Feature Service Mesh to be updated...done.
    
  8. Vérifiez qu'Anthos Service Mesh géré a été provisionné pour le cluster et est prêt à être utilisé:

    gcloud container fleet mesh describe --project PROJECT_ID
    

    Il peut s'écouler environ 10 minutes avant qu'Anthos Service Mesh ne soit provisionné et prêt à être utilisé sur le cluster. Si controlPlaneManagement.state: DISABLED ou controlPlaneManagement.state: PROVISIONING s'affiche, vous devez relancer la commande précédente toutes les deux ou trois minutes jusqu'à ce que controlPlaneManagement.state: ACTIVE s'affiche.

    Le résultat est semblable à :

    createTime: '2022-07-06T01:05:39.110120474Z'
    membershipSpecs:
      projects/123456789123/locations/global/memberships/cluster-with-managed-asm-membership:
        mesh:
          management: MANAGEMENT_AUTOMATIC
    membershipStates:
      projects/123456789123/locations/global/memberships/cluster-with-managed-asm-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 Anthos Service Mesh

  1. Vous allez déployer la passerelle d'entrée d'Anthos Service Mesh dans un espace de noms distinct appelé asm-ingress. Créez l'espace de noms:

    kubectl \
      --context cluster-with-managed-asm \
      create namespace asm-ingress
    
  2. Utilisez le libellé istio.io/rev=asm-managed pour ajouter l'espace de noms asm-ingress au maillage de services et activer l'injection automatique du proxy side-car.

    kubectl \
      --context cluster-with-managed-asm \
      label namespace asm-ingress 'istio.io/rev=asm-managed'
    
  3. Déployez la passerelle d'entrée Anthos Service Mesh:

    kubectl \
      --context cluster-with-managed-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml
    kubectl \
      --context cluster-with-managed-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
    

    Le 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

  1. Vous allez déployer Online Boutique dans un espace de noms distinct appelé onlineboutique. Créez l'espace de noms:

    kubectl \
      --context cluster-with-managed-asm \
      create namespace onlineboutique
    
  2. Utilisez le libellé istio.io/rev=asm-managed pour ajouter l'espace de noms onlineboutique au maillage de services et activer l'injection automatique du proxy side-car.

    kubectl \
      --context cluster-with-managed-asm \
      label namespace onlineboutique 'istio.io/rev=asm-managed'
    
  3. Déployez les 12 services d'Online Boutique, y compris le générateur de charge qui imite le trafic utilisateur:

    kubectl \
      --context cluster-with-managed-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml
    kubectl \
      --context cluster-with-managed-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
    
  4. Obtenez l'adresse IP publique de la passerelle d'entrée Anthos Service Mesh:

    kubectl \
      --context cluster-with-managed-asm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Copiez l'adresse IP publique du service asm-ingressgateway et accédez-y via votre navigateur Web. L'application exemple Online Boutique s'affiche. Vous utiliserez l'adresse IP publique dans la section suivante. Copiez-la dans une variable d'environnement:

    export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \
      kubectl \
        --context cluster-with-managed-asm \
        --namespace asm-ingress \
        get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \
      )
    

Tester le cluster avec Anthos Service Mesh à l'aide d'un déploiement Canary

Dans cette section, vous allez configurer le cluster avec Istio de sorte que 50% du trafic utilisateur vers Online Boutique soit transféré vers l'instance Online Boutique sur le cluster avec Anthos Service Mesh géré. Pour ce faire, vous devez déployer deux ressources Istio sur le cluster à l'aide d'Istio:

  • une entrée ServiceEntry pour indiquer à Istio le point de terminaison de la boutique en ligne du cluster Anthos Service Mesh géré ;
  • un VirtualService pour indiquer à la passerelle d'entrée Istio de répartir le trafic par 50 à 50.
  1. Définissez l'adresse IP de la passerelle d'entrée du cluster Anthos 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.yaml
    
  2. Déployez ServiceEntry sur le cluster à l'aide d'Istio:

    kubectl \
      --context cluster-with-istio \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
    
  3. Déployez VirtualService sur le cluster à l'aide d'Istio:

    kubectl \
      --context cluster-with-istio \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service.yaml
    
  4. Accédez à l'adresse IP de la passerelle d'entrée du cluster avec Istio dans votre navigateur Web:

    kubectl \
      --context cluster-with-istio \
      --namespace istio-system \
      get service
    

    Actualisez plusieurs fois la page d'accueil de la boutique en ligne et vérifiez le pied de page à chaque fois. Notez que 50% des requêtes sont traitées par un pod du cluster avec Anthos Service Mesh géré.

Migrer vers le cluster avec Anthos Service Mesh géré

Dans cette section, nous partons du principe que vous possédez un nom de domaine et que vous avez accès à ses paramètres DNS (Domain Name Server).

  1. Ajoutez un enregistrement A aux paramètres DNS pour faire pointer le nom de domaine (tel que example.com) vers l'adresse IP de la passerelle d'entrée exécutée sur le cluster avec Istio.

  2. Accédez à Online Boutique en accédant au nom de domaine dans votre navigateur Web.

  3. Réduisez la valeur TTL (Time To Live) de l'enregistrement DNS pour pouvoir rapidement rétablir l'entrée DNS si vous devez effectuer un rollback.

  4. Définissez l'enregistrement A de votre nom de domaine sur l'adresse IP publique de la passerelle d'entrée du cluster avec Anthos Service Mesh géré.

  5. Une fois la migration effectuée, supprimez le cluster avec Istio:

    gcloud container clusters delete cluster-with-istio \
      --zone=us-central1-a \
      --project=PROJECT_ID
    

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuellement.

Supprimer le projet

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer les ressources

Supprimez le cluster avec Anthos Service Mesh géré:

  gcloud container clusters delete cluster-with-managed-asm \
    --zone=us-central1-a \
    --project=PROJECT_ID

Étapes suivantes