Istio en acción: Seguridad, tráfico y visibilidad en Kubernetes

Con el avance de las aplicaciones nativas de la nube, gestionar microservicios a gran escala se vuelve cada vez más complicado. Kubernetes se ha convertido en la plataforma estándar para orquestar aplicaciones en contenedores. Sin embargo, a medida que su arquitectura de microservicios crece, también aumenta la necesidad de una gestión avanzada del tráfico, la observabilidad y la seguridad dentro de sus clústeres de Kubernetes. Aquí es donde entran Istio y Kiali. Juntos, ofrecen herramientas poderosas para gestionar, visualizar y proteger sus micro servicios.

¿Que es Istio?

Istio es un Service Mesh Open Source que proporciona una forma uniforme de proteger, conectar y observar microservicios. Proporciona capacidades críticas como la gestión del tráfico, la seguridad y la capacidad de observación y sin necesidad de realizar cambios en el código de la aplicación.

Características

Manejo de Trafico

  • Load Balancing: Istio permite un control preciso del tráfico, como load balancing, traffic splitting y canary releases.

  • Routing: Permite reglas de enrutamiento avanzadas, haciendo posible dirigir el tráfico basándose en cabeceras HTTP, cookies y otros criterios.

  • Fault Injection: Puedes simular fallos para probar la resiliencia de tus microservicios inyectando fallos como delays o aborts.

Seguridad

  • Mutual TLS (mTLS): Istio proporciona cifrado de extremo a extremo entre servicios, garantizando una comunicación segura dentro de la malla.

  • Authorization Policies: Permite imponer un control de acceso detallado entre servicios.

  • Identity and Access Management: Istio se integra con los sistemas de autenticación y autorización existentes.

Observabilidad

  • Distributed Tracing: Istio se integra con herramientas como Jaeger y Zipkin para proporcionar capacidades de rastreo a través de microservicios.

  • Metrics Collection: Recopila métricas a nivel de servicio, que se pueden visualizar con Prometheus y Grafana.

  • Logging: Istio recopila logs de todas las interacciones del servicio, lo que facilita la monitorización y depuración de tus aplicaciones.

¿Que es Kiali?

Kiali proporciona una interfaz visual para observar y gestionar su malla de servicios, ofreciendo información sobre cómo interactúa el Service Mesh. Kiali se integra perfectamente con Istio, lo que le permite visualizar la topología de su malla de servicios, supervisar el estado de sus microservicios y solucionar problemas.

Características

Service Mesh Visualization

  • Graphical Representation: Kiali ofrece un gráfico en tiempo real de tu service mesh, mostrando cómo interactúan los servicios y resaltando cualquier problema potencial.

  • Traffic Flow: Visualiza el flujo de tráfico entre servicios, ayudándole a entender cómo se enrutan las peticiones.

  • Health Indicators: Kiali ofrece indicadores Health Check de tus servicios, mostrando errores, tiempos de respuesta y otras métricas clave.

Configuration Validation

  • Istio Config Checks: Kiali comprueba sus configuraciones de Istio en busca de errores e incoherencias, ayudándole a evitar configuraciones erróneas que podrían provocar fallos en el servicio.

  • Policy Validation: Garantiza que sus políticas de seguridad y enrutamiento se apliquen correctamente y funcionen según lo previsto.

Detailed Metrics and Tracing

  • Metrics Integration: Kiali se integra con Prometheus para mostrar métricas en tiempo real y datos históricos de los servicios dentro de su malla.

  • Tracing Integration: Al integrarse con Jaeger o Zipkin, Kiali proporciona datos de rastreo distribuidos, lo que le permite rastrear las solicitudes a medida que se propagan a través de sus microservicios.

Traffic Management

  • Traffic Routing: Kiali permite visualizar y modificar configuraciones de enrutamiento de tráfico, como despliegues canarios y desplazamiento de tráfico, directamente desde la consola.

  • Fault Injection and Testing: Puedes simular fallos y latencia dentro de la malla para probar la resiliencia de tus servicios.

