jueves, septiembre 12, 2019

Plugins para kubectl que te harán la vida más fácil al gestionar Kubernetes

Kubernetes y Docker están revolucionando el mundo de la informática, el desarrollo de aplicaciones y en concreto SecDevOps. Ambas tecnologías combinadas nos ofrecen beneficios como escalar y gestionar la implementación de una aplicación o un servicio de manera sencilla utilizando contenedores, hasta el punto de convertirse hoy día en un auténtico estándar para la orquestación. Como cualquier otra infraestructura, debemos tener precauciones a la hora de su implementación para intentar construirla de manera más segura posible, así como ofrecer el mejor rendimiento final.

Figura 1: Plugins para kubectl que te harán la vida más fácil al gestionar Kubernetes

Ya hemos hablado varias veces en este blog sobre cómo securizar Kubernetes (también de Docker y su seguridad, aunque en nuestro libro “Docker:SecDevOps” lo hacemos en profundidad), pero tampoco viene mal una ayuda extra a la hora de realizar este trabajo. Y es aquí donde los plugins de Kubernetes nos pueden echar una mano.

Figura 2: Libro Docker:SecDevOps de la editorial 0xWord

Existen multitud de plugins para kubectl para interactuar y realizar todo tipo de operaciones contra nuestro clúster. Todos sabéis que kubectl es la herramienta de línea de comandos para interactuar directamente con Kubernetes y ésta además, permite crear plugins a medida aumentando sus posibilidades añadiendo comandos ad-hoc a los ya existentes. En nuestro blog de CyberHades puedes encontrar un pequeño tutorial sobre cómo comenzar a escribirlos.

6+1 Plugins para Kubectl

Hemos seleccionado 6 + 1 plugins (este último no es exactamente un plugin) los cuales nos ofrecen diferentes características de seguridad y control para de esta forma hacer mucho más segura nuestra implementación con Kubernetes. Algunos están centrados por ejemplo en la seguridad de los pods, otros en RABC e incluso veremos uno que nos permitirá “esnifar” todo el tráfico de red generado hacia o desde un pod.

El primero de ellos se llama kubectl-trace. Este plugin nos permite utilizar bpftrace en un clúster Kubernetes. Gracias a bpftrace podemos crear, por ejemplo, tracepoints (puntos de control en la ejecución para gestionar su flujo o incluso parada del mismo) para poder detectar problemas y hacer un análisis en profundidad de la infraestructura (del mismo modo que se utilizan en C y AWK). Estos puntos de control se pueden establecer tanto en nodos como en pods. En este enlace puedes encontrar el manual completo de bpftrace.

Figura 3: Secuencia "tracepoint" del plugin kubectl-trace

El siguiente plugin se complementa perfectamente con kubectl-trace para tareas de debug y se llama precisamente kubctl-debug. Este nos permite ejecutar un contenedor dentro de un pod que se encuentre en ejecución. Comparte el espacio de nombres del procesos (pid), red, usuario e intercomunicación entre procesos (ipc) del contenedor a analizar, con lo que nos permite depurarlos sin tener que instalar nada de antemano. En este enlace puedes ver una demostración de su utilización.

Figura 4: Ejemplo de ejecución del plugin kubectl-debug

Este otro plugin llamado ksniff nos ofrece la posibilidad de analizar todo el tráfico de red de un pod de Kubernetes utilizando tcpdump y WireShark, todo ello con un impacto mínimo en la infraestructura.

Figura 5: Ejecución del plugin ksniff contra un pod del clúster

Ksniff utilizará los datos recopilados por tcpdump asociados a un pod y luego los enviará WireShark para realizar el análisis exhaustivo. Este plugin es imprescindible si estás trabajando con microservicios, ya que es tremendamente útil para identificar errores y problemas entre ellos, así como sus dependencias.

Figura 6: Volcado a WireShark de la inspección realizada con ksniff

A veces, sacar la información de un clúster de Kubernetes requiere de la utilización de varios comandos los cuales, a su vez, nos devuelven todo tipo de información. Gracias a este plugin llamado kubectl-dig, es posible instalar una UI (User Interface) más amigable para ver de una forma más sencilla toda la información relativa al clúster de Kubernetes.

Figura 7: Interfaz de Kubctl-dig

Sólo tenemos que pasar como parámetro el nombre del nodo y de esta forma obtendremos todo tipo de información detallada y formateada sobre el mismo.
NOTA: Los siguientes tres plugins de los que vamos a hablar a continuación, hemos querido probarlos nosotros mismos. Así que para ello, hemos utilizado la misma infraestructura que ya montamos en su día para nuestro artículo sobre la gestión de la autorización de recursos con RBAC.
El control de accesos a todos los elementos de un clúster Kubernetes es una de las principales tareas dentro de la securización del mismo. Desde kubectl es posible obtener esta información de un recurso, pero no es posible conseguir una vista general. Esto es precisamente de lo que se encarga rakkess, el cual nos permite obtener una lista completa en forma de matriz de la situación actual de los derechos de acceso entre los usuarios y todos los recursos del servidor. En el siguiente vídeo puedes ver una demostración de su funcionamiento:


Figura 8: Demo de kubectl-rakness

El plugin que viene a continuación llamado kubectl-who-can viene perfectamente complementado con el anterior. En este caso será posible mostrar quién tiene permisos RBAC para realizar cualquier tipo de acción en los diferentes recursos Kubernetes que tengamos instalados. En la salida de la ejecución de este plugin podremos ver un listado completo con información como el tipo de cuenta, recurso, etc. El siguiente vídeo muestra cómo funciona:


Figura 9: Demo de kubectl-who-can

Hemos dejado kubectl-auth-can-I para el final. Exactamente no es un plugin de kubectl sino un subcomando que es parte de dicha utilidad. Este nos permite identificar si un usuario puede ejecutar ciertas acciones sobre ciertos recursos. Las acciones vienen dadas por los verbos definidos en Kubernetes (list, create, get, watch, delete, etc) y los recursos podrían ser: pod, namespace, secret, configMap, logs, etc.


Figura 10: Demo de kubectl-auth-can-I

Además, no sólo podemos preguntar por las acciones que podemos ejecutar, sino también por las acciones que otros usuarios o cuentas de servicio pueden ejecutar. Nos parece muy interesante y también lo hemos querido probar. En el vídeo anterior puedes ver los resultados de la prueba que hemos realizado.

Un hasta pronto

Seguiremos echando un vistazo a los diferentes plugins que existan y que nos puedan servir de ayuda, tanto para securizar nuestro clúster Kubernetes como para ofrecer el mejor rendimiento posible a nuestra infraestructura.

Happy Hacking Hackers!

Autores:

Fran Ramírez, (@cyberhadesblog) es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps" y del blog Cyberhades.Para consultas y mensajes puedes utilizar el Buzón Público para contactar con Fran Ramírez

Rafael Troncoso (@tuxotron) es Senior Software Engineer en SAP Concur, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps" y del blog Cyberhades. Para consultas y mensajes puedes utilizar el Buzón Público para contactar con Rafael Troncoso

2 comentarios:

  1. ¡Madre mía¡, con todo lo que sale nuevo para Kubernetes vamos a necesitar 7 vidas como los gatos para aprenderlo todo https://www.ibm.com/cloud/blog/new-builders/istio-and-knative-extending-kubernetes-for-a-new-developer-experience

    ResponderEliminar
  2. Si una persona un dia cualquiera , te pidiera el favor de que la ayudaras a crecer tanto a nivel personal como profesional , que te pidiera que fueras su maestro e instructor y que estaría dispuesto a sacrificarlo todo? cual seria el consejo y la respuesta que obtendría esta persona?

    ResponderEliminar