Instala Istio en Kubernetes Engine

Istio es un marco de trabajo de código abierto para conectar, supervisar y proteger microservicios, incluidos los servicios que se ejecutan en Kubernetes Engine. Te permite crear una red de servicios implementados con balanceo de cargas, autenticación de servicio a servicio, supervisión y más, sin requerir ningún cambio en el código de servicio. Tu agregas la asistencia de Istio a los servicios implementando un proxy especial de archivo adicional Envoy en cada uno de los pods de tu aplicación. El proxy Envoy intercepta toda la comunicación de red entre microservicios y se configura y administra mediante la funcionalidad del plano de control de Istio. Este instructivo te muestra cómo instalar y configurar Istio en GKE y también cómo implementar una aplicación de varios servicios habilitada para Istio.

Antes de comenzar

Sigue los siguientes pasos para habilitar la API de Kubernetes Engine:
  1. Visita la página Kubernetes Engine en Google Cloud Platform Console.
  2. Crea o selecciona un proyecto.
  3. Espera a que la API y los servicios relacionados se habiliten. Esto puede tardar varios minutos.
  4. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

Instala las siguientes herramientas de línea de comandos que se usan en este instructivo:

  • gcloud se usa para crear y borrar clústeres de Kubernetes Engine. gcloud está incluido en SDK de Google Cloud.
  • kubectl se usa para administrar Kubernetes, el sistema de organización de clústeres usado por Kubernetes Engine. Puedes instalar kubectl con gcloud:
    gcloud components install kubectl

Establece valores predeterminados para la herramienta de línea de comandos de gcloud

Para ahorrar tiempo escribiendo tu ID del proyecto y las opciones de la zona de Compute Engine en la herramienta de línea de comandos de gcloud, puedes establecer los siguientes valores:
gcloud config set project [PROJECT_ID]
gcloud config set compute/zone us-central1-b

Crea un clúster de GKE

Para crear un clúster en este instructivo, ejecuta el siguiente comando: vamos a llamar al instructivo clúster istio-tutorial:

gcloud container clusters create istio-tutorial \
    --machine-type=n1-standard-2 \
    --num-nodes=4 \
    --no-enable-legacy-authorization

Usa tu propio clúster

Si deseas usar un clúster existente para este instructivo, asegúrate de que use la versión predeterminada de GKE de Kubernetes y que tengas habilitado el control de acceso según la función (RBAC). Para habilitarlo, debes crear o actualizar tu clúster con la opción --no-enable-legacy-authorization.

También debes asegurarte de tener instalado kubectl y de que la versión sea la misma o más reciente que tu clúster. Puedes verificar que tienes la última versión ejecutando la versión kubectl version.

Paso 1: Instala Istio

Ahora instalemos Istio. A partir de la versión 0.2, Istio se instala en su propio espacio de nombres istio-system, y puede administrar microservicios desde todos los demás espacios de nombres. La instalación incluye componentes, herramientas y ejemplos de Istio Core.

Sigue estos pasos en la misma máquina donde tienes tus credenciales de clúster: esta es tu máquina de administración de clúster.

  1. Ve a la página del actualización de Istio para descargar el archivo de instalación correspondiente a tu SO en el que desees ejecutar el cliente de Istio.

  2. Extrae el archivo de instalación descargado. El directorio de instalación contiene lo siguiente:

    • Instalación de archivos .yaml para Kubernetes en install/
    • Aplicaciones de muestra en samples/
    • El cliente binario istioctl en el directorio bin/. istioctl se usa cuando se inyecta Envoy manualmente como un proxy de archivo adicional y para crear reglas y políticas de enrutamiento.
    • El istio.Archivo de configuración VERSION.
  3. Asegúrate de que estás en el directorio raíz de la instalación de Istio.

  4. Agrega el cliente istioctl a tu ruta de acceso:

    export PATH=$PWD/bin:$PATH
  5. Otorga permisos de administrador de clúster al usuario actual. Necesitas estos permisos para crear las reglas de control de acceso basado en funciones (RBAC) necesarias de Istio:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"
    
  6. Instala los componentes principales de Istio:

    kubectl apply -f install/kubernetes/istio-demo-auth.yaml

    Esto realiza lo siguiente:

    • Crea el espacio de nombres istio-system junto con los permisos RBAC necesarios.
    • Implementa los componentes principales de Istio:

      • Istio-Pilot, que es responsable de la detección del servicio y de la configuración de los proxies de archivos adicionales Envoy en una malla de servicio de Istio.
      • Los componentes Mixer de Istio-Policy y de Istio-Telemetry que aplican políticas de uso y recopilan datos de telemetría a través de la malla de servicios
      • Istio-Ingressgateway, que proporciona un punto de ingreso para el tráfico desde fuera del clúster
      • Istio-Citadel, que automatiza la administración de claves y certificados para Istio.
    • Implementa complementos para métricas, registros y seguimiento.

    • Habilita la autenticación mutua de TLS entre archivos adicionales Envoy. Ten en cuenta que el uso de esta opción de autenticación puede no funcionar con todas las aplicaciones: Puedes encontrar cómo instalar Istio sin ella y en qué situaciones se recomienda hacerlo en la guía de configuración de Istio.

