Esta página forma parte de una guía de varias páginas en la que se explica cómo migrar de Istio a la versión 1.7.8 de Anthos Service Mesh en un clúster de GKE para una malla que contiene varios clústeres que se encuentran en proyectos de Google Cloud diferentes. Para las migraciones en una malla de un solo clúster o una malla que contiene varios clústeres en el mismo proyecto de Google Cloud, consulta Instalación, migración y actualización para GKE.
Antes de comenzar
Antes de instalar Anthos Service Mesh, asegúrate de haber hecho lo siguiente:
- Configura tu entorno para instalar las herramientas que necesites.
- Configura tu proyecto para habilitar las API requeridas y establecer permisos.
- Configura tu clúster para habilitar las opciones de clúster obligatorias.
- Consulta Prepara la migración desde Istio.
Configura credenciales y permisos
Inicializa tu proyecto a fin de prepararlo para la instalación. Entre otras cosas, con este comando puedes crear una cuenta de servicio para permitir que los componentes del plano de control, como el proxy de sidecar, accedan a los datos y recursos de tu proyecto de forma segura:
curl --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --data '' \ "https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize"
El comando responde con llaves vacías:
{}
.Obtén credenciales de autenticación para interactuar con el clúster. En este comando, también se establece el contexto actual de
kubectl
en el clúster.gcloud container clusters get-credentials ${CLUSTER_NAME} \ --project=${PROJECT_ID}
Otorga permisos de administrador de clúster al usuario actual. Estos permisos son obligatorios a fin de crear las reglas de control de acceso basado en funciones (RBAC) necesarias para Anthos Service Mesh:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user="$(gcloud config get-value core/account)"
Si ves el error "cluster-admin-binding" already exists
, puedes ignorarlo sin problemas y continuar con la vinculación del administrador del clúster existente.
Descarga el archivo de instalación
-
Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz
-
Descarga el archivo de firma y usa
openssl
para verificar la firma:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig istio-1.7.8-asm.10-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
El resultado esperado es:
Verified OK
. -
Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
tar xzf istio-1.7.8-asm.10-linux-amd64.tar.gz
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.7.8-asm.10
que contiene lo siguiente:- Hay aplicaciones de muestra en el directorio
samples
. - La herramienta de línea de comandos de
istioctl
que usas para instalar Anthos Service Mesh se encuentra en el directoriobin
. - Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio
manifests/profiles
.
- Hay aplicaciones de muestra en el directorio
-
Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz
-
Descarga el archivo de firma y usa
openssl
para verificar la firma:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.8-asm.10-osx.tar.gz.1.sig istio-1.7.8-asm.10-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
El resultado esperado es:
Verified OK
. -
Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
tar xzf istio-1.7.8-asm.10-osx.tar.gz
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.7.8-asm.10
que contiene lo siguiente:- Hay aplicaciones de muestra en el directorio
samples
. - La herramienta de línea de comandos de
istioctl
que usas para instalar Anthos Service Mesh se encuentra en el directoriobin
. - Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio
manifests/profiles
.
- Hay aplicaciones de muestra en el directorio
-
Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip
-
Descarga el archivo de firma y usa
openssl
para verificar la firma:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip.1.sig openssl dgst -verify - -signature istio-1.7.8-asm.10-win.zip.1.sig istio-1.7.8-asm.10-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
El resultado esperado es:
Verified OK
. -
Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
tar xzf istio-1.7.8-asm.10-win.zip
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.7.8-asm.10
que contiene lo siguiente:- Hay aplicaciones de muestra en el directorio
samples
. - La herramienta de línea de comandos de
istioctl
que usas para instalar Anthos Service Mesh se encuentra en el directoriobin
. - Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio
manifests/profiles
.
- Hay aplicaciones de muestra en el directorio
-
Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
cd istio-1.7.8-asm.10
-
Para mayor comodidad, agrega las herramientas que contiene el directorio
/bin
a tu ruta de acceso (PATH).export PATH=$PWD/bin:$PATH
Linux
macOS
Windows
Prepara los archivos de configuración de recursos
Cuando ejecutes el comando istioctl install
, debes especificar -f istio-operator.yaml
en la línea de comandos. En este archivo, encontrarás la información que requiere Anthos Service Mesh sobre el proyecto y el clúster. Debes descargar un paquete que contenga istio-operator.yaml
y otros archivos de configuración de recursos a fin de establecer la información del proyecto y del clúster.
Para preparar los archivos de configuración de recursos, sigue estos pasos:
CA de Mesh
Crea un directorio nuevo para los archivos de configuración de recursos del paquete de Anthos Service Mesh. Recomendamos que uses el nombre del clúster como el nombre del directorio.
Cambia al directorio en el que deseas descargar el paquete de Anthos Service Mesh.
Descarga el paquete :
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
Configura el ID del proyecto en el que se creó el clúster:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
Configura el número de proyecto para el proyecto host de la flota:
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
Configura el nombre del clúster:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
Establece la zona o región predeterminada:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
Configura la etiqueta de la versión de Anthos Service Mesh que instalarás:
kpt cfg set asm anthos.servicemesh.tag 1.7.8-asm.10
Configura el webhook de validación para usar una etiqueta de revisión:
kpt cfg set asm anthos.servicemesh.rev asm-178-10
Cuando instales Anthos Service Mesh, configura una etiqueta de revisión en
istiod
. Debes configurar la misma revisión en el webhook de validación.Debido a que los clústeres en tu configuración de varios clústeres están en proyectos diferentes, debes configurar los alias de dominio de confianza para los otros proyectos que formarán la malla de servicios de varios clústeres o varios proyectos.
Obtén el ID del proyecto de todos los clústeres que se incluirán en la malla de varios clústeres o varios proyectos.
Para el ID del proyecto de cada clúster, configura los alias del dominio de confianza. Por ejemplo, si tienes clústeres en 3 proyectos, ejecuta el siguiente comando y reemplaza
PROJECT_ID_1
,PROJECT_ID_2
yPROJECT_ID_3
por el ID del proyecto de cada clúster.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
Puedes usar el mismo comando para configurar los clústeres en los otros proyectos.
Los alias del dominio de confianza permiten que la CA de Mesh autentique las cargas de trabajo en los clústeres en otros proyectos. Además de configurar los alias del dominio de confianza, después de instalar Anthos Service Mesh, debes habilitar el balanceo de cargas entre clústeres.
Muestra los valores de los métodos set de
kpt
:kpt cfg list-setters asm
El resultado del comando es similar al siguiente:
NAME VALUE anthos.servicemesh.canonicalServiceHub gcr.io/gke-release/asm/canonical-service-controller:1.7.8-asm.10 anthos.servicemesh.controlplane.monitoring.enabled true anthos.servicemesh.hub gcr.io/gke-release/asm anthos.servicemesh.hubMembershipID MEMBERSHIP_ID anthos.servicemesh.tag 1.7.8-asm.10 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
Verifica que los valores de los siguientes métodos set sean correctos:
- anthos.servicemesh.rev
- anthos.servicemesh.tag
- anthos.servicemesh.trustDomainAliases
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
Puedes ignorar los valores de los otros métodos set.
Citadel
Crea un directorio nuevo para los archivos de configuración de recursos del paquete de Anthos Service Mesh. Recomendamos que uses el nombre del clúster como el nombre del directorio.
Cambia al directorio en el que deseas descargar el paquete de Anthos Service Mesh.
Descarga el paquete :
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
Configura el ID del proyecto en el que se creó el clúster:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
Configura el número de proyecto para el proyecto host de la flota:
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
Configura el nombre del clúster:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
Establece la zona o región predeterminada:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
Configura la etiqueta de la versión de Anthos Service Mesh que instalarás:
kpt cfg set asm anthos.servicemesh.tag 1.7.8-asm.10
Configura el webhook de validación para usar una etiqueta de revisión:
kpt cfg set asm anthos.servicemesh.rev asm-178-10
Muestra los valores de los métodos set de
kpt
:kpt cfg list-setters asm
El resultado del comando es similar al siguiente:
NAME VALUE anthos.servicemesh.canonicalServiceHub gcr.io/gke-release/asm/canonical-service-controller:1.7.8-asm.10 anthos.servicemesh.controlplane.monitoring.enabled true anthos.servicemesh.hub gcr.io/gke-release/asm anthos.servicemesh.hubMembershipID MEMBERSHIP_ID anthos.servicemesh.tag 1.7.8-asm.10 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
Verifica que los valores de los siguientes métodos set sean correctos:
- anthos.servicemesh.rev
- anthos.servicemesh.tag
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
Puedes ignorar los valores de los otros métodos set.
Migra Anthos Service Mesh
Para migrar desde Istio, sigue el proceso de actualización del plano de control dual (denominado actualizaciones canary en la documentación de Istio). Con la actualización del plano de control doble, instalas una versión nueva del plano de control junto con el plano de control existente. Cuando instales la versión nueva, incluye una etiqueta revision
que identifique la versión del plano de control nuevo. Cada revisión es una implementación completa del plano de control de Anthos Service Mesh con sus propios objetos Deployment y Service.
Luego, debes migrar a la versión nueva mediante la configuración de la misma etiqueta revision
en tus cargas de trabajo para apuntar al nuevo plano de control y realizar un reinicio progresivo a fin de volver a insertar los proxies con la nueva versión de Anthos Service Mesh. Con este enfoque, puedes supervisar el efecto de la actualización en un porcentaje pequeño de tus cargas de trabajo. Después de probar la aplicación, puedes migrar todo el tráfico a la versión nueva. Este enfoque es mucho más seguro que realizar una actualización in situ en la que un plano de control nuevo reemplaza a la versión anterior.
Actualiza el plano de control
CA de Mesh
Verifica que el contexto
kubeconfig
actual apunte al clúster en el que deseas instalar Anthos Service Mesh:kubectl config current-context
El resultado estará en el siguiente formato:
gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME
El contexto
kubeconfig
y los valores de los métodos setkpt
deben coincidir. Si es necesario, ejecuta el comandogcloud container clusters get-credentials
para configurar el contextokubeconfig
actual.Ejecuta el siguiente comando para implementar el plano de control nuevo con el perfil
asm-gcp-multiproject
. Si deseas habilitar una función compatible opcional, incluye-f
y el nombre del archivo YAML en la siguiente línea de comandos. Consulta Habilita funciones opcionales para obtener más información.istioctl install \ -f asm/istio/istio-operator.yaml \ -f asm/istio/options/multiproject.yaml \ -f asm/istio/options/multicluster.yaml\ --revision=asm-178-10
El argumento
--revision
agrega una etiqueta de revisión con el formatoistio.io/rev=asm-178-10
aistiod
. El webhook automático de inyector de sidecar usa la etiqueta de revisión para asociar los sidecars insertados con una revisiónistiod
particular. A fin de habilitar la inserción automática del sidecar para un espacio de nombres, debes etiquetarlo con una revisión que coincida con una implementaciónistiod
.Los siguientes archivos se anulan la configuración del archivo
istio-operator.yaml
:El archivo
multiproject.yaml
establece el perfilasm-gcp-multiproject
.El archivo
multicluster.yaml
configura los ajustes que necesita Anthos Service Mesh para una configuración de varios clústeres.
Verifica que los Pods del plano de control en
istio-system
estén activos:kubectl get pods -n istio-system
Salida de ejemplo:
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-178-10-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
Tienes dos Deployments y Services del plano de control y servicios que se ejecutan en paralelo.
Implementa el controlador de servicios canónicos en tu clúster:
kubectl apply -f asm/canonical-service/controller.yaml
El controlador del servicio canónico agrupa las cargas de trabajo que pertenecen al mismo servicio lógico. Para obtener más información sobre los servicios canónicos, consulta la descripción general del servicio canónico.
Citadel
Verifica que el contexto
kubeconfig
actual apunte al clúster en el que deseas instalar Anthos Service Mesh:kubectl config current-context
El resultado estará en el siguiente formato:
gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME
El contexto
kubeconfig
y los valores de los métodos setkpt
deben coincidir. Si es necesario, ejecuta el comandogcloud container clusters get-credentials
para configurar el contextokubeconfig
actual.Ejecuta el siguiente comando para implementar el plano de control nuevo con el perfil
asm-gcp-multiproject
. Si deseas habilitar una función compatible opcional, incluye-f
y el nombre del archivo YAML en la siguiente línea de comandos. Consulta Habilita funciones opcionales para obtener más información.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-178-10
El argumento
--revision
agrega una etiqueta de revisión con el formatoistio.io/rev=asm-178-10
aistiod
. El webhook automático de inyector de sidecar usa la etiqueta de revisión para asociar los sidecars insertados con una revisiónistiod
particular. A fin de habilitar la inserción automática del sidecar para un espacio de nombres, debes etiquetarlo con una revisión que coincida con una implementaciónistiod
.Los siguientes archivos se anulan la configuración del archivo
istio-operator.yaml
:citadel-ca.yaml
configura Citadel como la CA.El archivo
multiproject.yaml
establece el perfilasm-gcp-multiproject
.El archivo
multicluster.yaml
configura los ajustes que necesita Anthos Service Mesh para una configuración de varios clústeres.
Verifica que los Pods del plano de control en
istio-system
estén activos:kubectl get pods -n istio-system
Salida de ejemplo:
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-178-10-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
Tienes dos Deployments y Services del plano de control y servicios que se ejecutan en paralelo.
Implementa el controlador de servicios canónicos en tu clúster:
kubectl apply -f asm/canonical-service/controller.yaml
El controlador del servicio canónico agrupa las cargas de trabajo que pertenecen al mismo servicio lógico. Para obtener más información sobre los servicios canónicos, consulta la descripción general del servicio canónico.
Vuelve a implementar cargas de trabajo
Cuando se instala la revisión nueva, los proxies de sidecar existentes no se ven afectados. Para actualizarlos, debes configurarlos a fin de que apunten al nuevo plano de control. Esto se controla durante la incorporación de sidecar en función de la etiqueta del espacio de nombres istio.io/rev
.
Actualiza las cargas de trabajo para insertarlas en la versión nueva de Anthos Service Mesh:
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-178-10 --overwrite
Se debe quitar la etiqueta
istio-injection
porque tiene prioridad sobre la etiquetaistio.io/rev
.Reinicia los Pods para activar la reinserción:
kubectl rollout restart deployment -n NAMESPACE
Verifica que los Pods estén configurados para apuntar al plano de control
istiod-asm-178-10
:kubectl get pods -n NAMESPACE -l istio.io/rev=asm-178-10
Prueba la aplicación para verificar que las cargas de trabajo funcionen de forma correcta.
Si tienes cargas de trabajo en otros espacios de nombres, repite los pasos anteriores para cada espacio de nombres.
Si tu aplicación funciona como esperabas, ve directamente a Completa la migración. De lo contrario, realiza los siguientes pasos para revertir a la versión anterior:
Para hacer una reversión, haz lo siguiente:
Actualiza las cargas de trabajo para insertarlas con la versión de Istio del plano de control:
kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
Reinicia los Pods para activar la reinserción a fin de que los proxies tengan la versión de Istio:
kubectl rollout restart deployment -n NAMESPACE
Vuelve a implementar la versión anterior de
istio-ingressgateway
:kubectl -n istio-system rollout undo deploy istio-ingressgateway
Quita el nuevo plano de control:
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-asm-178-10 -n istio-system --ignore-not-found=true
Completa la migración
Si tu aplicación funciona como esperabas, realiza los siguientes pasos para completar la migración a Anthos Service Mesh:
Quita el plano de control anterior:
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Registra tu clúster
Debes registrar tu clúster en la flota del proyecto para obtener acceso a la interfaz de usuario unificada en la consola de Google Cloud. Una flota proporciona una forma unificada de ver y administrar los clústeres y sus cargas de trabajo, incluidos los clústeres fuera de Google Cloud.
A fin de obtener información para registrar tu clúster, consulta Registra clústeres en la flota.