Istio

menu icon

Istio

Conozca mejor la tecnología abierta Istio, que proporciona a los desarrolladores una forma de conectar, gestionar y proteger fácilmente redes de diferentes microservicios.

¿Qué es Istio?

Istio es una capa de servicios en malla de código abierto configurable que conecta, supervisa y protege los contenedores en un clúster de Kubernetes. En este proyecto, Istio trabaja de forma nativa solamente con Kubernetes, pero su naturaleza de código abierto hace posible que cualquier usuario pueda escribir extensiones para habilitar la ejecución de Istio en cualquier software de clúster. Hoy, nos centraremos en el uso de Istio con Kubernetes, su caso de uso más popular.

Kubernetes es una herramienta de orquestación de contenedores y una unidad central de Kubernetes es un nodo. Un nodo consta de uno o más contenedores, junto con sistemas de archivos u otros componentes. Una arquitectura de microservicios puede tener una docena de nodos diferentes, y cada uno de ellos representa diferentes microservicios. Kubernetes gestiona la disponibilidad y el consumo de recursos de los nodos, añadiendo pods a medida que aumenta la demanda con Pod Autoscaler. Istio inyecta contenedores adicionales en el pod para incrementar la seguridad, la gestión y la supervisión.

Al ser de código abierto, Istio puede ejecutarse en cualquier proveedor de cloud público que lo admita y cualquier cloud privado con administradores que así lo deseen.

El siguiente vídeo explica más sobre los aspectos básicos de Istio (5:13):

La malla de servicios de red

Cuando las organizaciones migran a los microservicios, necesitan dar soporte a docenas o cientos de aplicaciones específicas. Gestionar estos puntos finales por separado significa dar soporte a un gran número de máquinas virtuales, incluyendo la demanda. El software de clúster como Kubernetes puede crear pods y ampliarlos, pero Kubernetes no proporciona direccionamiento, reglas de tráfico ni herramientas de supervisión o depuración potentes.

Introduzca la malla de servicio.

A medida que aumenta el número de servicios, el número de formas potenciales de comunicar aumenta exponencialmente. Dos servicios solo tienen dos vías de comunicación. Tres servicios tienen seis, mientras que 10 servicios tienen 90. Una malla de servicio proporciona una única manera de configurar estas vías de comunicación creando una política para la comunicación.

Una malla de servicio instrumenta los servicios y dirige el tráfico de comunicaciones de acuerdo con una configuración predefinida. Esto significa que en lugar de configurar un contenedor en ejecución (o escribir código para ello), un administrador puede proporcionar configuración a la malla de servicio y completarla. Estas tareas siempre eran necesarias con los servidores web y la comunicación de servicio a servicio.

La forma más común de hacerlo en un clúster es utilizar el patrón sidecar. Un sidecar es un nuevo contenedor, dentro del pod, que direcciona y observa el tráfico de comunicaciones entre servicios y contenedores.

Istio y Kubernetes

Como se ha mencionado anteriormente, Istio se acopla en capas sobre Kubernetes, añadiendo contenedores que son básicamente invisibles para el programador y el administrador. Estos contenedores llamados "sidecar" actúan como una "persona en medio", dirigiendo el tráfico y supervisando las interacciones entre los componentes. Los dos funcionan en combinación de tres maneras: configuración, supervisión y gestión.

Configuración

El método principal para establecer la configuración con Kubernetes es el mandato kubectl, comúnmente "kubectl -f <nombre de archivo>", donde el archivo es un archivo YAML. Los usuarios de Istio pueden ejecutar nuevos o diferentes tipos de archivos YAML con kubectl o utilizar el nuevo mandato ioctl opcional.

Supervisión

Con Istio, puede supervisar fácilmente el estado de sus aplicaciones en ejecución con Kubernetes. La instrumentación de Istio puede gestionar y visualizar el estado de las aplicaciones, proporcionando más información que la supervisión general del clúster y los nodos que proporciona Kubernetes.

Gestión

Como la interfaz para Istio es básicamente la misma que Kubernetes, su gestión no requiere casi ningún trabajo adicional. De hecho, Istio permite al usuario crear políticas que incidan sobre y gestionen todo el clúster de Kubernetes, reduciendo el tiempo para gestionar cada clúster y eliminando a su vez la necesidad de contar con código de gestión personalizado.

Beneficios

Las principales ventajas de una malla de servicio incluyen funcionalidades para mejorar la depuración, la supervisión, el direccionamiento, la seguridad y la optimización. Es decir, Istio facilita la gestión de un grupo de servicios más amplio.

Depuración mejorada

Pongamos, por ejemplo, que un servicio tiene varias dependencias. El servicio pay_claim de una compañía de seguros llama al servicio deductible_amt, que a su vez llama al servicio is_member_covered, y así sucesivamente. Una cadena de dependencias compleja puede tener 10 o 12 llamadas de servicio. Cuando una de estas 12 falla, se produce un conjunto de fallos en cascada que generan algún tipo de error 500, error 400, o posiblemente ninguna respuesta en absoluto.

Para depurar este conjunto de llamadas, puede utilizar algo como un rastreo de pila. En el frontend, los desarrolladores del lado del cliente pueden ver qué elementos se extraen de los servidores web, en qué orden y examinarlos. Los programadores de frontend pueden obtener un diagrama de cascada para ayudar en la depuración.

Lo que el ejemplo no muestra es lo que sucede en el interior del centro de datos - cómo callback = parselLotamaAudiences llama a otros cuatro servicios web y cuáles responden más lentamente. Más tarde, veremos cómo Istio proporciona herramientas para rastrear llamadas de función en un diagrama muy parecido a este.

Supervisión y observabilidad

Los equipos de DevOps y la administración de TI pueden querer observar el tráfico para ver la latencia, el tiempo en servicio, los errores como porcentaje de tráfico, etc. A menudo, requieren ver un panel de control. Un panel de control proporciona una visualización de la suma, o promedio, o esas métricas a lo largo del tiempo, tal vez con la capacidad de "detallar más" en un nodo, servicio o pod específico. Kubernetes no proporciona esta funcionalidad de forma nativa.

Política

De forma predeterminada, Kubernetes permite que cada pod envíe el tráfico a cualquier otro pod. Istio permite a los administradores crear una política para restringir qué servicios pueden funcionar entre sí. Así, por ejemplo, los servicios solo pueden llamar a otros servicios que sean dependencias reales. Otra política para mantener los servicios activos es un límite de velocidad, que impedirá que el exceso de tráfico obstruya un servicio y evitará ataques de denegación de servicio.

Direccionamiento y equilibrio de carga

De forma predeterminada, Kubernetes proporciona equilibrio carga circular (round-robin). Si hay seis pods que proporcionan un microservicio, Kubernetes proporcionará un equilibrador de carga, o "servicio", que envía solicitudes a cada pod en orden creciente y, a continuación, empezará de nuevo. Sin embargo, a veces una empresa desplegará diferentes versiones del mismo servicio en producción.

El ejemplo más simple de esto puede ser un despliegue azul/verde. En este caso, el software puede crear una versión totalmente nueva de la aplicación en producción sin enviar usuarios de producción a la misma. Después de promocionar la nueva versión, la empresa puede mantener los servidores antiguos para cambiar de nuevo en caso de fallo.

Con Istio, esto es tan sencillo como utilizar el etiquetado en un archivo de configuración. Los administradores también pueden utilizar etiquetas para indicar a qué tipo de servicio conectarse y crear reglas basadas en cabeceras. Así, por ejemplo, los usuarios beta pueden dirigirse a un pod 'canary' con la última compilación, mientras que los usuarios habituales pueden optar por la compilación de producción estable.

Rotura de circuitos

Si un servicio está sobrecargado o se ha caído, las solicitudes adicionales fallarán mientras se continúa sobrecargando el sistema. Istio rastrea errores y retrasos, por lo que puede forzar una pausa para permitir que un servicio se recupere después de un número específico de solicitudes establecido por política. Puede aplicar esta política en todo el clúster mediante la creación de un archivo de texto pequeño y dirigiendo Istio para utilizarlo como una nueva política.

Seguridad

Istio proporciona identidad, política y cifrado de forma predeterminada, junto con autenticación, autorización y auditoría (AAA). Cualquier pod bajo administración que se comunique con otros utilizará el tráfico cifrado, evitando cualquier observación. El servicio de identidad, combinado con el cifrado, garantiza que ningún usuario no autorizado puede falsificar -o suplantar- una llamada de servicio. AAA proporciona a los profesionales de seguridad y operaciones las herramientas que necesitan para supervisar, con menos sobrecarga general.

Administración simplificada