Está claro que Istio junto con Kiali nos ayuda a gestionar nuestro Service Mesh de manera gráfica y confiable. Vamos a instalar ambos productos en nuestro clúster, junto con una aplicación, para ver qué podemos lograr. Tendremos una mejor observabilidad que nos ayudará a la hora de solucionar problemas, podremos mejorar la gestión del tráfico, adoptaremos una postura de seguridad mucho más agresiva y, sobre todo, una forma de configuración proactiva.

Instalación

Istio

Desgargar Istio e ingresamos a la carpeta. En mi caso, al momento de la entrada, tengo la version istio-1.24.2.

curl -L https://istio.io/downloadIstio | sh -
cd istio-1.24.2

Agregamos el PATH e instalamos.

export PATH=$PWD/bin/.istioctl/bin:$PATH
istioctl install

Revisamos nuestra instalación.

Aplicativo

Voy a usar un sample, que viene con Istio. Añadimos una etiqueta al namespace para indicar a Istio que inyecte automáticamente proxies Envoy sidecar cuando despleguemos nuestra aplicación más adelante.

# Creo un namespace
kubectl create ns istio-test
# Aplicamos para que se inyecten los tags.
kubectl label namespace istio-test istio-injection=enabled
# Instalamos la aplicacion
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n istio-test

La aplicación que desplegamos se verá algo así:

Vamos a revisar si tenemos el rollout listo, antes desplegamos nuestro Gateway.

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

Revisamos a donde apunta, para el ingreso externo.

kubectl get svc istio-ingressgateway -n istio-system

Vamos a hacerla mas facil llenando nuestras variables de entorno.

export INGRESS_NAME=istio-ingressgateway
export INGRESS_NS=istio-system
export INGRESS_HOST=$(kubectl -n "$INGRESS_NS" get service "$INGRESS_NAME" -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n "$INGRESS_NS" get service "$INGRESS_NAME" -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

Ejecutamos

curl -s "http://${GATEWAY_URL}/productpage" | grep -o "<title>.*</title>"

Tendría que devolvernos este mensaje

<title>Simple Bookstore App</title>

Vamos a revisar la Web, para confiramar.

Listo nuestro aplicativo!

Kiali

Desplegamos el Dashboard de Kiali, junto con Prometheus, Grafana. Dentro de la carpeta de Istio.

kubectl apply -f samples/addons

Ingresamos al Dashboard.

istioctl dashboard kiali

Ahora si podemos revisar! Tenemos miles de opciones para configurar y entender nuestro entorno. Algunas de las opciones. Por ejemplo aca graficamos como esta el servicio de productpage.

Algunas opciones, para jugar.

Sin dudas una herramienta para tener en nuestra navaja suiza, como administrador de Kubernetes.

Espero que les haya gustado la entrada, nos vemos en la próxima.

Referencias

https://shashwotrisal.medium.com/getting-started-with-istio-service-mesh-7441265b7c5b

https://medium.com/@baazigames/leveraging-istio-and-kiali-for-enhanced-kubernetes-cluster-management-4696c5b266b5

0
Subscribe to my newsletter

Read articles from Santiago Fernandez directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Santiago Fernandez
Santiago Fernandez

I have a bachelor's degree in Technology from the University of Palermo, a Master in Information Security from the University of Murcia and different certifications such as CISSP | CISM | CDPSE | CCSK | CSX | MCSA | SMAC™️ | DSOE | DEPC | CSFPC | CSFPC | 5x AWS Certified. He is currently CISO at Klar, a Mexican Fintech. He was fortunate to be awarded as CISO of the Year in Argentina in 2021 and was among the Top 100 CISO's in the World in 2022. A lover of new technologies, he has developed a career in DevSecOps and Cloud Security at Eko Party, the largest security conference in Latin America.