Cette page fait partie d'un guide de plusieurs pages qui explique comment migrer d'Istio vers la version 1.8.6 d'Anthos Service Mesh sur un cluster GKE pour un maillage contenant plusieurs clusters qui se trouvent dans des projets Google Cloud différents.
Pour les migrations sur un réseau maillé à un seul cluster ou pour un maillage contenant plusieurs clusters dans le même projet Google 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 :
- Configurez votre environnement pour installer les outils dont vous avez besoin.
- Configurez votre projet pour activer les API requises et définir les autorisations.
- Configurez votre cluster pour activer les options de cluster requises.
Préparer la migration
Veillez à consulter la page Préparer la migration depuis Istio.
Pour effectuer une migration depuis Istio, vous suivez le processus de mise à niveau basée sur la révision (appelé "mises à jour canary" dans la documentation d'Istio). Avec une mise à niveau basée sur la révision, vous installez une nouvelle révision du plan de contrôle en même temps que le plan de contrôle existant. Lorsque vous exécutez istioctl install
, vous incluez une option pour définir un libellé revision
qui identifie le nouveau plan de contrôle.
Ensuite, vous migrez vers la nouvelle version en définissant le même libellé revision
sur vos charges de travail et en effectuant un redémarrage progressif pour réinjecter les proxys avec la nouvelle version et la configuration 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 révision. 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.
Définir des identifiants et des autorisations
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 :
{}
.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}
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
-
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.8.6-asm.8-linux-amd64.tar.gz
-
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.8.6-asm.8-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig istio-1.8.6-asm.8-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
La sortie attendue est
Verified OK
. -
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.8.6-asm.8-linux-amd64.tar.gz
La commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé
istio-1.8.6-asm.8
, et 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 se trouve dans le répertoirebin
. - Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire
manifests/profiles
- Des exemples d'applications dans le répertoire
-
Assurez-vous d'être dans le répertoire racine de l'installation Anthos Service Mesh.
cd istio-1.8.6-asm.8
-
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.8.6-asm.8-osx.tar.gz
-
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.8.6-asm.8-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.8.6-asm.8-osx.tar.gz.1.sig istio-1.8.6-asm.8-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
La sortie attendue est
Verified OK
. -
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.8.6-asm.8-osx.tar.gz
La commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé
istio-1.8.6-asm.8
, et 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 se trouve dans le répertoirebin
. - Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire
manifests/profiles
- Des exemples d'applications dans le répertoire
-
Assurez-vous d'être dans le répertoire racine de l'installation Anthos Service Mesh.
cd istio-1.8.6-asm.8
-
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.8.6-asm.8-win.zip
-
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.8.6-asm.8-win.zip.1.sig openssl dgst -verify - -signature istio-1.8.6-asm.8-win.zip.1.sig istio-1.8.6-asm.8-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
La sortie attendue est
Verified OK
. -
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.8.6-asm.8-win.zip
La commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé
istio-1.8.6-asm.8
, et 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 se trouve dans le répertoirebin
. - Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire
manifests/profiles
- Des exemples d'applications dans le répertoire
-
Assurez-vous d'être dans le répertoire racine de l'installation Anthos Service Mesh.
cd istio-1.8.6-asm.8
Linux
macOS
Windows
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
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.
Accédez au répertoire dans lequel vous souhaitez télécharger le package Anthos Service Mesh.
Validez la version de
kpt
. Assurez-vous d'exécuter une version antérieure à 1.x de kpt :kpt version
La sortie devrait ressembler à ce qui suit :
0.39.2
Si vous disposez de la version 1.x ou d'une version ultérieure de
kpt
, consultez la page Configurer votre environnement pour télécharger la version requise pour votre système d'exploitation.Téléchargez le package :
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.8-asm asm
Définissez l'ID du projet dans lequel le cluster a été créé :
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
Définissez le numéro de projet du projet hôte du parc :
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
Définissez le nom du cluster :
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
Définissez la zone ou la région par défaut :
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
Définissez le tag sur la version d'Anthos Service Mesh que vous installez :
kpt cfg set asm anthos.servicemesh.tag 1.8.6-asm.8
Définissez la révision dans les fichiers de configuration des ressources du package Anthos Service Mesh :
kpt cfg set asm anthos.servicemesh.rev asm-186-8
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.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.
Obtenez l'ID de projet de tous les clusters qui se trouveront dans le maillage multicluster/multiprojet.
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
etPROJECT_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.
Affichez les valeurs des setters
kpt
:kpt cfg list-setters asm
La sortie de la commande ressemble à ceci :
NAME VALUE anthos.servicemesh.canonicalServiceHub gke.gcr.io/asm/canonical-service-controller:1.8.6-asm.8 anthos.servicemesh.controlplane.monitoring.enabled true anthos.servicemesh.hub gke.gcr.io/asm anthos.servicemesh.hubMembershipID MEMBERSHIP_ID anthos.servicemesh.tag 1.8.6-asm.8 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 FLEET_PROJECT_ID gcloud.project.environProjectNumber 1234567890123 gcloud.project.projectNumber 9876543210987
Vérifiez que les valeurs pour les setters suivantes sont correctes :
- anthos.servicemesh.rev
- anthos.servicemesh.tag
- anthos.servicemesh.trustDomainAliases
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
Vous pouvez ignorer les valeurs des autres setters.
Istio CA
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.
Accédez au répertoire dans lequel vous souhaitez télécharger le package Anthos Service Mesh.
Validez la version de
kpt
. Assurez-vous d'exécuter une version antérieure à 1.x de kpt :kpt version
La sortie devrait ressembler à ce qui suit :
0.39.2
Si vous disposez de la version 1.x ou ultérieure de
kpt
, téléchargez la version requise :curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
Téléchargez le package :
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.8-asm asm
Définissez l'ID du projet dans lequel le cluster a été créé :
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
Définissez le numéro de projet du projet hôte du parc :
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
Définissez le nom du cluster :
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
Définissez la zone ou la région par défaut :
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
Définissez le tag sur la version d'Anthos Service Mesh que vous installez :
kpt cfg set asm anthos.servicemesh.tag 1.8.6-asm.8
Définissez la révision dans les fichiers de configuration des ressources du package Anthos Service Mesh :
kpt cfg set asm anthos.servicemesh.rev asm-186-8
Affichez les valeurs des setters
kpt
:kpt cfg list-setters asm
La sortie de la commande ressemble à ceci :
NAME VALUE anthos.servicemesh.canonicalServiceHub gke.gcr.io/asm/canonical-service-controller:1.8.6-asm.8 anthos.servicemesh.controlplane.monitoring.enabled true anthos.servicemesh.hub gke.gcr.io/asm anthos.servicemesh.hubMembershipID MEMBERSHIP_ID anthos.servicemesh.tag 1.8.6-asm.8 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 FLEET_PROJECT_ID gcloud.project.environProjectNumber 1234567890123 gcloud.project.projectNumber 9876543210987
Vérifiez que les valeurs pour les setters suivantes sont correctes :
- anthos.servicemesh.rev
- anthos.servicemesh.tag
- 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
Mesh CA
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 Setterskpt
doivent correspondre. Si nécessaire, exécutez la commandegcloud container clusters get-credentials
pour définir le contextekubeconfig
actuel.Si nécessaire, basculez vers le répertoire
istio-1.8.6-asm.8
. Le clientistioctl
dépend de la version. Veillez à utiliser la version dans le répertoireistio-1.8.6-asm.8/bin
.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.bin/istioctl install \ -f asm/istio/istio-operator.yaml \ -f asm/istio/options/multiproject.yaml \ -f asm/istio/options/multicluster.yaml \ -f asm/istio/options/revisioned-istio-ingressgateway.yaml \ --revision=asm-186-8
L'argument
--revision
ajoute un libellé de révision au formatistio.io/rev=asm-186-8
à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évisionistiod
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éploiementistiod
.Les fichiers suivants remplacent les paramètres du fichier
istio-operator.yaml
:Le fichier
multiproject.yaml
définit le profilasm-gcp-multiproject
.Le fichier
multicluster.yaml
configure les paramètres dont Anthos Service Mesh a besoin pour une configuration multicluster.Le fichier
revisioned-istio-ingressgateway.yaml
configure un déploiement révisé pouristio-ingressgateway
.
Vérifiez que les pods du plan de contrôle dans
istio-system
sont opérationnels :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-186-8-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
Deux services et déploiements de plan de contrôle s'exécutent côte à côte.
Déployez le contrôleur de service canonique sur votre cluster :
kubectl apply -f asm/canonical-service/controller.yaml
Le contrôleur de service canonique regroupe les charges de travail appartenant au même service logique. Pour en savoir plus sur les services canoniques, consultez la présentation du Service canonique.
Citadel
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 Setterskpt
doivent correspondre. Si nécessaire, exécutez la commandegcloud container clusters get-credentials
pour définir le contextekubeconfig
actuel.Si nécessaire, basculez vers le répertoire
istio-1.8.6-asm.8
. Le clientistioctl
dépend de la version. Veillez à utiliser la version dans le répertoireistio-1.8.6-asm.8/bin
.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.bin/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 \ -f asm/istio/options/revisioned-istio-ingressgateway.yaml \ --revision=asm-186-8
L'argument
--revision
ajoute un libellé de révision au formatistio.io/rev=asm-186-8
à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évisionistiod
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éploiementistiod
.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 profilasm-gcp-multiproject
.Le fichier
multicluster.yaml
configure les paramètres dont Anthos Service Mesh a besoin pour une configuration multicluster.Le fichier
revisioned-istio-ingressgateway.yaml
configure un déploiement révisé pouristio-ingressgateway
.
Vérifiez que les pods du plan de contrôle dans
istio-system
sont opérationnels :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-186-8-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
Deux services et déploiements de plan de contrôle s'exécutent côte à côte.
-
Déployez le contrôleur de service canonique sur votre cluster :
kubectl apply -f asm/canonical-service/controller.yaml
Le contrôleur de service canonique regroupe les charges de travail appartenant au même service logique. Pour en savoir plus sur les services canoniques, consultez la présentation du Service canonique.
-
Déployez le contrôleur de service canonique sur votre cluster :
Déployer et redéployer des charges de travail
Votre installation n'est pas terminée tant que vous n'avez pas activé l'injection automatique du proxy side-car (injection automatique). Les migrations depuis OSS Istio et les mises à niveau suivent le processus de mise à niveau basé sur la révision (processus appelé "mises à jour Canary" dans la documentation d'Istio). Avec une mise à niveau basée sur la révision, la nouvelle version du plan de contrôle est installée en parallèle du plan de contrôle existant. Vous déplacez ensuite certaines de vos charges de travail vers la nouvelle version, ce qui vous permet de surveiller l'effet de la mise à niveau avec un faible pourcentage des charges de travail avant de migrer tout le trafic vers la nouvelle version.
Lorsque vous avez exécuté istioctl install
, vous avez défini un libellé de révision au format istio.io/rev=asm-186-8
sur istiod
. Pour activer l'injection automatique, vous devez ajouter un libellé de révision correspondant à votre ou vos espaces de noms. Le libellé de révision est utilisé par le webhook d'injecteur sidecar pour associer les sidecars injectés à une révision istiod
particulière. Après avoir ajouté le libellé, redémarrez les pods de l'espace de noms pour que les sidecars soient injectés.
Si vous avez inclus revisioned-istio-ingressgateway.yaml
lors de l'exécution de istioctl
install
, un déploiement révisé est configuré pour istio-ingressgateway
.
Ainsi, vous pouvez contrôler le moment où vous passez à la nouvelle version.
Obtenez le libellé de révision associé à
istiod
etistio-ingressgateway
.kubectl get pod -n istio-system -L istio.io/rev
La sortie de la commande ressemble à ceci :
NAME READY STATUS RESTARTS AGE REV istio-ingressgateway-65d884685d-6hrdk 1/1 Running 0 67m istio-ingressgateway-65d884685d-94wgz 1/1 Running 0 67m istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb 1/1 Running 0 5s asm-186-8 istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2 1/1 Running 0 20s asm-186-8 istiod-asm-176-1-67998f4b55-lrzpz 1/1 Running 0 68m asm-178-10 istiod-asm-176-1-67998f4b55-r76kr 1/1 Running 0 68m asm-178-10 istiod-asm-182-2-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-186-8 istiod-asm-182-2-5cd96f88f6-wm68b 1/1 Running 0 27s asm-186-8
Vérifiez si vous disposez à la fois de l'ancienne et de la nouvelle version de
istio-ingressgateway
.Si vous avez inclus l'option
revisioned-istio-ingressgateway
lors de la mise à niveau, une mise à niveau Canary deistio-ingressgateway
a été effectuée. Dans ce cas, la sortie affiche à la fois l'ancienne et la nouvelle version deistio-ingressgateway
.Si vous n'avez pas inclus
revisioned-istio-ingressgateway
lors de la mise à niveau, une mise à niveau sur place deistio-ingressgateway
a été effectuée. Dans ce cas, la sortie n'affiche que la nouvelle version.
Dans le résultat, sous la colonne
REV
, notez la valeur du libellé de révision pour la nouvelle version. Dans cet exemple, la valeur estasm-186-8
.Notez également la valeur du libellé de révision pour l'ancienne version de
istiod
. Vous devrez supprimer l'ancienne version deistiod
lorsque vous aurez fini de déplacer les charges de travail vers la nouvelle version. Dans l'exemple de résultat, la valeur du libellé de révision pour l'ancienne version estasm-178-10
.
Si vous disposez de l'ancienne et de la nouvelle version de
istio-ingressgateway
, remplacezistio-ingressgateway
par la nouvelle révision. Dans la commande suivante, remplacezREVISION
par la valeur correspondant au libellé de révision de la nouvelle version.kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'
Résultat attendu :
service/istio-ingressgateway patched
Ajoutez le libellé de révision à un espace de noms et supprimez le libellé
istio-injection
(s'il existe). Dans la commande suivante, remplacezREVISION
par la valeur correspondant à la nouvelle révision deistiod
.kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
Si
"istio-injection not found"
apparaît dans le résultat, vous pouvez l'ignorer. Cela signifie que l'espace de noms n'avait pas auparavant le libelléistio-injection
. Étant donné que l'injection automatique échoue si un espace de noms possède à la fois leistio-injection
et le libellé de révision, toutes les commandeskubectl label
de la documentation Anthos Service Mesh incluent la suppression du libelléistio-injection
.Redémarrez les pods pour déclencher la réinjection :
kubectl rollout restart deployment -n NAMESPACE
Vérifiez que vos pods sont configurés pour pointer vers la nouvelle version de
istiod
.kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
Testez votre application pour vérifier que les charges de travail fonctionnent correctement.
Si vous avez des charges de travail dans d'autres espaces de noms, répétez les étapes pour leur ajouter des libellés et redémarrer les pods.
Si vous êtes sûr que votre application fonctionne comme prévu, continuez de suivre les étapes pour valider la transition vers la nouvelle version de
istiod
. Si vous rencontrez un problème avec votre application, suivez la procédure de rollback.Exécutez à nouveau la commande suivante pour vérifier si vous disposez à la fois de l'ancienne et de la nouvelle version de
istio-ingressgateway
, ou seulement de la nouvelle. Cela détermine la manière dont vous gérez la transition vers la nouvelle version deistio-ingressgateway
ou le rollback vers l'ancienne version.kubectl get pod -n istio-system -L istio.io/rev
Terminer la transition
Si vous êtes sûr que votre application fonctionne comme prévu, supprimez l'ancien plan de contrôle pour terminer la transition vers la nouvelle version.
Accédez au répertoire dans lequel se trouvent les fichiers du dépôt GitHub
anthos-service-mesh
.Configurez le webhook de validation pour utiliser le nouveau plan de contrôle.
kubectl apply -f asm/istio/istiod-service.yaml
Si vous disposez à la fois de l'ancienne et de la nouvelle version de
istio-ingressgateway
, supprimez l'ancien déploiementistio-ingressgateway
. La commande que vous exécutez varie selon que vous effectuez la migration depuis Istio ou une mise à niveau depuis une version précédente d'Anthos Service Mesh :Migrer
Si vous avez effectué une migration depuis Istio, l'ancienne
istio-ingressgateway
ne comporte pas de libellé de révision.kubectl delete deploy/istio-ingressgateway -n istio-system
Mettre à niveau
Si vous avez mis à niveau à partir d'une version précédente d'Anthos Service Mesh, dans la commande suivante, remplacez
OLD_REVISION
par le libellé de révision de la version précédente deistio-ingressgateway
.kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=OLD_REVISION -n istio-system --ignore-not-found=true
Supprimez l'ancienne version de
istiod
. La commande que vous utilisez varie selon que vous effectuez la migration depuis Istio ou une mise à niveau depuis une version précédente d'Anthos Service Mesh.Migrer
Si vous avez effectué une migration depuis Istio, l'ancienne
istiod
ne comporte pas de libellé de révision.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Mettre à niveau
Si vous avez effectué une mise à niveau à partir d'une version précédente d'Anthos Service Mesh, assurez-vous que
OLD_REVISION
correspond au libellé de révision de la version précédente deistiod
dans la commande suivante.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true
Supprimez l'ancienne version de la configuration
IstioOperator
.kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
Le résultat ressemble à ce qui suit :
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
Rollback
Si vous avez rencontré un problème lors du test de votre application avec la nouvelle version de
istiod
, procédez comme suit pour effectuer un rollback vers la version précédente :Revenez à l'ancienne version de
istio-ingressgateway
. La commande que vous utilisez varie selon que vous disposez à la fois de l'ancienne et de la nouvelle version deistio-ingressgateway
, ou seulement de la nouvelle.Si vous disposez à la fois de l'ancienne et de la nouvelle version de
istio-ingressgateway
, exécutez la commandekubectl patch service
et remplacezOLD_REVISION
par l'ancienne révision.kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "OLD_REVISION"}]'
Si vous ne disposez que de la nouvelle version de
istio-ingressgateway
, exécutez la commandekubectl rollout undo
.kubectl -n istio-system rollout undo deploy istio-ingressgateway
Modifiez les libellés de votre espace de noms pour activer l'injection automatique avec la version précédente de
istiod
. La commande que vous utilisez varie selon que vous avez utilisé un libellé de révision ouistio-injection=enabled
avec la version précédente.Si vous avez utilisé un libellé de révision pour l'injection automatique :
kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite
Si vous avez utilisé
istio-injection=enabled
:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
Résultat attendu :
namespace/NAMESPACE labeled
Confirmez que le libellé de révision de l'espace de noms correspond au libellé de révision de la version précédente de
istiod
:kubectl get ns NAMESPACE --show-labels
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
Si vous disposez à la fois de l'ancienne et de la nouvelle version de
istio-ingressgateway
, supprimez le nouveau déploiementistio-ingressgateway
. Assurez-vous que la valeur deREVISION
dans la commande suivante est correcte.kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
Supprimez la nouvelle version de
istiod
. Assurez-vous que la valeur deREVISION
dans la commande suivante est correcte.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
Supprimez la nouvelle version de la configuration
IstioOperator
.kubectl delete IstioOperator installed-state-REVISION -n istio-system
Le résultat attendu ressemble à ce qui suit :
istiooperator.install.istio.io "installed-state-REVISION" deleted
Si vous n'avez pas ajouté l'option
--disable_canonical_service
, le script a activé le contrôleur de service canonique. Nous vous recommandons de conserver cette option activée. Cependant, si vous devez la désactiver, consultez la section Activer et désactiver le contrôleur de service canonique.