Guía de inicio rápido de Anthos Service Mesh para GKE

Mediante este instructivo, instalarás Anthos Service Mesh 1.12.9-asm.3 con una herramienta proporcionada por Google, asmcli, en un nuevo clúster de Google Kubernetes Engine (GKE). En este instructivo, se explica cómo realizar las siguientes acciones:

  1. Configurar tu proyecto de Google Cloud.
  2. Crear un clúster de GKE con la cantidad mínima de CPU virtuales que requiere Anthos Service Mesh.
  3. Instalar Anthos Service Mesh con un plano de control en el clúster
  4. Implementar una aplicación de ejemplo para que puedas ver los datos de telemetría en los paneles de Anthos Service Mesh en la consola de Google Cloud.
  5. Expón y accede a la aplicación de muestra

Para simplificar la guía de inicio rápido y no tener varias rutas diferentes, se tomaron las siguientes decisiones:

  • Habilitar la autoridad certificadora de Anthos Service Mesh (CA de Mesh)
  • Implementar una puerta de enlace de entrada para exponer la aplicación

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices esta guía de inicio rápido, puedes borrar el clúster para evitar que continúe la facturación. 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 la consola de Google Cloud, 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 Google Cloud.

  4. Habilita la API de Kubernetes Engine.

    Habilita la API

  5. En la página del selector de proyectos de la consola de Google Cloud, 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 Google Cloud.

  7. Habilita la API de Kubernetes Engine.

    Habilita la API

  8. Toma nota de tu ID del proyecto.

Si bien Anthos Service Mesh requiere otras API, asmcli las habilita. Para mantener bajos los costos de facturación, la secuencia de comandos asmcli no habilita la API de GKE Enterprise. Existen algunas diferencias menores en la consola de Google Cloud cuando la API de GKE Enterprise está habilitada. Para obtener más información sobre estas diferencias, consulta Diferencias de la IU de GKE Enterprise y Anthos Service Mesh.

Instala las herramientas requeridas

Puedes ejecutar la herramienta en Cloud Shell o en tu máquina local que ejecuta Linux. Cloud Shell instala previamente todas las herramientas necesarias. Ten en cuenta que macOS no es compatible porque viene con una versión anterior de Bash.

Cloud Shell

Cloud Shell aprovisiona una máquina virtual (VM) g1-small de Compute Engine que ejecuta un sistema operativo Linux basado en Debian. Las ventajas de usar Cloud Shell son las siguientes:

  • Cloud Shell incluye gcloud, kubectl, kpt y otras herramientas de línea de comandos que necesitas.

  • El directorio $HOME de Cloud Shell tiene 5 GB de espacio de almacenamiento persistente.

  • Puedes elegir entre los editores de texto:

    • El editor de código, al que puedes acceder desde  en la parte superior de la ventana de Cloud Shell

    • Emacs, Vim o Nano, a los que puedes acceder desde la línea de comandos en Cloud Shell.

En la consola de Google Cloud, activa Cloud Shell.

Activar Cloud Shell

En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

Computadora local de Linux

  1. Asegúrate de tener instaladas las siguientes herramientas:

  2. Autentica con Google Cloud CLI

    gcloud auth login --project PROJECT_ID
    
  3. Actualiza los componentes:

    gcloud components update
    
  4. Asegúrate de que git esté en tu ruta para que kpt pueda encontrarlo.

Cree un clúster de GKE

  1. Ejecuta el siguiente comando para crear el clúster con la cantidad mínima de CPU virtuales que requiere Anthos Service Mesh. En el comando, reemplaza los marcadores de posición por la siguiente información:

    • CLUSTER_NAME: El nombre de tu clúster. El nombre solo puede contener caracteres alfanuméricos en minúsculas y -, debe comenzar con una letra y terminar con un carácter alfanumérico, además, no debe tener más de 40 caracteres.
    • PROJECT_ID: es el ID del proyecto en el que se creará el clúster.
    • CLUSTER_LOCATION: es la zona del clúster, como us-central1-a.
    gcloud container clusters create CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION \
        --machine-type=e2-standard-4 \
        --num-nodes=2 \
        --workload-pool=PROJECT_ID.svc.id.goog
    

    La creación del clúster tarda varios minutos. Mientras se crea el clúster, el comando gcloud muestra lo siguiente:

    Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...working...
    

    El resultado esperado en la creación correcta es similar al siguiente:

    Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...done.
    Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
    To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/CLUSTER_LOCATION/CLUSTER_NAME?project=PROJECT_ID
    kubeconfig entry generated for CLUSTER_NAME.
    NAME: CLUSTER_NAME
    LOCATION: CLUSTER_LOCATION
    MASTER_VERSION: 1.20.10-gke.1600
    MASTER_IP: 198.51.100.1
    MACHINE_TYPE: e2-standard-4
    NODE_VERSION: 1.20.10-gke.1600
    NUM_NODES: 2
    STATUS: RUNNING
    
  2. Obtén credenciales de autenticación para interactuar con el clúster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    

    Resultado esperado:

    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for CLUSTER_NAME.
    
  3. Establece el contexto actual para kubectl en el clúster.

    kubectl config set-context CLUSTER_NAME
    

    Resultado esperado:

    Context "CLUSTER_NAME" created.
    

