Vous consultez la documentation d'Anthos Service Mesh 1.7. Accédez à la documentation la plus récente ou sélectionnez une autre version disponible :

Migrer d'Istio vers Anthos Service Mesh

Cette page fait partie d'un guide de plusieurs pages qui explique comment migrer d'Istio vers la version 1.7.6 d'Anthos Service Mesh sur un cluster GKE pour un maillage contenant plusieurs clusters dans différents projets Cloud. Pour les migrations sur un réseau maillé à cluster unique ou pour un réseau maillé contenant plusieurs clusters dans le même projet Cloud, consultez la page Installation, migration et mise à niveau pour GKE.

Avant de commencer

Avant d'installer Anthos Service Mesh, assurez-vous de disposer des éléments suivants :

Définir des identifiants et des autorisations

  1. Initialisez votre projet afin de le préparer pour l'installation. Cette commande crée, entre autres, un compte de service pour permettre aux composants du plan de contrôle, tels que le proxy side-car, d'accéder en toute sécurité aux données et aux ressources du projet :

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      "https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize"

    La commande renvoie des accolades vides : {}.

  2. Obtenez des identifiants d'authentification pour interagir avec le cluster : Cette commande définit également le contexte actuel de kubectl sur le cluster.

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  3. Accordez des autorisations d'administrateur de cluster à l'utilisateur actuel. Vous avez besoin de ces autorisations pour créer les règles de contrôle d'accès basé sur les rôles (RBAC) nécessaires pour Anthos Service Mesh :

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"

Si l'erreur "cluster-admin-binding" already exists s'affiche, vous pouvez l'ignorer en toute sécurité et poursuivre avec le cluster-admin-binding existant.

Télécharger le fichier d'installation

    Linux

  1. Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-linux-amd64.tar.gz
  2. Téléchargez le fichier de signature et utilisez openssl pour valider la signature :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.7.6-asm.1-linux-amd64.tar.gz.1.sig istio-1.7.6-asm.1-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    La sortie attendue est Verified OK.

  3. Extrayez le contenu du fichier vers n’importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :
    tar xzf istio-1.7.6-asm.1-linux-amd64.tar.gz

    Cette commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé istio-1.7.6-asm.1, qui contient les éléments suivants :

    • Des exemples d'applications dans le répertoire samples
    • L'outil de ligne de commande istioctl que vous utilisez pour installer Anthos Service Mesh et qui se trouve dans le répertoire bin
    • Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire manifests/profiles

  4. macOS

  5. Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-osx.tar.gz
  6. Téléchargez le fichier de signature et utilisez openssl pour valider la signature :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.6-asm.1-osx.tar.gz.1.sig istio-1.7.6-asm.1-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    La sortie attendue est Verified OK.

  7. Extrayez le contenu du fichier vers n’importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :
    tar xzf istio-1.7.6-asm.1-osx.tar.gz

    Cette commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé istio-1.7.6-asm.1, qui contient les éléments suivants :

    • Des exemples d'applications dans le répertoire samples
    • L'outil de ligne de commande istioctl que vous utilisez pour installer Anthos Service Mesh et qui se trouve dans le répertoire bin
    • Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire manifests/profiles

  8. Windows

  9. Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-win.zip
  10. Téléchargez le fichier de signature et utilisez openssl pour valider la signature :
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.7.6-asm.1-win.zip.1.sig istio-1.7.6-asm.1-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    La sortie attendue est Verified OK.

  11. Extrayez le contenu du fichier vers n’importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :
    tar xzf istio-1.7.6-asm.1-win.zip

    Cette commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé istio-1.7.6-asm.1, qui contient les éléments suivants :

    • Des exemples d'applications dans le répertoire samples
    • L'outil de ligne de commande istioctl que vous utilisez pour installer Anthos Service Mesh et qui se trouve dans le répertoire bin
    • Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire manifests/profiles

  12. Assurez-vous d'être dans le répertoire racine de l'installation d'Anthos Service Mesh.
    cd istio-1.7.6-asm.1
  13. Pour plus de commodité, ajoutez les outils du répertoire /bin à votre variable PATH :
    export PATH=$PWD/bin:$PATH

Préparer les fichiers de configuration des ressources

Lorsque vous exécutez la commande istioctl install, vous spécifiez -f istio-operator.yaml sur la ligne de commande. Ce fichier contient des informations sur le projet et le cluster requis par Anthos Service Mesh. Vous devez télécharger un package contenant istio-operator.yaml et d'autres fichiers de configuration des ressources afin de pouvoir définir les informations sur le projet et le cluster.

