Versión 1.14

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Migra de Istio 1.11 o posterior a Anthos Service Mesh

En este instructivo, se muestra cómo migrar una aplicación de un clúster de Google Kubernetes Engine (GKE) mediante Istio a un clúster nuevo mediante Anthos Service Mesh administrado, una malla de servicios completamente administrada y compatible con Istio de Google.

En este instructivo, realizarás lo siguiente:

  1. Crea un clúster nuevo de Google Kubernetes Engine y, luego, instala Istio y la puerta de enlace de entrada de Istio en el clúster. Este clúster actuará como el clúster existente del que deseas migrar.
  2. Implementa la aplicación de muestra Online Boutique en el clúster con Istio.
  3. Crea otro clúster de Google Kubernetes Engine, en el mismo proyecto de Google Cloud.
  4. Habilita Anthos Service Mesh en el segundo clúster y, luego, implementa la puerta de enlace de entrada de Anthos Service Mesh.
  5. Implementar Online Boutique en el clúster con Anthos Service Mesh para replicar la implementación desde el clúster con Istio
  6. Cambia el tráfico del 50% del tráfico del clúster con Istio al clúster con Anthos Service Mesh mediante las capacidades de división de tráfico de Istio en el clúster con Istio.
  7. Para completar la migración de Istio a Anthos Service Mesh, apunta la entrada del sistema de nombres de dominio (DNS) del clúster con Istio al clúster con Anthos Service Mesh.

El tráfico de usuarios se divide de 50 a 50 entre un clúster con Istio y un clúster con Anthos Service Mesh. Cada clúster contiene su propia implementación de Online Boutique.

Implementación de versiones canary

La implementación de versiones canary es una técnica que se usa en el desarrollo de software para probar una versión nueva antes de lanzarla 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 y cambiarás el tráfico de usuarios de forma incremental. Comenzarás dirigiendo 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 más pequeños y más. Si en algún momento notas que el clúster nuevo es incapaz de manejar un porcentaje de tráfico, puedes revertir mediante la reducción del porcentaje a 0%.

Comparación entre el plano de control de versiones canary y el clúster de versiones canary

Hay dos estrategias que se usan con frecuencia para las migraciones de Istio a Anthos Service Mesh:

  • Migración del plano de control de versiones canary: En esta estrategia, habilitas Anthos Service Mesh en el mismo clúster en el que tienes Istio instalado.
  • Migración de clústeres de la versión canary: En esta estrategia, creas un clúster nuevo y, luego, habilitas Anthos Service Mesh 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

  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. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

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

  4. Habilita las API necesarias.

    Habilita las API

  5. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

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

  7. Habilita las API necesarias.

    Habilita las API

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 para Google Cloud.

Abre una sesión de Cloud Shell desde la esquina superior derecha de esta página, haz clic en y, luego, en Confirmar. Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior de la página. Completa los siguientes comandos en esa sesión de Cloud Shell.

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

Crea el clúster e instala Istio

En la sección, crearás el clúster que usa Istio. En la práctica, se trata de los clústeres que ya usas.

  1. Reemplaza PROJECT_ID por el ID del proyecto y crea un 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 el perfil predeterminado de Istio y la versión que coincida con tu instalación de istioctl.

    istioctl install
    

    Se le solicitará que escriba &y; luego, presione Intro.

    El resultado es similar a lo 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. Implementa los 12 servicios de Online Boutique, que incluyen un generador de cargas que genera 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) al que se le asigna una dirección IP pública. Sin embargo, solo quieres permitir la entrada pública a través de la implementación de la puerta de enlace de entrada de Istio. 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 el tráfico público a fin de acceder 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 pública 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 pública del servicio istio-ingressgateway y accede a ella a través de tu navegador web. Verás la app de muestra Online Boutique.

Configura el clúster nuevo con Anthos Service Mesh administrado

Crea el clúster y habilita Anthos Service Mesh