Descarga asmcli

En esta sección, se describe cómo descargar la asmcli.

  1. Descarga la versión que instala de Anthos Service Mesh 1.12.9 en el directorio de trabajo actual:

    curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.12 > asmcli
    

    Resultado esperado:

    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
    100  167k  100  167k    0     0   701k      0 --:--:-- --:--:-- --:--:--  701k
    
  2. Haz que la secuencia de comandos sea ejecutable:

    chmod +x asmcli
    

Instale Anthos Service Mesh

Ejecuta la herramienta asmcli con las siguientes opciones para instalar Anthos Service Mesh en el clúster que creaste anteriormente. Si no cierras esta página desde que creaste el clúster, los marcadores de posición tienen los valores que ingresaste para el comando gcloud container clusters create.

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all \
  --ca mesh_ca
  • --project_id, --cluster_name y --cluster_location Especifica el ID del proyecto en el que se encuentra el clúster, el nombre del clúster y la zona o región del clúster.
  • --fleet_id El ID del proyecto host de la flota. Si no incluyes esta opción, asmcli usará el proyecto en el que se creó el clúster cuando este se registró.
  • --output_dir incluye esta opción para especificar un directorio en el que asmcli descarga el paquete anthos-service-mesh y extrae el archivo de instalación, que contiene istioctl, muestras y manifiestos. De lo contrario, asmcli descarga los archivos en un directorio tmp. Puedes especificar una ruta de acceso relativa o una completa. La variable de entorno $PWD no funciona aquí.
  • --enable_all permite que la secuencia de comandos realice las siguientes acciones:
    • Otorga los permisos de IAM necesarios.
    • Habilita las API de Google necesarias.
    • Configura una etiqueta en el clúster que identifique la malla.
    • Registra el clúster en la flota si aún no está registrado.

    La herramienta asmcli puede tardar varios minutos en completarse. La herramienta genera mensajes informativos para que puedas seguir su progreso.

    Resultado esperado en una instalación exitosa:

    asmcli: Successfully installed ASM.
    

    Implementa una puerta de enlace de entrada

    Anthos Service Mesh te brinda la opción de implementar y administrar puertas de enlace como parte de tu malla de servicios. Una puerta de enlace describe un balanceador de cargas que opera en el perímetro de la malla que recibe conexiones HTTP/TCP entrantes o salientes. Las puertas de enlace son proxies de Envoy que te brindan un control detallado sobre el tráfico que entra y sale de la malla.

    1. Crea un espacio de nombres para la puerta de enlace de entrada si aún no tienes uno. Las puertas de enlace son cargas de trabajo de usuarios y, como práctica recomendada, no deben implementarse en el espacio de nombres del plano de control. Reemplaza GATEWAY_NAMESPACE por el nombre de tu espacio de nombres.

      kubectl create namespace GATEWAY_NAMESPACE
      

      Resultado esperado:

      namespace/GATEWAY_NAMESPACE created
      
    2. Habilita la inserción automática en la puerta de enlace. Los pasos necesarios dependen de si deseas usar etiquetas de inserción predeterminadas (por ejemplo, istio-injection=enabled) o la etiqueta de revisión en el espacio de nombres de la puerta de enlace. El webhook de inyector de archivo adicional usa la etiqueta de revisión predeterminada y la etiqueta de revisión predeterminadas para asociar los proxies insertados con una revisión específica del plano de control.

      Etiquetas de inserción predeterminadas

      Aplica las etiquetas de inserción predeterminadas al espacio de nombres.

      kubectl label namespace GATEWAY_NAMESPACE istio-injection=enabled istio.io/rev-
      

      Etiqueta de revisión

      1. Usa el siguiente comando para encontrar la etiqueta de revisión en istiod:

        kubectl get deploy -n istio-system -l app=istiod -o \
          "jsonpath={.items[*].metadata.labels['istio\.io/rev']}{'\n'}"
        

        El comando genera la etiqueta de revisión que corresponde a la versión de Anthos Service Mesh, por ejemplo: asm-1129-3.

      2. Aplica la etiqueta de revisión a los espacios de nombres. En el siguiente comando, REVISION es el valor de la etiqueta de revisión istiod que anotaste en el paso anterior.

        kubectl label namespace GATEWAY_NAMESPACE \
          istio.io/rev=REVISION --overwrite
        

        Resultado esperado:

        namespace/GATEWAY_NAMESPACE labeled
        
    3. Puedes implementar la configuración de la puerta de enlace de entrada de ejemplo que se ubica en el directorio samples/gateways/istio-ingressgateway/ tal como está o modificarla según sea necesario.

      kubectl apply -n GATEWAY_NAMESPACE \
        -f DIR_PATH/samples/gateways/istio-ingressgateway
      

      Resultado esperado:

      deployment.apps/istio-ingressgateway created
      poddisruptionbudget.policy/istio-ingressgateway created
      horizontalpodautoscaler.autoscaling/istio-ingressgateway created
      role.rbac.authorization.k8s.io/istio-ingressgateway created
      rolebinding.rbac.authorization.k8s.io/istio-ingressgateway created
      service/istio-ingressgateway created
      serviceaccount/istio-ingressgateway created
      

    Obtén más información sobre las prácticas recomendadas para las puertas de enlace.

    Implementa la muestra de Online Boutique

    La aplicación de ejemplo de Online Boutique en el repositorio anthos-service-mesh-packages se modifica a partir del conjunto original de manifiestos en el repositorio microservices-demo. De acuerdo con las prácticas recomendadas, cada servicio se implementa en un espacio de nombres distinto con una cuenta de servicio única.

    1. Crea los espacios de nombres para la aplicación:

      kubectl apply -f \
        DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
      

      Resultado esperado:

      namespace/ad created
      namespace/cart created
      namespace/checkout created
      namespace/currency created
      namespace/email created
      namespace/frontend created
      namespace/loadgenerator created
      namespace/payment created
      namespace/product-catalog created
      namespace/recommendation created
      namespace/shipping created
      
    2. Habilita la inserción automática del sidecar (inserción automática). La etiqueta de revisión que se usa aquí es la misma que se usa para anotar el espacio de nombres de la puerta de enlace de entrada. Aplica la etiqueta de revisión a los espacios de nombres de la aplicación: En el siguiente comando, REVISION es el mismo valor que usaste para anotar el espacio de nombres de la puerta de enlace de entrada.

      for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do
        kubectl label namespace $ns istio.io/rev=REVISION --overwrite
      done;
      

      Resultado esperado:

      namespace/ad labeled
      namespace/cart labeled
      namespace/checkout labeled
      namespace/currency labeled
      namespace/email labeled
      namespace/frontend labeled
      namespace/loadgenerator labeled
      namespace/payment labeled
      namespace/product-catalog labeled
      namespace/recommendation labeled
      namespace/shipping labeled
      
    3. Implementa la aplicación de ejemplo en el clúster.

      1. Crea las implementaciones y cuentas de servicio:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/kubernetes-manifests/deployments
        

        Resultado esperado:

        serviceaccount/ad created
        deployment.apps/adservice created
        serviceaccount/cart created
        deployment.apps/cartservice created
        serviceaccount/checkout created
        deployment.apps/checkoutservice created
        serviceaccount/currency created
        deployment.apps/currencyservice created
        serviceaccount/email created
        deployment.apps/emailservice created
        serviceaccount/frontend created
        deployment.apps/frontend created
        serviceaccount/loadgenerator created
        deployment.apps/loadgenerator created
        serviceaccount/payment created
        deployment.apps/paymentservice created
        serviceaccount/product-catalog created
        deployment.apps/productcatalogservice created
        serviceaccount/recommendation created
        deployment.apps/recommendationservice created
        serviceaccount/shipping created
        deployment.apps/shippingservice created
        
      2. Crea los servicios:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/kubernetes-manifests/services
        

        Resultado esperado:

        service/adservice created
        service/cartservice created
        service/checkoutservice created
        service/currencyservice created
        service/emailservice created
        service/frontend created
        service/frontend-external created
        service/paymentservice created
        service/productcatalogservice created
        service/recommendationservice created
        service/shippingservice created
        
      3. Crea las entradas de servicio:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
        

        Resultado esperado:

        serviceentry.networking.istio.io/allow-egress-googleapis created
        serviceentry.networking.istio.io/allow-egress-google-metadata created
        

    Expón la aplicación y accede a ella

    Existen varias formas de exponer la aplicación. En esta guía, usaremos la puerta de enlace de entrada que implementamos antes para hacerlo. Para conocer otras formas de exponer la aplicación Online Boutique, consulta la sección Expón y accede a la aplicación en la guía de implementación de la aplicación de muestra Online Boutique.

    1. Implementa Gateway y VirtualService para el servicio de frontend

      kubectl apply -f \
          DIR_PATH/samples/online-boutique/istio-manifests/frontend-gateway.yaml
      

      Resultado esperado:

      gateway.networking.istio.io/frontend-gateway created
      virtualservice.networking.istio.io/frontend-ingress created
      
    2. Obtén la dirección IP externa de la puerta de enlace de entrada y reemplaza los marcadores de posición por la siguiente información:

      • GATEWAY_SERVICE_NAME: Es el nombre del servicio de puerta de enlace de entrada. Si implementaste la puerta de enlace de ejemplo sin modificaciones, sería istio-ingressgateway.
      • GATEWAY_NAMESPACE: Es el espacio de nombres en el que implementaste la puerta de enlace de entrada:
      kubectl get service GATEWAY_SERVICE_NAME \
          -n GATEWAY_NAMESPACE
      

      El resultado es similar al siguiente:

      NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                      AGE
      istio-ingressgateway   LoadBalancer   10.19.247.233   35.239.7.64   80:31380/TCP,443:31390/TCP,31400:31400/TCP   27m

      En este ejemplo, la dirección IP de la puerta de enlace de entrada es 35.239.7.64.

    3. Visita la aplicación en tu navegador para confirmar la instalación:

      http://EXTERNAL_IP/
      

    Consulta los paneles de la malla de servicios

    Después de implementar las cargas de trabajo en el clúster con los proxies de sidecar incorporados, puedes explorar las páginas de Anthos Service Mesh en la consola de Google Cloud para ver todas las funciones de observabilidad que ofrece Anthos Service Mesh. Ten en cuenta que los datos de telemetría toman uno o dos minutos en aparecer en la consola de Google Cloud después de implementar las cargas de trabajo.

    El acceso a Anthos Service Mesh en la consola de Google Cloud se controla mediante la Administración de identidades y accesos (IAM). Para acceder a las páginas de Anthos Service Mesh, el propietario del proyecto debe otorgar a los usuarios la función de editor o visualizador del proyecto, o los roles más restrictivas que se describen en Controla el acceso a Anthos Service Mesh en la consola de Google Cloud.

    1. En la consola de Google Cloud, ve a Anthos Service Mesh.

      Ir a Anthos Service Mesh

    2. Selecciona el proyecto de Google Cloud de la lista desplegable de la barra de menú.

    3. Si tienes más de una malla de servicios, selecciona la malla en la lista desplegable Malla de servicios.

    Para obtener más información, consulta Explora Anthos Service Mesh en la consola de Google Cloud.

    Limpia

    Antes de limpiar, si te interesa obtener más información sobre la TLS mutua, consulta Anthos Service Mesh con el ejemplo mTLS.

    • Si deseas conservar el clúster y quitar la muestra de Online Retail, realiza la siguiente acción:

      1. Borra los espacios de nombres de la aplicación:

        kubectl delete -f DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
        

        Resultado esperado:

        namespace "ad" deleted
        namespace "cart" deleted
        namespace "checkout" deleted
        namespace "currency" deleted
        namespace "email" deleted
        namespace "frontend" deleted
        namespace "loadgenerator" deleted
        namespace "payment" deleted
        namespace "product-catalog" deleted
        namespace "recommendation" deleted
        namespace "shipping" deleted
        
      2. Borra las entradas de servicio:

        kubectl delete -f DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
        

        Resultado esperado:

        serviceentry.networking.istio.io "allow-egress-googleapis" deleted
        serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
        
    • Si deseas evitar cargos adicionales, borra el clúster:

      1. Ejecuta el siguiente comando:

        gcloud container clusters delete  CLUSTER_NAME \
            --project=PROJECT_ID \
            --zone=CLUSTER_LOCATION
        
      2. En el mensaje ¿Quieres continuar (y/n)?, ingresa y.

        Después de unos minutos, verás el siguiente resultado:

        Deleting cluster CLUSTER_NAME...done.
        Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
        

    ¿Qué sigue?

    Conoce más sobre: