Istio

menu icon

Istio

Obtenga más información acerca de la tecnología Istio, una tecnología abierta 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 malla de servicios de código abierto configurable que conecta, supervisa y protege contenedores en un clúster Kubernetes. Actualmente, Istio trabaja de forma nativa solamente con Kubernetes, pero su naturaleza de código abierto hace posible que cualquiera pueda escribir extensiones que le permitan a Istio ejecutarse 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 contenedor 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, cada uno de ellos representa diferentes microservicios. Kubernetes gestiona la disponibilidad y el consumo de recursos de los nodos, añadiendo pods a la medida que aumenta la demanda con pod autoscaler. Istio inyecta contenedores adicionales en el pod para añadir seguridad, gestión y supervisión.

Debido a que es de código abierto, Istio puede ejecutarse en cualquier proveedor de nube pública que lo soporte y cualquier nube privada con administradores que así lo deseen.

El siguiente video explica más sobre los fundamentos de Istio (5:13):

La malla de servicios de red

Cuando las organizaciones se trasladan 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 o VM, incluida la demanda. El software de clúster como Kubernetes puede crear pods y ampliarlos, pero Kubernetes no proporciona enrutamiento, reglas de tráfico o herramientas de supervisión o depuración sólidas.

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 esas 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 un código de escritura para hacerlo), un administrador puede proporcionar configuración a la malla de servicio y hacer que complete el trabajo. 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 monitorea el tráfico de comunicaciones entre servicios y contenedores.

Istio y Kubernetes

Como se mencionó anteriormente, Istio sobrepone capas en Kubernetes, agregando contenedores que son esencialmente invisibles para el programador y el administrador. Los llamados contenedores “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 comando kubectl, comúnmente “kubectl -f filename”, donde el archivo es un archivo YAML. Los usuarios de Istio pueden ejecutar nuevos y diferentes tipos de archivos YAML con kubectl o utilizar el nuevo comando opcional ioctl.

Supervisión

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

Gestión

Debido a que la interfaz para Istio es esencialmente la misma que Kubernetes, la gestión no requiere casi ningún trabajo adicional. De hecho, Istio permite al usuario crear políticas que impacten y gestionen todo el Grupo Kubernetes, reduciendo el tiempo para gestionar cada clúster mientras se elimina la necesidad de código de gestión personalizado.

Beneficios

Los principales beneficios de una malla de servicio incluyen funciones para mejorar la depuración, la supervisión, el enrutamiento, la seguridad y el aprovechamiento. Es decir, con Istio, se hará menos esfuerzo para gestionar un grupo más amplio de servicios.

Depuración mejorada

Digamos, por ejemplo, que un servicio tiene varias dependencias. El servicio pay_claim de una compañía de seguros llama al servicio deductible_amt, que llama al servicio is_member_covered, y así sucesivamente. Una cadena de dependencias compleja puede tener 10 o 12 llamadas de servicio. Cuando uno de esos 12 está fallando, habrá un conjunto en cascada de fallas que dan como resultado algún tipo de error 500, error 400, o posiblemente ninguna respuesta en absoluto.

Para depurar ese conjunto de llamadas, puede utilizar algo como un rastreo de lote. 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 al 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.

Seguimiento y observabilidad

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

Política

De manera 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 son verdaderas dependencias. Otra política para mantener los servicios en alto es un límite de tasa, que impedirá que el exceso de tráfico obstruya un servicio y evitará ataques de denegación de servicio.

Enrutamiento y equilibrio de carga

De forma predeterminada, Kubernetes proporciona equilibrio de 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, luego se iniciará de nuevo. Sin embargo, a veces una empresa implementará diferentes versiones del mismo servicio en producción.

El ejemplo más simple de esto puede ser una implementación azul/verde. En ese 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 hacer que la conmutación sea rápida 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 encabezados. Así, por ejemplo, los usuarios beta pueden dirigirse a un pod “canary” con la última y mejor compilación, mientras que los usuarios regulares van a la compilación de producción estable.

Rotura de circuitos

Si un servicio está sobrecargado o inactivo, las solicitudes adicionales fallarán mientras se continúa sobrecargando el sistema. Debido a que Istio está rastreando errores y retrasos, puede forzar una pausa, permitiendo que un servicio se recupere después de un número específico de solicitudes establecidas por la política. Puede aplicar esta política en todo el clúster mediante la creación de un archivo de texto pequeño y direccionando a 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, asegura que ningún usuario no autorizado pueda falsificar o suplantar la identidad (spoof) de una llamada de servicio. AAA proporciona a los profesionales de seguridad y operaciones las herramientas que necesitan para supervisar, con menos costos generales.

Administración simplificada

Las aplicaciones tradicionales todavía necesitan las características de identificación, política y seguridad que ofrece Istio. Eso implica programadores y administradores trabajando en el nivel equivocado de abstracción, 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 correcta para el clúster por medio 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 plug-in en la línea de comando, en lugar de ir a una página web.

Ejemplos

Visualización de 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, profundizar en 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 que aparece a continuación muestra un gráfico de dependencias generado en tiempo real basado en los servicios que realmente dependen entre sí. Se genera a partir de observaciones reales de tráfico.

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

Rastreo de llamadas de servicio

El servicio Jaeger, un componente de Istio, proporciona rastreo para cualquier servicio. En este ejemplo, rastreamos la página del producto. Cada punto en la primera imagen representa una llamada de servicio. Al hacer clic en un punto, podemos investigar en detalles el diagrama de cascada para seguir las solicitudes y respuestas exactas de los servicios.

Imagen del servicio Jaeger, un componente de Istio, que permite realizar un seguimiento de cualquier servicio dado.  En este ejemplo, rastreamos la página del producto.  Cada punto de la primera imagen representa una llamada de servicio.

También podemos observar más de cerca la página del producto. Podemos ver que los errores están en la propia página del producto, que los detalles se han retornado 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 retornado satisfactoriamente.

Paneles de control

Istio viene con muchos paneles de control (listos para usar) 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, el tiempo de servicio de solicitudes y más. Lo mejor de todo es que están disponibles simplemente instalando y ejecutando Istio y añadiendo Grafana, una de las herramientas de código abierto del panel de control 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 usarse) para supervisar el estado y el rendimiento del sistema.

Istio frente a Envoy

Istio utiliza una versión de Envoy, aunque muy extendida, para realizar la supervisión, la gestión y el registro. Cada pod necesita rastrearse, e Istio necesita agregar y proporcionar información sobre todos los pods. Una posible alternativa al uso de Istio sería implementar Envoy en el clúster Kubernetes directamente y escribir el código de gestión. Sin embargo, cuando usted lo piensa, esto es esencialmente reescribir lo que es Istio, con todos los costos asociados y los errores de un proyecto de desarrollo personalizado.

Tutoriales

Elsitio 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 los componentes del 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 explorar Knative, consulte "Knative: Una guía esencial".

Conozca más acerca de Istio gestionado en IBM Cloud Kubernetes Service

Para obtener una visión general de cómo los Kubernetes gestionados pueden ayudarle en su ruta hacia la nube, vea nuestro video, "Ventajas de los Kubernetes gestionados":

Para obtener más información sobre mejores prácticas para habilitar y agilizar la implementación de contenedores en entornos de producción, consulte el informe "Mejores prácticas para la ejecución de contenedores y Kubernetes en producción".

Descubra cómo las mallas de servicio pueden ayudarle a controlar las interacciones entre los servicios de la aplicación con la guía práctica “Istio en detalle: Cómo empezar con mallas de servicio” (PDF, 4.1 MB).

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