Instala Anthos Service Mesh en clústeres conectados

En esta guía, se explica cómo realizar una instalación limpia de la versión 1.6.14-asm.2 de Anthos Service Mesh en clústeres conectados de GKE Enterprise. Usa esta guía para instalar Anthos Service Mesh en los siguientes entornos:

  • Amazon Elastic Kubernetes Service (Amazon EKS) en la versión de Kubernetes 1.16
  • Microsoft Azure Kubernetes Service (Microsoft AKS) en la versión de Kubernetes 1.16

La instalación habilita las características compatibles en tu clúster para el perfil de configuración asm-multicloud.

Antes de comenzar

Requisitos

  • El clúster de usuario en el que instalas Anthos Service Mesh debe tener al menos 4 CPU virtuales, 15 GB de memoria y 4 réplicas.

  • El clúster no debe tener instalados Anthos Service Mesh ni Istio de código abierto.

  • Para que se los incluya en la malla de servicios, los puertos de servicio deben tener un nombre, y ese nombre debe incluir el protocolo del puerto en la siguiente sintaxis: name: protocol[-suffix], en la que los corchetes indican un sufijo opcional que debe comenzar con un guion. Para obtener más información, consulta Asigna nombres a puertos de servicio.

Restricciones

Un proyecto de Google Cloud solo puede tener una malla asociada.

Configura tu entorno

Necesitas tener las siguientes herramientas en la máquina en la que deseas instalar Anthos Service Mesh. Ten en cuenta que solo puedes instalar Anthos Service Mesh en un clúster de usuario, no en uno de administrador.

Después de instalar Google Cloud CLI:

  1. Autentica con Google Cloud CLI

    gcloud auth login
    
  2. Actualiza los componentes:

    gcloud components update
    
  3. Instala kubectl:

    gcloud components install kubectl
    
  4. Instala la versión requerida de kpt:

       curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2
       chmod +x kpt_0_39_2
       alias kpt="$(readlink -f kpt_0_39_2)"
    
  5. Cambia el contexto del clúster de usuario:

    kubectl config use-context CLUSTER_NAME
  6. Otorga permisos de administrador de clúster a tu cuenta de usuario (tu dirección de correo electrónico de acceso de Google Cloud). Estos permisos son obligatorios a fin de crear las reglas de control de acceso basado en funciones (RBAC) necesarias para Anthos Service Mesh:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

Prepárate para instalar Anthos Service Mesh

    Linux

  1. Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz
  2. Descarga el archivo de firma y usa openssl para verificar la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig istio-1.6.14-asm.2-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    El resultado esperado es: Verified OK.

  3. Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
    tar xzf istio-1.6.14-asm.2-linux-amd64.tar.gz

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.6.14-asm.2 que contiene lo siguiente:

    • Hay aplicaciones de muestra en el directorio samples.
    • La herramienta de línea de comandos de istioctl que usas para instalar Anthos Service Mesh se encuentra en el directorio bin.
    • Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio manifests/profiles.

  4. macOS

  5. Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
  6. Descarga el archivo de firma y usa openssl para verificar la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.6.14-asm.2-osx.tar.gz.1.sig istio-1.6.14-asm.2-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    El resultado esperado es: Verified OK.

  7. Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
    tar xzf istio-1.6.14-asm.2-osx.tar.gz

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.6.14-asm.2 que contiene lo siguiente:

    • Hay aplicaciones de muestra en el directorio samples.
    • La herramienta de línea de comandos de istioctl que usas para instalar Anthos Service Mesh se encuentra en el directorio bin.
    • Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio manifests/profiles.

  8. Windows

  9. Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
  10. Descarga el archivo de firma y usa openssl para verificar la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.6.14-asm.2-win.zip.1.sig istio-1.6.14-asm.2-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    El resultado esperado es: Verified OK.

  11. Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
    tar xzf istio-1.6.14-asm.2-win.zip

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.6.14-asm.2 que contiene lo siguiente:

    • Hay aplicaciones de muestra en el directorio samples.
    • La herramienta de línea de comandos de istioctl que usas para instalar Anthos Service Mesh se encuentra en el directorio bin.
    • Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio manifests/profiles.

  12. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
    cd istio-1.6.14-asm.2
  13. Para mayor comodidad, agrega las herramientas que contiene el directorio /bin a tu ruta de acceso (PATH).
    export PATH=$PWD/bin:$PATH

Crea el espacio de nombres istio-system

Crea un espacio de nombres llamado istio-system para los componentes del plano de control:

kubectl create namespace istio-system

Configura el webhook de validación

Cuando instales Anthos Service Mesh, configura una etiqueta de revisión en istiod. Debes configurar la misma revisión en el webhook de validación.

Guarda el siguiente YAML en un archivo llamado istiod-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-1614-2
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-1614-2

