Hola, soy Fernando Sada, director técnico de Neodata IT Solutions, y en este post quiero explicar Istio en cinco minutos de lectura.

Ejecutar aplicaciones de software no es fácil, es posible que esté operando en diferentes regiones, diferentes plataformas, algunas de sus aplicaciones pueden ejecutarse en máquinas virtuales, otras pueden ejecutarse en contenedores y estas aplicaciones pueden estar escritas en diferentes lenguajes de programación o usar diferentes protocolos de red. Por ello, la pregunta que nos uno se hace es: ¿Cómo se puede mantener este sistema tan complejo?

El reto es realizar un buen seguimiento y monitorización de todos los sistemas, asegurar que todos los servicios estén en buen estado, hacer cumplir las políticas en todos esos entornos diferentes. Esto no va a permitir que los desarrolladores de aplicaciones se centren en la escritura y despliegue de nuevas funcionalidades. El reto es conseguir todo esto, sin imponer más carga de trabajo.

Istio está diseñado para ayudar con algunos de estos Desafíos. Es una herramienta que se puede denominar “malla de servicios” (service mesh tool).

Vamos a explicar brevemente que es una malla de servicios para poder entender mejor que es Istio. Una malla de servicios es una forma de conectar todos sus servicios juntos en una red consistente y una capa de monitorización.

Después de intentar imaginarnos que es una malla de servicios, volvemos a la explicación inicial. Istio funciona colocando un proxy de capa siete (L7 proxy) llamado Envoy Proxy junto a todas sus cargas de trabajo, todos sus servicios.

Estos proxies filtran el tráfico que entra y sale de los servicios, capturando métricas en torno a ese tráfico y haciendo cumplir las reglas de tráfico y políticas de seguridad. Por otro lado, se pueden utilizar los archivos yaml a través de las apis de Istio para agregar distintos tipos de políticas de tráfico de red y políticas de seguridad.

La instalación de Istio es realmente fácil. Todo lo que necesita para comenzar es inicializar un cluster de kubernetes.

En este ejemplo hay un clúster aquí ejecutándose y se está utilizando la herramienta de línea de comando CTL de Istio para instalar Istio en mi clúster.

Una vez que Istio está instalado y listo para funcionar, todo lo que tiene que hacer es etiquetar el espacio de nombres donde residen las aplicaciones para que pueda trabajar la herramienta Sidecar de Istio.

Una vez realizado, ya se pueden desplegar pods de Kubernetes como lo haría normalmente en su clúster e Istio inyectará el proxy Envoy en los pods de manera automática

Una vez que implemente una aplicación con Istio, hay muchas características que se obtienen de inmediato. Sin ninguna configuración adicional, por ejemplo, todos estos proxies de Envoy están enviando métricas sobre el tráfico que ocurre entre los servicios a través de Prometheus.

Esas métricas se hacen visibles en algunos paneles de control preconfigurados que te dicen cosas como:

  • Cuál es la latencia de mis servicios
  • Cuál es el rendimiento de la solicitud
  • Cuál es la tasa de error para obtener una visibilidad inmediata del estado de ejecución de mi aplicación

Istio también viene con Kiali de manera predefinida. Kiali es una herramienta gráfica que permite ver las dependencias entre los servicios que hay desplegados y si hay problemas, por ejemplo, errores entre dos servicios específicos.

Kiali aporta claridad para detectar los errores, lo que permite diagnosticar más fácilmente cuando las cosas van mal.

Istio también puede automatizar muchas tareas de seguridad diferentes, por ejemplo, Istio permite habilitar la autenticación TLS mutua o el cifrado en tránsito dentro de su malla de servicio sin ningún cambio en el código de la aplicación.

También maneja todos los certificados de cliente para que usted no tenga para administrarlos. Otra opción es utilizar la API de Istio para crear políticas de autorización específicas del servicio basadas en reglas de nivel de solicitud específicas.

Ya hemos visto muchas tareas de automatización y visualización, pero aún quedan algunas no menos importantes. Istio también realiza muchas tareas de automatización de red, por ejemplo, implementaciones de versionado (canary releases).

En este ejemplo, estamos implementando una nueva versión de uno de nuestros servicios finales y estamos usando las API de Istio para enviar un pequeño porcentaje de tráfico a la nueva versión del servicio, lo que nos permite ver fácilmente si algunos algo va mal en producción antes de que enviemos todo el tráfico a la v2.

Podemos usar el gráfico del servicio Kiali también para ver la división del tráfico en tiempo de ejecución entre las dos versiones de nuestro servicio.

Otra característica de red interesante de Istio es la capa de red llamada Ingress que gestiona el tráfico que ingresa a la malla de red del servicio desde el exterior. El tráfico de entrada se realiza a través de un Envoy Proxy, que es la misma forma en que se maneja el tráfico del clúster. Este sistema de gestión de red, permite usar las API de Istio para hacer gestionar el tráfico interno y exponerlo al exterior de una forma sencilla y segura.

Este modelo es soportado en entornos mukticloud y entornos hibridos o entre CPD on-premise y la nube. De este modo, se conectan todos juntos en una malla lógica. Esto es realmente poderoso porque desde este punto se puede comenzar a centralizar cosas como las políticas de seguridad, almacenarlas y sincronizarlas.

Se pueden gestionar todos los clústeres juntos y simplifica como se auditan los clusteres cuando ocurren cambios de configuración, así como revertir un cambio y volver a un estado anterior si hay un problema. Si se están ejecutando los servicios en varias regiones geográficas, puede usar el balanceo de carga de Istio para realizar reconducir el tráfico a una región que funcione correctamente mientras se subsana el fallo de la otra región, lo que le ayuda a mantener todo operativo desde la parte del cliente hasta los usuarios internos que necesiten gestionar las apps desplegadas.

En resumen, Istio está realmente diseñado para ayudar a su organización a tener consistencia en todos los entornos, reducir el esfuerzo, mejorar la capacidad de monitorización y ser capaz de escalar para poder mantener muchos servicios sin esfuerzo.


kubernetes Software