Pour préparer les fichiers de configuration des ressources, procédez comme suit :

Mesh CA

  1. Créez un répertoire pour les fichiers de configuration des ressources du package Anthos Service Mesh. Nous vous recommandons d'utiliser le nom du cluster comme nom de répertoire.

  2. Accédez au répertoire dans lequel vous souhaitez télécharger le package Anthos Service Mesh.

  3. Téléchargez le package :

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
    
  4. Définissez l'ID du projet dans lequel le cluster a été créé :

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. Définissez le numéro du projet hôte d'Environ :

    kpt cfg set asm gcloud.project.environProjectNumber ${ENVIRON_PROJECT_NUMBER}
    
  6. Définissez le nom du cluster :

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  7. Définissez la zone ou la région par défaut :

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  8. Définissez le webhook de validation pour utiliser un libellé de révision :

    kpt cfg set asm anthos.servicemesh.rev asm-176-1
    

    Lorsque vous installez Anthos Service Mesh, vous définissez un libellé de révision sur istiod. Vous devez définir la même révision sur le webhook de validation.

  9. Comme les clusters de votre configuration multicluster se trouvent dans différents projets, vous devez configurer les alias de domaine de confiance pour les autres projets qui forment les maillages de services multi-clusters/multiprojets.

    1. Obtenez l'ID de projet de tous les clusters qui se trouveront dans le maillage multicluster/multiprojet.

    2. Pour l'ID de projet de chaque cluster, définissez les alias de domaine de confiance. Par exemple, si vous avez des clusters dans trois projets, exécutez la commande suivante en remplaçant PROJECT_ID_1, PROJECT_ID_2 et PROJECT_ID_3 par l'ID de projet de chaque cluster.

      kpt cfg set asm anthos.servicemesh.trustDomainAliases PROJECT_ID_1.svc.id.goog PROJECT_ID_2.svc.id.goog PROJECT_ID_3.svc.id.goog

      Lorsque vous configurez les clusters dans les autres projets, vous pouvez exécuter la même commande.

      Les alias de domaine de confiance permettent à Mesh CA d'authentifier les charges de travail sur les clusters d'autres projets. En plus de définir les alias de domaine de confiance, vous devez activer l'équilibrage de charge interclusters après avoir installé Anthos Service Mesh.

  10. Affichez les valeurs des setters kpt :

    kpt cfg list-setters asm
    

    La sortie de la commande ressemble à ceci :

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gcr.io/gke-release/asm/canonical-service-controller:1.7.6-asm.1
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gcr.io/gke-release/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               1.7.6-asm.1
    anthos.servicemesh.trustDomainAliases                [example-project-12345.svc.id.goog,example-project-23456.svc.id.goog,example-project-98765.svc.id.goog]
    base-dir                                             base
    gcloud.compute.location                              us-central
    gcloud.compute.network                               default
    gcloud.compute.subnetwork                            default
    gcloud.container.cluster                             example-cluster-1
    gcloud.container.cluster.clusterSecondaryRange
    gcloud.container.cluster.releaseChannel              REGULAR
    gcloud.container.cluster.servicesSecondaryRange
    gcloud.container.nodepool.max-nodes                  4
    gcloud.core.project                                  example-project-12345
    gcloud.project.environProjectID                      ENVIRON_PROJECT_ID
    gcloud.project.environProjectNumber                  1234567890123
    gcloud.project.projectNumber                         9876543210987

    Vérifiez que les valeurs pour les setters suivantes sont correctes :

    • anthos.servicemesh.trustDomainAliases
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    Vous pouvez ignorer les valeurs des autres setters.

