Cuando hablamos de mover cargas a la nube, Kubernetes es posiblemente el orquestador más común para hacerlo. Es tan popular debido a su naturaleza declarativa, la cual permite abstraer los detalles de la infraestructura y permite a los desarrolladores especificar las cargas de trabajo que desean ejecutar y los resultados deseados, por lo que no necesitan tener que gestionar la infraestructura.

Pero es su propio diseño, que invita a “olvidarse” de la infraestructura y el uso que se hace de ella, lo que nos lleva a poder decir, que Kubernetes no es seguro por naturaleza.

Esto es algo que no preocupa de inicio, cuando haces pruebas de concepto o estás en entornos no críticos o no productivos. Sin embargo, cuando se llevan cargas a entornos productivos del tipo que sea, aprovechando las ventajas de Kubernetes, se deben tener planes detallados de seguridad, de solución de problemas y de observabilidad para mover de manera segura y eficiente las aplicaciones a este tipo de entornos y así poder obtener todos los beneficios de Kubernetes (con los menores dolores de cabeza posibles).

Para evitar estos problemas, resumimos, en una serie de puntos, aquellas áreas donde hay que poner el foco, y vamos a ver cómo mitigar posibles quebraderos de cabeza o incluso adelantarnos a ellos.

El objetivo de este post es el de poder conformar una checklist que revisar cuando vayamos a usar Kubernetes y poder hacerlo por lo tanto de manera totalmente confiable.

Definir una política de seguridad y observabilidad

Cuando hablamos de mover cargas a un entorno productivo, utilizando Kubernetes, hay diferentes aspectos a considerar dentro del ámbito de la seguridad y la observabilidad. Se pueden agrupar en tres grandes bloques:

1. Tiempo de construcción de nuestras aplicaciones, donde hay que poner foco en lo construido, dependencias de código o librerías.

2. Tiempo de despliegue, momento en el cual hay que centrarse en la propia securización del cluster, servicios que vamos a exponer, firewalls o definición de perímetros de seguridad

3. Tiempo de ejecución, que será cuando las aplicaciones utilizarán la infraestructura y la red del cluster de Kubernetes. Aquí tenemos que tener en cuenta las prácticas recomendadas de seguridad cuando se instala un clúster de Kubernetes.

En la siguiente tabla podemos observar todo de forma más resumida:

Build Deploy Runtime
Escaneo de imágenes Hardening del cluster Políticas de red
Securización de pipelines CI/CD Definición de perímetros de seguridad Auditoría y compliance
Administración de secretos y variables de entorno Firewall Detección de amenazas
Securización de sistema operativo usado Definición y configuración de servicios expuestos

A continuación, os contamos unos consejos para cubrir estos bloques.

Hacer más segura tu infraestructura

Para lograr que la infraestructura donde correrán nuestros servicios sea segura, centraremos el “hardening” (asegurarnos de que todo es seguro y estable) en tres puntos bien diferenciados.

1. Host, donde nos centraremos en el sistema operativo escogido, evitando principalmente procesos no necesarios y configuraciones no deseadas.

2. Cluster, aquí hay que poner atención a las diferentes posibles configuraciones y políticas de seguridad que conforman el plano de control, a la configuración de certificados, rotación de credenciales y almacenamiento del propio Kubernetes.

3. Redes, donde tendremos que trabajar en hacer más seguro el perímetro de nuestro cluster y controlar la comunicación desde dentro y fuera.

Despliegues más seguros

A la hora de hacer los despliegues, hay que crear pipelines de CI/CD o modificar los existentes para que nos permitan poner foco en que lo que se despliega cumple ciertos parámetros de seguridad.

Para ello, nuestro flujo debe examinar las imágenes de los contenedores que se van a desplegar, crear un informe que en el caso de que se detecten amenazas, se auditará de forma manual y se decidirá si aceptar o no el despliegue.

Para lograr esto, de nuevo, no reinventemos la rueda, sino que podemos apoyarnos en cualquiera de las diferentes soluciones de mercado de análisis de imágenes que hay y que se integren con nuestro actual pipeline.

Tener todo bajo control en tiempo de ejecución

Y después del despliegue, ¿ya podemos relajarnos o podemos prestar atención a algo más? Pues hay algunos puntos que deberíamos revisar.

PSPs, Kubernetes trae una forma segura de gestionar los pods y contenedores utilizando lo que llama Pod Security Policies. Es recomendable valorar si debemos utilizarlas o no.

Estas políticas definen y acotan acciones a nivel de seguridad y contexto dentro del cluster de Kubernetes.

Aunque no es el objetivo del post, de forma resumida, diremos que estas políticas se definen en 3 simples pasos:

Una vez activadas las PSPs en Kubernetes, se abre la posibilidad de crear estas políticas que nos permiten de una forma mucho más detallada aplicar reglas de seguridad extra. ¡OJO!, asegúrate antes de que tu distribución de Kubernetes soporta PSPs.

Observabilidad y seguridad

Siguiendo esta checklist, podemos poner ya a funcionar nuestros servicios en producción, de manera mucho más segura y confiable, y ahora sólo nos queda monitorizar nuestro sistema, aplicando conceptos de observabilidad.

Apóyate en las capacidades nativas de Kubernetes para la recopilación y explotación de métricas con el objetivo de conocer el estado de salud de tus pods y, en general, de tu cluster.

Utiliza estas métricas para poder crear alarmas que de forma proactiva nos avisen de errores o incluso nos permitan adelantarnos a posibles problemas.

De nuevo, insisto, aprovecha la capacidad de los servicios gestionados que algunas nubes ofrecen, como GKE de Google Cloud, para poder ver de forma sencilla lo que ocurre en nuestro cluster gracias a las herramientas que ya ofrecen.

Conclusiones

Kubernetes es el motor de orquestación más adoptado para implementar aplicaciones modernas y se utiliza tanto en la nube pública como en CPDs privados. Debido a esto, aprovecha que hay ya soluciones muy maduras para hacer uso de Kubernetes como servicio gestionado como solución.

Es declarativo por naturaleza y por lo tanto nos permite especificar los resultados que esperamos obtener una vez desplegados nuestros servicios (por ejemplo, el escalado, seguridad, acceso, etc.).

Además, monitoriza de forma continua el estado del cluster, lo que facilita la implementación y toma de medidas correctivas que nos garanticen que todo está funcionando según lo especificado.

Kubernetes nos abstrae los detalles de la red, las direcciones IP, etc., pero eso no quiere decir que no tengamos que prestar atención en la configuración de todos estos aspectos, sobre todo cuando vamos a entornos productivos.

Por estas características, a la hora de implementar observabilidad y seguridad para Kubernetes, se necesita un enfoque diferente.

Y para finalizar una píldora extra (roja en este caso)

Un enlace con un montón de artículos basados en experiencias reales fallidas del uso de Kubernetes. Son de estas experiencias de lo que más se aprende y, sin duda, nos da una visión de que utilizar Kubernetes no debería tomarse a la ligera.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.