En esta sección, crearás el clúster al que migrarás. Habilitarás Anthos Service Mesh administrado y, además, implementarás Online Boutique para replicar las implementaciones desde el clúster que usa Istio.

  1. Almacene el número de proyecto en una variable de entorno:

    export PROJECT_NUMBER=$(gcloud projects \
      describe PROJECT_ID --format='get(projectNumber)')
    
  2. Crea un clúster nuevo:

    gcloud container clusters create cluster-with-asm \
      --project=PROJECT_ID --zone=us-central1-a \
      --machine-type=e2-standard-2 --num-nodes=3 \
      --workload-pool PROJECT_ID.svc.id.goog \
      --labels mesh_id=proj-${PROJECT_NUMBER}
    
  3. 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-asm \
      cluster-with-asm
    
  4. Verifica que se haya cambiado el nombre del contexto del clúster:

    kubectl config get-contexts --output="name"
    
  5. Habilita Anthos Service Mesh en la flota de tu proyecto. Una flota 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 a lo siguiente:

    Waiting for Feature Service Mesh to be created...done.
    
  6. Registra el clúster en la flota del proyecto:

    gcloud container fleet memberships register cluster-with-asm-membership \
      --gke-cluster=us-central1-a/cluster-with-asm \
      --enable-workload-identity \
      --project PROJECT_ID
    

    El resultado es similar a lo 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.
    
  7. Habilita el plano de control administrado de Anthos Service Mesh en el clúster:

    gcloud container fleet mesh update \
      --control-plane automatic \
      --memberships cluster-with-asm-membership \
      --project PROJECT_ID
    

    El resultado es similar a lo siguiente:

    Waiting for Feature Service Mesh to be updated...done.
    
  8. Verifica que Anthos Service Mesh esté habilitado para el clúster y que esté listo para usarse:

    gcloud container fleet mesh describe --project PROJECT_ID
    

    El servicio puede tardar alrededor de 10 minutos en aprovisionarse y estar listo para usarse en el clúster. Si ves los detalles: 'Provisioning: asm-managed', deberás volver a ejecutar el comando anterior cada algunos minutos hasta que veas details: 'Ready: asm-managed'.

    El resultado es similar a lo siguiente:

    createTime: '2022-07-06T01:05:39.110120474Z'
    membershipSpecs:
      projects/123456789123/locations/global/memberships/cluster-with-gke-membership:
        mesh:
          controlPlane: AUTOMATIC
    membershipStates:
      projects/123456789123/locations/global/memberships/cluster-with-gke-membership:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            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

  1. 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-asm \
      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 de proxy de sidecar.

    kubectl \
      --context cluster-with-asm \
      label namespace asm-ingress 'istio.io/rev=asm-managed'
    
  3. Implementa la puerta de enlace de entrada de Anthos Service Mesh:

    kubectl \
      --context cluster-with-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml
    kubectl \
      --context cluster-with-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
    

    El resultado es similar a lo 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-asm \
      create namespace onlineboutique
    
  2. Usa la etiqueta istio.io/rev=asm-managed para agregar el espacio de nombres onlineboutique a la malla de servicios y habilitar la inyección automática de proxy de sidecar.

    kubectl \
      --context cluster-with-asm \
      label namespace onlineboutique 'istio.io/rev=asm-managed'
    
  3. Implementa los 12 servicios de Online Boutique, incluido el generador de cargas que genera tráfico de usuarios:

    kubectl \
      --context cluster-with-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml
    kubectl \
      --context cluster-with-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
    
  4. Obtén la dirección IP pública de la puerta de enlace de entrada de Anthos Service Mesh:

    kubectl \
      --context cluster-with-asm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Copia la dirección IP pública del servicio asm-ingressgateway y accede a ella mediante tu navegador web. Verás la app 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_ASM=$( \
      kubectl \
        --context cluster-with-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, configurarás el clúster con Istio, de modo que el 50% del tráfico de usuarios a Online Boutique se transfiera a la instancia de Online Boutique en el clúster con Anthos Service Mesh. Para lograr esto, implementa dos recursos de Istio en el clúster con Anthos Service Mesh:

  • una ServiceEntry para informar a Istio sobre el extremo Online Boutique del clúster de Anthos Service Mesh
  • un VirtualService para indicarle a la puerta de enlace de entrada de Istio que divida el tráfico entre 50 y 50.
  1. Configura la dirección IP de la puerta de enlace de entrada de Anthos Service Mesh dentro del recurso ServiceEntry:

    sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_ASM}/" anthos-service-mesh-samples/docs/migrate-istio-to-asm/traffic-split/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-istio-to-asm/traffic-split/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-istio-to-asm/traffic-split/virtual-service.yaml
    
  4. Visita la dirección IP de la puerta de enlace de entrada de 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 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.

Migra al clúster con Anthos Service Mesh

En esta sección, se supone que posees un nombre de dominio y tienes acceso a su configuración de DNS (servidor de nombres de dominio).

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

  2. Para acceder a Online Boutique, visita el nombre del dominio en tu navegador web.

  3. Minimiza el tiempo de actividad (TTL) del registro DNS para garantizar la reversión rápida de la entrada DNS si necesitas hacerlo.

  4. Configura el registro A de tu nombre de dominio como la dirección IP pública de la puerta de enlace de entrada de Anthos Service Mesh.

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

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

Borra el 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 recursos

Borra el clúster con Anthos Service Mesh:

  gcloud container clusters delete cluster-with-asm \
    --zone=us-central1-a \
    --project=PROJECT_ID

¿Qué sigue?