Citadel

  1. Créez un répertoire pour les fichiers de configuration des ressources du package Anthos Service Mesh. Nous vous recommandons d'utiliser le nom du cluster comme nom de répertoire.

  2. Accédez au répertoire dans lequel vous souhaitez télécharger le package Anthos Service Mesh.

  3. Téléchargez le package :

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
    
  4. Définissez l'ID du projet dans lequel le cluster a été créé :

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. Définissez le numéro du projet hôte d'Environ :

    kpt cfg set asm gcloud.project.environProjectNumber ${ENVIRON_PROJECT_NUMBER}
    
  6. Définissez le nom du cluster :

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  7. Définissez la zone ou la région par défaut :

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  8. Affichez les valeurs des setters kpt :

    kpt cfg list-setters asm
    

    La sortie de la commande ressemble à ceci :

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gcr.io/gke-release/asm/canonical-service-controller:1.7.6-asm.1
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gcr.io/gke-release/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               1.7.6-asm.1
    anthos.servicemesh.trustDomainAliases
    base-dir                                             base
    gcloud.compute.location                              us-central
    gcloud.compute.network                               default
    gcloud.compute.subnetwork                            default
    gcloud.container.cluster                             example-cluster-1
    gcloud.container.cluster.clusterSecondaryRange
    gcloud.container.cluster.releaseChannel              REGULAR
    gcloud.container.cluster.servicesSecondaryRange
    gcloud.container.nodepool.max-nodes                  4
    gcloud.core.project                                  example-project-12345
    gcloud.project.environProjectID                      ENVIRON_PROJECT_ID
    gcloud.project.environProjectNumber                  1234567890123
    gcloud.project.projectNumber                         9876543210987

    Vérifiez que les valeurs pour les setters suivantes sont correctes :

    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    Vous pouvez ignorer les valeurs des autres setters.

Migrer vers Anthos Service Mesh

Pour effectuer une migration depuis Istio, suivez le processus de mise à niveau du plan de contrôle double (appelé "mises à niveau Canary dans la documentation d'Istio"). Avec une mise à niveau du plan de contrôle double, vous installez une nouvelle version du plan de contrôle à côté du plan de contrôle existant. Lors de l'installation de la nouvelle version, vous incluez le libellé revision qui identifie la version du nouveau plan de contrôle. Chaque révision est une mise en œuvre complète du plan de contrôle d'Anthos Service Mesh avec ses propres déploiement et service.

Vous effectuez ensuite une migration vers la nouvelle version en définissant le même libellé revision sur vos charges de travail de sorte qu'il pointe vers le nouveau plan de contrôle et en effectuant un redémarrage progressif pour réinjecter les proxys avec la nouvelle version d'Anthos Service Mesh. Avec cette approche, vous pouvez surveiller l'effet de la mise à niveau sur un petit pourcentage de vos charges de travail. Après avoir testé votre application, vous pouvez migrer tout le trafic vers la nouvelle version. Cette approche est beaucoup plus sûre qu'une mise à niveau sur place, où un nouveau plan de contrôle remplace immédiatement la version précédente.

Mettre à jour le plan de contrôle

Mesh CA

  1. Vérifiez que le contexte kubeconfig actuel pointe vers le cluster sur lequel vous souhaitez installer Anthos Service Mesh:

    kubectl config current-context
    

    Le résultat est au format suivant:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    Le contexte kubeconfig et les valeurs des Setters kpt doivent correspondre. Si nécessaire, exécutez la commande gcloud container clusters get-credentials pour définir le contexte kubeconfig actuel.

  2. Exécutez la commande suivante pour déployer le nouveau plan de contrôle avec le profil asm-gcp-multiproject. Si vous souhaitez activer une fonctionnalité facultative compatible, incluez -f et le nom de fichier YAML dans la ligne de commande suivante. Pour plus d'informations, consultez la page Activer les fonctionnalités facultatives.

    istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml\
      --revision=asm-176-1
    

    L'argument --revision ajoute un libellé de révision au format istio.io/rev=asm-176-1 à istiod. Le libellé de révision est utilisé par le webhook d'injecteur side-car automatique pour associer les side-cars injectés à une révision istiod particulière. Pour activer l'injection side-car automatique sur un espace de noms, vous devez lui attribuer un libellé associé à une révision correspondant à un déploiement istiod.

    Les fichiers suivants remplacent les paramètres du fichier istio-operator.yaml:

    • Le fichier multiproject.yaml définit le profil asm-gcp-multiproject.

    • Le fichier multicluster.yaml configure les paramètres dont Anthos Service Mesh a besoin pour une configuration multicluster.

