Migra del clúster a administrado, en un clúster nuevo
En este instructivo, se muestra cómo migrar una aplicación de un clúster de Google Kubernetes Engine (GKE) mediante Anthos Service Mesh dentro del clúster a un clúster nuevo mediante Anthos Service Mesh administrado, la malla de servicios completamente administrados que cumple con Istio.
En este instructivo, harás lo siguiente:
- Crea un clúster de Google Kubernetes Engine nuevo y, luego, instala Anthos Service Mesh y la puerta de enlace de entrada de Anthos Service Mesh en el clúster. Este clúster funcionará como el clúster existente del que deseas migrar.
- Implementa la aplicación de muestra Online Boutique en el clúster con Anthos Service Mesh dentro del clúster.
- Crea otro clúster de Google Kubernetes Engine, en el mismo proyecto de Google Cloud.
- Aprovisiona Anthos Service Mesh administrado en el segundo clúster y, luego, implementa la puerta de enlace de entrada de Anthos Service Mesh.
- Implementar Online Boutique en el clúster con Anthos Service Mesh administrado para replicar la implementación desde el clúster con Anthos Service Mesh dentro del clúster
- Cambiar el 50% del tráfico de usuarios del clúster con Anthos Service Mesh en el clúster a este con Anthos Service Mesh administrado mediante las funciones de división de tráfico de Istio en el clúster con Anthos Service Mesh dentro del clúster
- Completa la migración de Anthos Service Mesh en el clúster a Anthos Service Mesh administrado. Para ello, apunta la entrada del sistema de nombres de dominio (DNS) del clúster con Anthos Service Mesh dentro del clúster al clúster que tiene Anthos Service Mesh administrado.
Implementación de versiones canary
La "implementación canary" es una técnica utilizada en el desarrollo de software para probar una versión nueva de algún software antes de lanzar esa versión nueva a todos los usuarios. Esto implica incrementalmente aumentar el porcentaje de tráfico enviado a la versión nueva. En este instructivo, configurarás un clúster nuevo con Anthos Service Mesh administrado y cambiarás de forma incremental el tráfico de usuarios a él. Para comenzar, debes dirigir el 0% del tráfico de usuarios al clúster nuevo, luego, el 50% y, por último, el 100%. En producción, debes usar incrementos cada vez menores. Si en algún momento notas que el clúster nuevo no puede controlar un porcentaje de tráfico, puedes revertir con una reducción del porcentaje a 0%.
Comparación entre el plano de control de versiones canary y el clúster canary
Hay dos estrategias que se usan con frecuencia para las migraciones de Anthos Service Mesh dentro del clúster a Anthos Service Mesh administrado:
- Migración del plano de control de detección de fallos: En esta estrategia, debes aprovisionar Anthos Service Mesh administrado en el mismo clúster en el que tienes instalada actualmente Anthos Service Mesh.
- Migración de clústeres de la versión canary: En esta estrategia, creas un clúster nuevo y, luego, aprovisionas Anthos Service Mesh administrado en él.
En este instructivo, se explica la estrategia de migración de clústeres de la versión canary.
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
Cuando completes el instructivo puedes borrar los recursos que hayas creado para evitar que se te sigan cobrando. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
Habilita las API necesarias.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
Habilita las API necesarias.
Inicia Cloud Shell
En este instructivo, usarás Cloud Shell, un entorno de shell alojado en Google Cloud que te permite administrar tus recursos de Google Cloud.
Cloud Shell viene preinstalado con las herramientas de línea de comandos de Google Cloud CLI, istioctl y kubectl. La CLI de gcloud proporciona la CLI principal de Google Cloud.
Abre una sesión de Cloud Shell en la esquina superior derecha de esta página, haz clic en terminal y, luego, en Confirmar. Se abrirá una sesión de Cloud Shell en un marco en la parte inferior de la página. Completa los siguientes comandos en esa sesión de Cloud Shell.
Descarga el código de muestra
Clona los repositorios de Git que contienen los recursos de Istio y Kubernetes que usarás:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Configura el clúster con Anthos Service Mesh en el clúster
Crea el clúster e instala Anthos Service Mesh dentro del clúster
En la sección, crearás el clúster que usa Anthos Service Mesh en el clúster. En la práctica, se trata de los clústeres que ya usas.
Reemplaza
PROJECT_ID
por el ID del proyecto y crea un clúster nuevo:gcloud container clusters create cluster-with-in-cluster-asm \ --project=PROJECT_ID \ --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool=PROJECT_ID.svc.id.goog
Cambia el nombre del contexto del clúster para que sea más fácil trabajar con él:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \ cluster-with-in-cluster-asm
Comprueba que se haya cambiado el nombre del contexto del clúster:
kubectl config get-contexts --output="name"
Descarga la versión que instala de Anthos Service Mesh 1.15.4 en el directorio de trabajo actual:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.15 > asmcli
Se le pedirá escribir "y" y, luego, presionar Intro.
El resultado es similar al siguiente:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701k
Haz que la secuencia de comandos
asmcli
sea ejecutable:chmod +x asmcli
Instala Anthos Service Mesh en el clúster con
asmcli
:./asmcli install \ --project_id PROJECT_ID \ --cluster_name cluster-with-in-cluster-asm \ --cluster_location us-central1-a \ --output_dir . \ --enable_all \ --ca mesh_ca
La herramienta
asmcli
puede tardar varios minutos en completarse. La herramienta genera mensajes informativos para que puedas seguir su progreso.Cuando el proceso finaliza con éxito, el resultado es similar al siguiente:
... asmcli: Successfully installed ASM.
Implementa la puerta de enlace de entrada de Anthos Service Mesh
Implementarás la puerta de enlace de entrada de Anthos Service Mesh en un espacio de nombres independiente llamado
asm-ingress
. Crea el espacio de nombres:kubectl \ --context cluster-with-in-cluster-asm \ create namespace asm-ingress
Usa la etiqueta
istio.io/rev=asm-1154-4
para agregar el espacio de nombresasm-ingress
a la malla de servicios y habilitar la inserción automática de proxy de sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1154-4
El resultado es similar al siguiente:
namespace/asm-ingress labeled
Implementa la puerta de enlace de entrada de Anthos Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
El resultado es similar al siguiente:
serviceaccount/asm-ingressgateway created service/asm-ingressgateway created deployment.apps/asm-ingressgateway created gateway.networking.istio.io/asm-ingressgateway created
Implementa Online Boutique
Implementarás Online Boutique en un espacio de nombres independiente llamado
onlineboutique
. Crea el espacio de nombres:kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutique
Usa la etiqueta
istio.io/rev=asm-1154-4
para agregar el espacio de nombresonlineboutique
a la malla de servicios y habilitar la inserción automática de proxy de sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1154-4
El resultado es similar al siguiente:
namespace/onlineboutique labeled
Implementar los 12 servicios de Online Boutique, incluido el generador de cargas que imita el tráfico de usuarios:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Obtén la dirección IP pública de la puerta de enlace de entrada de Anthos Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copia la dirección IP pública de la puerta de enlace de entrada y accede a ella a través de tu navegador web. Verá la aplicación de muestra Online Boutique.
Configura el clúster nuevo con Anthos Service Mesh administrado
Crea el clúster y aprovisiona Anthos Service Mesh
En esta sección, crearás el clúster al que migrarás. Aprovisionará Anthos Service Mesh administrado y, luego, implementará Online Boutique para replicar las implementaciones desde el clúster que usa Anthos Service Mesh dentro del clúster.
Almacene el número de su proyecto en una variable de entorno:
export PROJECT_NUMBER=$(gcloud projects \ describe PROJECT_ID --format='get(projectNumber)')
Crea un clúster nuevo:
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}
Cambia el nombre del contexto del clúster para que sea más fácil trabajar con él:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-managed-asm \ cluster-with-managed-asm
Comprueba que se haya cambiado el nombre del contexto del clúster:
kubectl config get-contexts --output="name"
Habilita Anthos Service Mesh en la flota de tu proyecto. Una fleta es una agrupación lógica de clústeres de Kubernetes y otros recursos que se pueden administrar juntos.
gcloud container fleet mesh enable --project PROJECT_ID
El resultado es similar al siguiente:
Waiting for Feature Service Mesh to be created...done.
Registra el clúster en la flota del proyecto:
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
El resultado es similar al siguiente:
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.
Habilita Anthos Service Mesh administrado en el clúster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-managed-asm-membership \ --project PROJECT_ID
El resultado es similar al siguiente:
Waiting for Feature Service Mesh to be updated...done.
Verifica que se aprovisione Anthos Service Mesh para el clúster y que esté listo para usarse:
gcloud container fleet mesh describe --project PROJECT_ID
Puede tomar unos 10 minutos que Anthos Service Mesh se aprovisione y esté listo para usarse en el clúster. Si ves
controlPlaneManagement.state: DISABLED
ocontrolPlaneManagement.state: PROVISIONING
, deberás volver a ejecutar el comando anterior cada algunos minutos hasta que veascontrolPlaneManagement.state: ACTIVE
.El resultado es similar al siguiente:
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'
Implementa la puerta de enlace de entrada de Anthos Service Mesh
Implementarás la puerta de enlace de entrada de Anthos Service Mesh en un espacio de nombres independiente llamado
asm-ingress
. Crea el espacio de nombres:kubectl \ --context cluster-with-managed-asm \ create namespace asm-ingress
Usa la etiqueta
istio.io/rev=asm-managed
para agregar el espacio de nombresasm-ingress
a la malla de servicios y habilitar la inserción automática de proxy de sidecar.kubectl \ --context cluster-with-managed-asm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Implementa la puerta de enlace de entrada de 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
El resultado es similar al siguiente:
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Implementa Online Boutique
Implementarás Online Boutique en un espacio de nombres independiente llamado
onlineboutique
. Crea el espacio de nombres:kubectl \ --context cluster-with-managed-asm \ create namespace onlineboutique
Usa la etiqueta
istio.io/rev=asm-managed
para agregar el espacio de nombresonlineboutique
a la malla de servicios y habilitar la inserción automática de proxy de sidecar.kubectl \ --context cluster-with-managed-asm \ label namespace onlineboutique 'istio.io/rev=asm-managed'
Implementar los 12 servicios de Online Boutique, incluido el generador de cargas que imita el tráfico de usuarios:
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
Obtén la dirección IP pública de la puerta de enlace de entrada de Anthos Service Mesh:
kubectl \ --context cluster-with-managed-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copia la dirección IP pública del servicio
asm-ingressgateway
y accede a ella mediante tu navegador web. Verás la aplicación de muestra Online Boutique. Usarás la dirección IP pública en la siguiente sección, así que cópiala en una variable de entorno: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}' \ )
Prueba el clúster con Anthos Service Mesh mediante una implementación de versiones canary
En esta sección, debes configurar el clúster con Anthos Service Mesh dentro del clúster, de modo que el 50% del tráfico de usuarios a Online Boutique se traslade a la instancia de Online Boutique en el clúster con Anthos Service Mesh administrado. Para lograr esto, implementa dos recursos de Istio en el clúster mediante Anthos Service Mesh dentro del clúster:
- Una ServiceEntry para informar a Anthos Service Mesh en el clúster sobre el extremo de Online Boutique administrado del clúster de Anthos Service Mesh
- Un VirtualService para indicarle a la puerta de enlace de entrada de Anthos Service Mesh en el clúster que divida el tráfico 50-50.
Configura la dirección IP de la puerta de enlace de entrada del clúster de Anthos Service Mesh administrado dentro del recurso
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
Implementa
ServiceEntry
en el clúster mediante Anthos Service Mesh dentro del clúster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Implementa
VirtualService
en el clúster mediante Anthos Service Mesh dentro del clúster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yaml
Visita la dirección IP de la puerta de enlace de entrada del clúster con Anthos Service Mesh dentro del clúster, en tu navegador web:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service
Actualiza la página principal de Online Boutique varias veces y revisa el pie de página de cada página. Ten en cuenta que el 50% de las solicitudes se controlan mediante un pod en el clúster con Anthos Service Mesh administrado.
Migra al clúster con Anthos Service Mesh administrado
En esta sección, se supone que tienes un nombre de dominio y que tienes acceso a su configuración de DNS (servidor de nombres de dominio).
Agrega un registro A a la configuración de DNS para apuntar el nombre de dominio (como example.com) a la dirección IP de la puerta de enlace de entrada que se ejecuta en el clúster con Anthos Service Mesh en el clúster.
Para acceder a Online Boutique, visita el nombre del dominio en tu navegador web.
Minimizar el tiempo de actividad (TTL) del registro DNS para garantizar que puedas revertir la entrada DNS con rapidez si necesitas hacerlo.
Configura el registro A de tu nombre de dominio en la dirección IP pública de la puerta de enlace de entrada del clúster con Anthos Service Mesh administrado.
Cuando la migración se realice de forma correcta, borra el clúster con Anthos Service Mesh dentro del clúster:
gcloud container clusters delete cluster-with-in-cluster-asm \ --zone=us-central1-a \ --project=PROJECT_ID
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borrar el proyecto
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra recursos
Borra el clúster con Anthos Service Mesh administrado:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
¿Qué sigue?
- Obtén más información sobre Anthos Service Mesh administrado.
- Obtén más información sobre las prácticas recomendadas de seguridad de Anthos Service Mesh.