Las aplicaciones tradicionales todavía necesitan las características de identificación, política y seguridad que ofrece Istio. Esto implica programadores y administradores trabajando a un nivel de abstracción equivocado, reimplementando las mismas reglas de seguridad una y otra vez para cada servicio. Istio les permite trabajar en la política de ajuste de nivel adecuado para el clúster a través de un único panel de control. Al mismo tiempo, con los controles de acceso de Istio, los paneles de control y las herramientas de depuración que se describen a continuación, puede añadir fácilmente un plugin en la línea de mandatos, en lugar de ir a una página web.

Ejemplos

Visualice servicios

Istio 1.1 incluye un nuevo complemento llamado Kiali que proporciona una visualización basada en web. Puede utilizarlo para realizar un seguimiento de las solicitudes de servicio, analizar a fondo los detalles o incluso exportar el historial de solicitudes de servicio como JSON para consultar y formatear a su manera. El gráfico de carga de trabajo a continuación ofrece un gráfico de dependencias generado en tiempo real basado en los servicios que dependen de cada uno. Se genera a partir de observaciones reales de tráfico.

Imagen del nuevo complemento llamado Kiali, que proporciona una visualización basada en web

Rastree llamadas de servicio

El servicio Jaeger, un componente de Istio, proporciona rastreo para cualquier servicio. En este ejemplo, hemos rastreado la página del producto. Cada punto en la primera imagen representa una llamada de servicio. Al pulsar sobre un punto, podemos obtener un mayor nivel de detalle en el diagrama de cascada para seguir las solicitudes y respuestas exactas de los servicios.

El servicio Jaeger, un componente de Istio, proporciona rastreo para cualquier servicio.  En este ejemplo, hemos rastreado la página del producto.  Cada punto en la primera imagen representa una llamada de servicio.

También podemos mirar más de cerca en la página del producto. Podemos ver que los errores están en la propia página del producto - que los detalles se han devuelto satisfactoriamente.

Imagen de la página del producto.  Podemos ver que los errores están en la propia página del producto - que los detalles se han devuelto satisfactoriamente.

Paneles de control

Istio incluye muchos paneles de control (listos para su uso) para supervisar el estado y el rendimiento del sistema. Estos pueden medir la utilización de CPU y memoria, la demanda de tráfico, el número de errores 400 y 500 o el tiempo en atender solicitudes entre otros valores. Lo mejor de todo es que están disponibles simplemente instalando y ejecutando Istio y añadiendo Grafana, una de las herramientas de panel de control de código abierto incluidas para Istio. Istio también proporciona otros dos paneles de control:  Kiali y Jaeger.

Imagen de muchos paneles de control de Istio (listos para su uso) para supervisar el estado y el rendimiento del sistema.

Istio frente a Envoy

Istio utiliza una versión de Envoy, aunque muy ampliada, para realizar la supervisión, la gestión y el registro. Cada pod tiene que rastrearse, e Istio necesita agregar y proporcionar información sobre todos los pods. Una posible alternativa al uso de Istio sería desplegar Envoy en el clúster de Kubernetes directamente y escribir código de gestión. Aunque, si piensa en ello, esto es básicamente reescribir lo que es Istio, con todos los costes asociados y los errores de un proyecto de desarrollo personalizado.

Tutoriales

El sitio web de Istio (enlace externo a IBM) incluye una gran cantidad de documentación útil e instrucciones para empezar con Istio. 

Istio e IBM

Istio gestionado está disponible como parte de IBM Cloud Kubernetes Service. El servicio proporciona una instalación sencilla de Istio, actualizaciones automáticas y gestión del ciclo de vida de componentes de plano de control, así como la integración con herramientas de registro y supervisión de plataformas. Añada la integración de Istio gestionado a los clústeres actuales o a nuevos y recupere el control de los microservicios. Si está interesado en Knative, consulte "Knative: Guía básica".

Más información sobre Istio gestionado en IBM Cloud Kubernetes Service

Para obtener una visión general sobre cómo Kubernetes gestionado pueden ayudarle en su migración al cloud, vea nuestro vídeo sobre las ventajas de Kubernetes gestionado:

Para obtener más información sobre las mejores prácticas para habilitar y agilizar el despliegue de contenedores en entornos de producción, consulte el informe "Best Practices for Running Containers and Kubernetes in Production".

Descubra cómo las mallas de servicio le permiten controlar las interacciones entre los servicios de la aplicación con la guía práctica "Istio Explained: Getting Started with Service Mesh" (PDF, 4,1 MB).

Si está preparado para empezar a utilizar IBM Cloud, regístrese aquí.