Citadel

  1. Vérifiez que le contexte kubeconfig actuel pointe vers le cluster sur lequel vous souhaitez installer Anthos Service Mesh:

    kubectl config current-context
    

    Le résultat est au format suivant:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    Le contexte kubeconfig et les valeurs des Setters kpt doivent correspondre. Si nécessaire, exécutez la commande gcloud container clusters get-credentials pour définir le contexte kubeconfig actuel.

  2. Exécutez la commande suivante pour déployer le nouveau plan de contrôle avec le profil asm-gcp-multiproject. Si vous souhaitez activer une fonctionnalité facultative compatible, incluez -f et le nom de fichier YAML dans la ligne de commande suivante. Pour plus d'informations, consultez la page Activer les fonctionnalités facultatives.

    istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/citadel-ca.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml\
      --revision=asm-176-1
    

    L'argument --revision ajoute un libellé de révision au format istio.io/rev=asm-176-1 à istiod. Le libellé de révision est utilisé par le webhook d'injecteur side-car automatique pour associer les side-cars injectés à une révision istiod particulière. Pour activer l'injection side-car automatique sur un espace de noms, vous devez lui attribuer un libellé associé à une révision correspondant à un déploiement istiod.

    Les fichiers suivants remplacent les paramètres du fichier istio-operator.yaml:

    • Le fichier citadel-ca.yaml configure la Citadel en tant qu'autorité de certification.

    • Le fichier multiproject.yaml définit le profil asm-gcp-multiproject.

    • Le fichier multicluster.yaml configure les paramètres dont Anthos Service Mesh a besoin pour une configuration multicluster.

Après avoir exécuté la commande, deux services et déploiements de plan de contrôle s'exécutent côte à côte :

kubectl get pods -n istio-system

Exemple de résultat :

NAME                                        READY   STATUS    RESTARTS   AGE
istio-ingressgateway-c56675fcd-86zdn        1/1     Running   0          2m9s
istio-ingressgateway-c56675fcd-vn4nv        1/1     Running   0          2m21s
istiod-asm-176-1-6d5cfd4b89-xztlr           1/1     Running   0          3m44s
istiod-fb7f746f4-wcntn                      1/1     Running   0          50m

Redéployer des charges de travail

L'installation de la nouvelle révision n'a aucune incidence sur les proxys side-car existants. Pour les mettre à niveau, vous devez les configurer de sorte qu'ils pointent vers le nouveau plan de contrôle. Cette opération est contrôlée lors de l'injection side-car en fonction du libellé d'espace de noms istio.io/rev.

  1. Mettez à jour les charges de travail à injecter avec la nouvelle version d'Anthos Service Mesh :

    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-176-1 --overwrite

    Le libellé istio-injection doit être supprimé, car il est prioritaire sur le libellé istio.io/rev.

  2. Redémarrez les pods pour déclencher la réinjection :

    kubectl rollout restart deployment -n NAMESPACE
  3. Vérifiez que les pods sont configurés de sorte qu'ils pointent vers le plan de contrôle istiod-asm-176-1 :

    kubectl get pods -n NAMESPACE -l istio.io/rev=asm-176-1

  4. Testez votre application pour vérifier que les charges de travail fonctionnent correctement.

  5. Si vous avez des charges de travail dans d'autres espaces de noms, répétez les étapes précédentes pour chaque espace de noms.

  6. Si vous êtes sûr que votre application fonctionne comme prévu, passez à la section Terminer la migration. Sinon, procédez comme suit pour effectuer un rollback vers la version précédente :

    Pour effectuer un rollback :

    1. Mettez à jour les charges de travail à injecter avec la version précédente du plan de contrôle :

      kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
    2. Redémarrez les pods pour déclencher une réinjection afin que les proxys disposent de la version précédente :

      kubectl rollout restart deployment -n NAMESPACE
    3. Redéployez la version précédente du fichier istio-ingressgateway :

      kubectl -n istio-system rollout undo deploy istio-ingressgateway
      
    4. Supprimez le nouveau plan de contrôle :

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-asm-176-1 -n istio-system --ignore-not-found=true
      

Terminer la migration

Si vous êtes sûr que votre application fonctionne comme prévu, procédez comme suit pour terminer la migration vers Anthos Service Mesh :

  1. Supprimez l'ancien plan de contrôle :

    kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
    

Enregistrer votre cluster

Vous devez enregistrer votre cluster auprès de l'Environ du projet pour accéder à l'interface utilisateur unifiée dans Cloud Console. Un Environ constitue un moyen unifié d'afficher et de gérer les clusters et leurs charges de travail, y compris les clusters extérieurs à Google Cloud.

Consultez la section Enregistrer des clusters dans l'Environ pour en savoir plus sur l'enregistrement de votre cluster.

Étape suivante