Migra del clúster a uno nuevo
En este instructivo, se muestra cómo migrar una aplicación desde un Clúster de Google Kubernetes Engine (GKE) que usa la malla de servicios de Cloud en el clúster a un clúster nuevo con Cloud Service Mesh administrado, el servicio de Google completamente administrado y que cumple con Istio de la red de VPC.
En este instructivo, harás lo siguiente:
- Crear un clúster de Google Kubernetes Engine nuevo y, luego, instalar Cloud Service Mesh en el clúster y la puerta de enlace de entrada de Cloud Service Mesh del clúster. Este clúster actuará que tu clúster existente del que quieres migrar.
- Implementa el Boutique en línea app de ejemplo en el clúster con Cloud Service Mesh integrado en él.
- Crear otro clúster de Google Kubernetes Engine en el mismo proyecto de Google Cloud
- Aprovisiona la malla de servicios de Cloud administrada en el segundo clúster y, luego, implementa la Puerta de enlace de entrada de la malla de servicios de Cloud.
- Implementa Online Boutique en el clúster con Cloud Service Mesh administrado para lo siguiente: y replicar la implementación desde el clúster con Cloud Service Mesh en el clúster.
- Traslada el 50% del tráfico de usuarios del clúster con Cloud Service Mesh integrado al clúster con Cloud Service Mesh administrado a través de la división del tráfico de Istio del clúster con Cloud Service Mesh integrado en él.
- Completa la migración de la malla de servicios de Cloud en el clúster a la malla de servicios administrados. Para ello, haz lo siguiente: dirigir la entrada del sistema de nombres de dominio (DNS) del clúster con Cloud Service Mesh en el clúster al clúster con Cloud Service Mesh administrado
Implementación de versiones canary
“Implementación de versiones canary” es una técnica que se usa en el desarrollo de software para probar un nuevo de algún software antes de lanzar la nueva versión para todos los usuarios. Integra implica el aumento incremental del porcentaje de tráfico enviado al nuevo versión. En este instructivo, configurarás un nuevo clúster con Cloud Service Mesh y cambiar el tráfico de usuarios a ella de forma incremental. Comenzarás el 0% del tráfico de usuarios al nuevo clúster, luego el 50% y, por último, el 100%. En producción, debes usar incrementos más pequeños y en mayor cantidad. Si en algún momento ten en cuenta que el clúster nuevo no es capaz de controlar un porcentaje de tráfico puedes hacer una reversión reduciendo el porcentaje a 0%.
Plano de control de versiones canary frente a clúster de versiones canary
Existen dos estrategias de uso general para las migraciones de Cloud Service Mesh en el clúster a de Cloud Service Mesh administrado:
- Migración del plano de control de la versión canary: En esta estrategia, aprovisionas Cloud Service Mesh administrado en el mismo clúster en el que Cloud Service Mesh en el clúster esté instalado.
- Migración de clústeres de la versión canary: En esta estrategia, creas un clúster nuevo y y, luego, aprovisionarle Cloud Service Mesh administrado.
En este instructivo, conocerás 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
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the required APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the required APIs.
Inicia Cloud Shell
En este instructivo, usarás Cloud Shell, que es una shell alojado en Google Cloud que te permite administrar tus recursos de Google Cloud.
Cloud Shell viene preinstalado Google Cloud CLI, kubectl y istioctl de línea de comandos. Gcloud CLI proporciona la CLI principal para Google Cloud.
Abre una sesión de Cloud Shell desde la esquina superior derecha. haz clic en terminal y, luego, en Confirmar. Se abrirá una sesión de Cloud Shell en un marco inferior. en la página. Completa los siguientes comandos en Cloud Shell sesión.
Descarga el código de muestra
Clona los repositorios de Git que contienen los recursos de Istio y Kubernetes que utilizará:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Configurar el clúster con Cloud Service Mesh en el clúster
Crea el clúster y, luego, instala Cloud Service Mesh en él
En esta sección, crearás el clúster que usa Cloud Service Mesh en el clúster. En estos serían los clústeres que ya estás usando.
Reemplaza
PROJECT_ID
por tu project ID y crea 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
Verifica que se haya cambiado el nombre del contexto del clúster:
kubectl config get-contexts --output="name"
Descarga la versión que instala Cloud Service Mesh 1.23.3 en el directorio de trabajo actual:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.23 > asmcli
Se te pedirá que escribas "y". y, luego, presiona Enter.
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 Cloud 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 seguir su progreso.Si se ejecuta de forma correcta, el resultado es similar al siguiente:
... asmcli: Successfully installed ASM.
Implementa la puerta de enlace de entrada de Cloud Service Mesh
Implementarás la puerta de enlace de entrada de Cloud Service Mesh espacio de nombres 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-1233-2
para agregarasm-ingress
. espacio de nombres en la malla de servicios y habilitar la inserción automática del proxy de sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1233-2
El resultado es similar al siguiente:
namespace/asm-ingress labeled
Implementa la malla de servicios de Cloud puerta de enlace de entrada:
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-1233-2
para agregaronlineboutique
. espacio de nombres en la malla de servicios y habilitar la inserción automática del proxy de sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1233-2
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 externa de la puerta de enlace de entrada de la malla de servicios de Cloud:
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 externa de la puerta de enlace de entrada y accede a ella a través de tu navegador web. Verás la aplicación de muestra Online Boutique.
Configura el clúster nuevo con Cloud Service Mesh administrado
Crea el clúster y aprovisiona la malla de servicios de Cloud administrado
En esta sección, crearás el clúster al que migrarás. Lo que harás aprovisionar Cloud Service Mesh administrado e implementar Online Boutique para Replicar las implementaciones desde el clúster que usa Cloud Service Mesh en el clúster
Crea un clúster nuevo:
gcloud container clusters create cluster-with-csm \ --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-csm \ cluster-with-csm
Verifica que se haya cambiado el nombre del contexto del clúster:
kubectl config get-contexts --output="name"
Habilitar Cloud Service Mesh en la flota de tu proyecto. R fleet es un operador lógico agrupamiento de clústeres de Kubernetes y otros recursos que se pueden administrar entre sí.
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-csm-membership \ --gke-cluster=us-central1-a/cluster-with-csm \ --enable-workload-identity \ --project PROJECT_ID
El resultado es similar al siguiente:
Waiting for membership to be created...done. Finished registering to the Fleet.
Habilita Cloud Service Mesh administrado en el clúster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_ID
El resultado es similar al siguiente:
Waiting for Feature Service Mesh to be updated...done.
Verifica que la malla de servicios administrados de Cloud se haya aprovisionado para el clúster y está listo para usarse:
gcloud container fleet mesh describe --project PROJECT_ID
Cloud Service Mesh puede tardar unos 10 minutos en aprovisionarse y listas para usar 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-csm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-csm-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 Cloud Service Mesh
Implementarás la puerta de enlace de entrada de la malla de servicios espacio de nombres llamado
asm-ingress
. Crea el espacio de nombres:kubectl \ --context cluster-with-csm \ 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 del proxy de sidecar.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Implementa la malla de servicios de Cloud puerta de enlace de entrada:
kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-csm \ --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-csm \ create namespace onlineboutique
Usa la etiqueta
istio.io/rev=asm-managed
para agregaronlineboutique
. espacio de nombres en la malla de servicios y habilitar la inserción automática del proxy de sidecar.kubectl \ --context cluster-with-csm \ 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-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Obtén la dirección IP externa de la puerta de enlace de entrada de la malla de servicios de Cloud:
kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copia la dirección IP externa del Service de
asm-ingressgateway
y el acceso a través de tu navegador web. Verás la aplicación de ejemplo Online Boutique. Usarás la dirección IP externa en la próxima sección, así que cópiala en una variable de entorno:export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \ kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Probar el clúster con Cloud Service Mesh mediante una implementación de versiones canary
En esta sección, configurarás el clúster con Cloud Service Mesh integrado de modo que El 50% del tráfico de usuarios a Online Boutique se traslada a la instancia de Online. Boutique en el clúster con Cloud Service Mesh administrado Para lograrlo, implementas dos recursos de Istio al clúster con Cloud Service Mesh en el clúster:
- Una ServiceEntry para informar a Cloud Service Mesh en el clúster sobre la malla de servicios administrada el extremo Online Boutique del clúster.
- VirtualService para indicarle a la puerta de enlace de entrada de Cloud Service Mesh del clúster que divida tráfico de 50 a 50.
Configura la dirección IP de la puerta de enlace de entrada del clúster de Cloud 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 con Cloud Service Mesh integrado en el 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 con Cloud Service Mesh integrado en el 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 Cloud Service Mesh integrado en el 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 la página cada vez. Ten en cuenta que el 50% de las solicitudes las maneja un Pod en el clúster con Cloud Service Mesh administrado.
Migra al clúster con Cloud Service Mesh administrado
En esta sección, se da por sentado que tienes un nombre de dominio y que tienes acceso a su DNS. (Servidor de nombres de dominio).
Agrega un registro A a la configuración de DNS para apuntar el nombre de dominio (p. ej., example.com) a la dirección IP de la puerta de enlace de entrada que se ejecuta en el clúster con Cloud Service Mesh en el clúster.
Accede a Online Boutique visitando el nombre de dominio en tu navegador web.
Minimiza el tiempo de actividad (TTL) del registro DNS para asegurarte de revertir rápidamente el la entrada de DNS si necesitas hacer una reversión.
Establece el registro A de tu nombre de dominio en la dirección IP externa del puerta de enlace de entrada del clúster con Cloud Service Mesh administrado.
Cuando la migración se realice de forma correcta, borra el clúster con Malla de servicios de Cloud en el clúster:
gcloud container clusters delete cluster-with-in-cluster-asm \ --zone=us-central1-a \ --project=PROJECT_ID
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conservar el proyecto y borrar los recursos individuales.
Borrar proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra los recursos
Borra el clúster con Cloud Service Mesh administrado:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
¿Qué sigue?
- Más información sobre Malla de servicios de nube administrada.
- Más información sobre Prácticas recomendadas para la seguridad de Cloud Service Mesh.