Instala Anthos Service Mesh

  1. Ejecuta el siguiente comando para instalar Anthos Service Mesh mediante el perfil asm-multicloud. Si deseas habilitar una función compatible opcional, incluye -f y el nombre del archivo YAML en la siguiente línea de comandos. Consulta Habilita funciones opcionales para obtener más información.

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-1614-2
    

    El argumento --set revision agrega una etiqueta de revisión con el formato istio.io/rev=asm-1614-2 a istiod. El webhook automático de inyector de sidecar usa la etiqueta de revisión para asociar los sidecars insertados con una revisión istiod particular. Para habilitar la inserción automática del sidecar para un espacio de nombres, debes etiquetarlo con una revisión que coincida con la etiqueta en istiod.

  2. Configura el webhook de validación para que pueda encontrar el servicio istiod con la etiqueta de revisión:

    kubectl apply -f istiod-service.yaml
    

    Este comando crea una entrada de servicio que permite que el webhook de validación verifique de manera automática las configuraciones antes de que se apliquen.

La TLS mutua automática (mTLS automática) está habilitada de forma predeterminada. Con la mTLS automática, un proxy de sidecar de cliente detecta si el servidor tiene un sidecar de forma automática. El sidecar del cliente envía mTLS a las cargas de trabajo con sidecars y envía tráfico de texto sin formato a las cargas de trabajo sin sidecars.

Verifica los componentes del plano de control

Verifica que los Pods del plano de control en istio-system estén activos:

kubectl get pod -n istio-system

El resultado esperado es similar al siguiente:

NAME                                   READY   STATUS      RESTARTS   AGE
istio-ingressgateway-cff9f5c7d-qg4ls   1/1     Running   0          7m5s
istio-ingressgateway-cff9f5c7d-vlkzb   1/1     Running   0          7m20s
istiod-66b587859c-886gx                1/1     Running   0          7m33s
istiod-66b587859c-dfs2j                1/1     Running   0          7m33s

Si el resultado del comando muestra que uno o más componentes no están en estado Running, consulta Soluciona problemas de GKE Enterprise en clústeres conectados a fin de obtener una secuencia de comandos que puedas ejecutar para obtener detalles sobre los componentes.

Inserta proxies de sidecar

Anthos Service Mesh usa proxies de sidecar para mejorar la seguridad, confiabilidad y observabilidad de la red. Con Anthos Service Mesh, estas funciones se abstraen del contenedor principal de la aplicación y se implementan en un proxy común fuera del proceso, que se entrega como un contenedor separado en el mismo pod.

Antes de implementar las cargas de trabajo, asegúrate de configurar la incorporación del proxy de sidecar para que Anthos Service Mesh pueda supervisar y asegurar el tráfico.

Todas las cargas de trabajo que se ejecutan en tu clúster antes de instalar Anthos Service Mesh deben tener el proxy de sidecar incorporado o actualizado para que tengan la versión actual de Anthos Service Mesh. Antes de implementar las cargas de trabajo nuevas, asegúrate de configurar la incorporación del proxy de sidecar para que Anthos Service Mesh pueda supervisar y asegurar el tráfico.

Para habilitar la inserción automática del sidecar, debes etiquetar los espacios de nombres con la misma revisión que estableciste en istiod. Ejecuta el siguiente comando para mostrar las etiquetas en istiod:

kubectl -n istio-system get pods -l app=istiod --show-labels

Confirma que la etiqueta de revisión, istio.io/rev=asm-1614-2, esté en el resultado. Esta es la etiqueta que usarás para habilitar la inserción automática. Puedes habilitar la inserción automática con un comando, por ejemplo:

kubectl label namespace NAMESPACE istio-injection-istio.io/rev=asm-1614-2 --overwrite

En el ejemplo anterior, NAMESPACE es el nombre del espacio de nombres de los servicios de tu aplicación o es default si no creaste un espacio de nombres de forma explícita.

Para obtener más información, consulta Incorpora proxies de sidecar.

Implementa una aplicación de muestra

Anthos Service Mesh proporciona una puerta de enlace de entrada preconfigurada, istio-ingressgateway, que puedes usar para administrar el tráfico entrante a las aplicaciones que se ejecutan en tu malla de servicios. Para que las aplicaciones sean accesibles desde el exterior del clúster (por ejemplo, desde un navegador), necesitas lo siguiente:

  • Obtener la dirección IP externa de istio-ingressgateway.

  • Que la aplicación defina un recurso de puerta de enlace y VirtualService, similar a frontend-gateway.yaml de la aplicación de muestra de Online Boutique.

Para implementar y ejecutar la aplicación de muestra, sigue estos pasos:

  1. Descarga la muestra:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/microservices-demo.git/release \
    microservices-demo
    
  2. Habilita la incorporación automática de sidecars:

    kubectl label namespace default istio-injection=enabled
    
  3. Implementa la muestra en el clúster:

    kubectl apply -f microservices-demo
    

Para obtener la dirección IP externa de istio-ingressgateway, haz lo siguiente:

  1. Crea la variable de entorno de la clave de host con uno de los siguientes comandos:

    Microsoft AKS

      export HOST_KEY="ip"
    

    Amazon EKS

      export HOST_KEY="hostname"
    
  2. Crea la variable de entorno INGRESS_HOST:

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].'"$HOST_KEY"'}')
    
  3. Crea la variable de entorno INGRESS_PORT:

    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    
  4. Visita la aplicación en tu navegador. En la siguiente URL, reemplaza EXTERNAL_IP por $INGRESS_HOST:$INGRESS_PORT:

    http://EXTERNAL_IP/

Cuando termines de explorar, quita la muestra:

kubectl delete -f microservices-demo