Paso 2: Verifica la instalación de Istio

  1. Asegúrate de que los siguientes servicios de Kubernetes estén implementados: istio-citadel,istio-pilot, istio-ingressgateway, istio-policy, e istio-telemetry (también verás otros servicios implementados):

    kubectl get service -n istio-system
    
    Salida:
    NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                               AGE
    ...
    istio-citadel              ClusterIP      10.19.253.95            8060/TCP,9093/TCP                                                     37s
    istio-egressgateway        ClusterIP      10.19.242.139           80/TCP,443/TCP                                                        40s
    istio-ingressgateway       LoadBalancer   10.19.247.233        80:31380/TCP,443:31390/TCP,31400:31400/TCP                            40s
    istio-pilot                ClusterIP      10.19.243.14            15003/TCP,15005/TCP,15007/TCP,15010/TCP,15011/TCP,8080/TCP,9093/TCP   38s
    istio-policy               ClusterIP      10.19.254.117           9091/TCP,15004/TCP,9093/TCP                                           39s
    istio-sidecar-injector     ClusterIP      10.19.248.228           443/TCP                                                               37s
    istio-statsd-prom-bridge   ClusterIP      10.19.252.35            9102/TCP,9125/UDP                                                     39s
    istio-telemetry            ClusterIP      10.19.250.11            9091/TCP,15004/TCP,9093/TCP,42422/TCP                                 39s
    ...
  2. Asegúrate de que los Pods de Kubernetes correspondientes estén implementados y que todos los contenedores estén en funcionamiento: istio-pilot-*, istio-policy-*, istio-telemetry-*, istio-ingressgateway-*, e istio-citadel-*.

    kubectl get pods -n istio-system
    
    Salida:
    NAME                                        READY     STATUS      RESTARTS   AGE
    grafana-6995b4fbd7-mp7ps                    1/1       Running     0          12m
    istio-citadel-54f4678f86-4549b              1/1       Running     0          12m
    istio-cleanup-secrets-5pl77                 0/1       Completed   0          12m
    istio-egressgateway-c68bcd889-p52rb         1/1       Running     0          12m
    istio-galley-7bd8b5f88f-nhwlc               1/1       Running     0          12m
    istio-grafana-post-install-6dwhp            0/1       Completed   3          12m
    istio-ingressgateway-665699c874-l62rg       1/1       Running     0          12m
    istio-pilot-68cbbcd65d-l5298                2/2       Running     0          12m
    istio-policy-7c5b5bb744-k6vm9               2/2       Running     0          12m
    istio-security-post-install-g9l9p           0/1       Completed   3          12m
    istio-sidecar-injector-85ccf84984-2hpfm     1/1       Running     0          12m
    istio-statsd-prom-bridge-55965ff9c8-x6sqd   1/1       Running     0          12m
    istio-telemetry-5b6c57fffc-9j4dc            2/2       Running     0          12m
    istio-tracing-77f9f94b98-jv8vh              1/1       Running     0          12m
    prometheus-7456f56c96-7hrk5                 1/1       Running     0          12m
    servicegraph-684c85ffb9-9cd4x               1/1       Running     0          12m

Paso 3: Implementa la aplicación de muestra BookInfo

Una vez que Istio esté instalado y todos sus componentes se ejecuten, puedes intentar implementar una de las aplicaciones de muestra provistas con la instalación. En este instructivo, instalaremos BookInfo. Se trata de una aplicación sencilla que simula una librería formada por cuatro servicios que ofrecen una página web de productos, detalles de libros, reseñas (con varias versiones del servicio de revisión) y clasificaciones, todo administrado con Istio. Puedes encontrar el código fuente y todos los demás archivos usados en este ejemplo en el directorio muestras/bookinfo de tu instalación de Istio.

