Migra desde Istio 1.11 o una versión posterior a Cloud Service Mesh

En este instructivo, se muestra cómo migrar una aplicación desde un clúster de Google Kubernetes Engine (GKE) con Istio en un clúster nuevo a través de aplicaciones Cloud Service Mesh: la malla de servicios de Google completamente administrada y que cumple con Istio.

En este instructivo, harás lo siguiente:

  1. Crear un clúster nuevo de Google Kubernetes Engine y, luego, instalar Istio y el Istio de entrada en el clúster. Este clúster actuará como tu clúster desde el que quieres migrar.
  2. Implementa el Boutique en línea la aplicación de muestra en el clúster con Istio.
  3. Crear otro clúster de Google Kubernetes Engine en el mismo proyecto de Google Cloud
  4. Habilita Cloud Service Mesh administrado en el segundo clúster y, luego, implementa el Puerta de enlace de entrada de la malla de servicios de Cloud.
  5. Implementa Online Boutique en el clúster con Cloud Service Mesh para replicar el del clúster con Istio.
  6. Cambiar el 50% del tráfico de usuarios del clúster con Istio al clúster con a través de las capacidades de división de tráfico de Istio clúster con Istio.
  7. Completa la migración de Istio a Cloud Service Mesh apuntando el dominio de sistema de nombres de dominio (DNS) del clúster con Istio al clúster con la malla de servicios en la nube.

El tráfico de usuarios se divide en partes iguales entre un clúster con Istio y un clúster con
la malla de servicios en la nube. Cada clúster contiene su propia implementación de soluciones
Boutique

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 Istio 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 Istio 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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API necesarias.

    Habilita las API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  7. Habilita las API necesarias.

    Habilita las API

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 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

Configura el clúster con Istio

Crea el clúster y, luego, instala Istio

En esta sección, crearás el clúster que usa Istio. En la práctica, esto serán los clústeres que ya estás usando.

  1. Reemplaza PROJECT_ID por tu project ID y crea clúster nuevo:

    gcloud container clusters create cluster-with-istio \
      --project=PROJECT_ID \
      --zone=us-central1-a \
      --machine-type=e2-standard-2 --num-nodes=3
    
  2. 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-istio \
      cluster-with-istio
    
  3. Verifica que se haya cambiado el nombre del contexto del clúster:

    kubectl config get-contexts --output="name"
    
  4. Instalar Istio en el clúster Para simplificar, instalarás la aplicación perfil de Istio y de la versión que coincida con tu instalación de istioctl.

    istioctl install
    

    Se te pedirá que escribas "y". y, luego, presiona Enter.

    El resultado es similar al siguiente:

    This will install the Istio X.Y.Z default profile with ["Istio core" "Istiod" "Ingress gateways"] components into the cluster. Proceed? (y/N)
    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Ingress gateways installed
    ✔ Installation complete
    Making this installation the default for injection and validation.
    

Implementa Online Boutique

  1. Implementarás Online Boutique en un espacio de nombres independiente llamado onlineboutique. Crea el espacio de nombres:

    kubectl \
      --context cluster-with-istio \
      create namespace onlineboutique
    
  2. Implementar los 12 servicios de Online Boutique, que incluyen un generador de cargas que Imita el tráfico de usuarios:

    kubectl \
      --namespace=onlineboutique \
      --context=cluster-with-istio \
      apply -f microservices-demo/release/kubernetes-manifests.yaml
    
  3. En el paso anterior, también se implementó un servicio llamado frontend-external (de tipo LoadBalancer) a la que se le asigna una dirección IP externa. Sin embargo, solo permitir la entrada pública a través de la puerta de enlace de entrada de Istio de Google Workspace. Borra el recurso de servicio frontend-external:

    kubectl \
      --namespace=onlineboutique \
      --context=cluster-with-istio \
      delete service frontend-external
    
  4. Implementa un recurso Gateway de Istio y un recurso VirtualService de Istio para que el tráfico público acceda a Online Boutique:

    kubectl \
      --namespace=onlineboutique \
      --context=cluster-with-istio \
      apply -f microservices-demo/istio-manifests/frontend-gateway.yaml
    
  5. Obtén la dirección IP externa de la puerta de enlace de entrada de Istio:

    kubectl \
      --namespace istio-system \
      --context=cluster-with-istio \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  6. Copia la dirección IP externa del servicio istio-ingressgateway y, luego, acceder a él a través de tu navegador web. Verás la muestra de 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 y replicar las implementaciones desde el clúster que usa Istio.

  1. 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
    
  2. 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
    
  3. Verifica que se haya cambiado el nombre del contexto del clúster:

    kubectl config get-contexts --output="name"
    
  4. 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.
    
  5. 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.
    
  6. 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.
    
  7. 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 o controlPlaneManagement.state: PROVISIONING, deberás volver a ejecutar el comando anterior cada algunos minutos hasta que veas controlPlaneManagement.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

  1. 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-csm \
      create namespace asm-ingress
    
  2. Usa la etiqueta istio.io/rev=asm-managed para agregar el espacio de nombres asm-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'
    
  3. 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

  1. 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
    
  2. Usa la etiqueta istio.io/rev=asm-managed para agregar onlineboutique. 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'
    
  3. 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
    
  4. 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}'
    
  5. 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 muestra 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 Istio de modo que puedas 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 Istio:

  • una ServiceEntry para informar a Istio sobre la malla de servicios de Cloud administrada el extremo Online Boutique del clúster.
  • VirtualService para indicarle a la puerta de enlace de entrada de Istio que divida el tráfico de 50 a 50.
  1. 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
    
  2. Implementa ServiceEntry en el clúster con Istio:

    kubectl \
      --context cluster-with-istio \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
    
  3. Implementa VirtualService en el clúster con Istio:

    kubectl \
      --context cluster-with-istio \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service.yaml
    
  4. Visita la dirección IP de la puerta de enlace de entrada del clúster con Istio, en tu navegador web:

    kubectl \
      --context cluster-with-istio \
      --namespace istio-system \
      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).

  1. 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 Istio.

  2. Accede a Online Boutique visitando el nombre de dominio en tu navegador web.

  3. 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.

  4. 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.

  5. Cuando la migración se realice de forma correcta, borra el clúster con Istio:

    gcloud container clusters delete cluster-with-istio \
      --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

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

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?