Cuando sigues estos pasos, los servicios de la aplicación BookInfo se implementan en un entorno habilitado para Istio con proxies de archivos adicionales Envoy inyectados junto con cada servicio a fin de proporcionar la funcionalidad de Istio.

  1. Asegúrate de que aún te encuentras en el directorio raíz de instalación de Istio en tu máquina de administración de clústeres.

  2. Implementa la aplicación con istioctl kube-inject y kubectl apply. El comando kube-inject actualiza la implementación de BookInfo para que se implemente un archivo adicional en cada pod de aplicación junto con el servicio.

    kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
    
  3. Confirma que la aplicación se implementó correctamente ejecutando los siguientes comandos:

    kubectl get services
    Salida:
    NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
    details                    10.0.0.31    <none>        9080/TCP             6m
    kubernetes                 10.0.0.1     <none>        443/TCP              7d
    productpage                10.0.0.120   <none>        9080/TCP             6m
    ratings                    10.0.0.15    <none>        9080/TCP             6m
    reviews                    10.0.0.170   <none>        9080/TCP             6m

    y

    kubectl get pods
    Salida:
    NAME                                        READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17                 2/2       Running   0          6m
    productpage-v1-560495357-jk1lz              2/2       Running   0          6m
    ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
    reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
    reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
    reviews-v3-1813607990-8ch52                 2/2       Running   0          6m
  4. Finalmente, define el enrutamiento de la puerta de enlace para la aplicación:

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    

Paso 4: Valida la implementación de la aplicación

Ahora que está implementado, veamos la aplicación BookInfo en acción.

Obtén la entrada IP y el puerto

Para usar BookInfo, primero necesitas obtener la IP y el puerto de entrada como se muestra a continuación:

kubectl get svc istio-ingressgateway -n istio-system
Salida:
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

Esto te da la dirección del servicio de entrada, como se muestra a continuación (usa el primer puerto):

export GATEWAY_URL=35.239.7.64:80

Prueba la aplicación

Una vez que tengas la dirección y el puerto, verifica que la aplicación BookInfo se ejecute con curl:

curl -I http://${GATEWAY_URL}/productpage

Si la respuesta muestra 200, significa que la aplicación funciona correctamente con Istio.

Luego, desde tu navegador, ve a http://$GATEWAY_URL/productpage para ver la página web de BookInfo. Si actualizas la página varias veces, podrás ver diferentes versiones de reseñas que se muestran en la página del producto presentadas en un estilo de turno rotativo (estrellas rojas, estrellas negras, sin estrellas), ya que aún no hemos usado Istio para controlar la versión de enrutamiento.

Implementa tu propia aplicación

Si deseas intentar implementar una de tus propias aplicaciones, simplemente sigue el mismo procedimiento con tu propia implementación de YAML: Istio no requiere cambios en la aplicación en sí. Ten en cuenta que la aplicación debe usar el protocolo HTTP/1.1 o HTTP/2.0 para todo su tráfico HTTP porque el proxy Envoy no admite HTTP/1.0: Se basa en encabezados que no están presentes en HTTP/1.0 para el enrutamiento.

Limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

Si no deseas continuar explorando la app BookInfo en ¿Qué sigue?, realiza lo siguiente para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

  1. Borra el servicio de entrada istio-ingressgateway.

    kubectl -n istio-system delete service istio-ingressgateway
  2. Espera hasta que el balanceador de cargas istio-ingressgateway se borre mientras miras la salida del siguiente comando:

    gcloud compute forwarding-rules list
  3. Borra el clúster del contenedor:

    gcloud container clusters delete istio-tutorial

¿Qué sigue?

Si bien el plano de control de Istio solo se puede instalar en Kubernetes, la funcionalidad de expansión de malla de Istio te permite agregar máquinas que no sean de Kubernetes, como las VM de Compute Engine a una malla de servicio de Istio. Puedes averiguar cómo hacerlo y ampliar nuestro ejemplo de BookInfo en Usar Istio con Compute Engine.

Si deseas explorar Istio más a fondo, la sección de guías cuenta con más instructivos que te permiten probar la funcionalidad de Istio de BookInfo, como los siguientes:

  • Enrutamiento inteligente: En este ejemplo, se muestra cómo usar las diversas capacidades de administración de tráfico de Istio con BookInfo. Te recomendamos continuar con él después de seguir este instructivo.
  • Telemetría en profundidad: En este ejemplo, se muestra cómo obtener métricas, registros y seguimientos uniformes en todos los servicios de BookInfo mediante el Mixer de Istio y el proxy de Envoy.
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Instructivos de Kubernetes Engine