Guías técnicas

Protección de entornos Docker/Kubernetes

Conceptos Docker

El primer concepto que tenemos que manejar es el de “contenedores”, aunque mucha parte de la comunidad de Internet asemeja los contenedores a la virtualización para poder explicarlos, la realidad se asemeja más a un mecanismo de empaquetado lógico. Un contenedor es un aislamiento de un proceso y, este proceso, contiene todas las librerías necesarias para hacer funcionar la aplicación que contiene

La ventaja de los contenedores reside en que para desplegarlos no necesitamos levantar una máquina virtual sino tener una aplicación que nos permita gestionarlos. Esta forma de trabajo nos permite desplegar un contenedor en mucho menos tiempo y consumir muchos menos recursos de la máquina física (o virtual) que los contiene, además, la portabilidad de los contenedores entre nuestra infraestructura on-premise y cloud es muy sencilla

Existen multitud de herramientas que nos permiten trabajar con contenedores pero en la actualidad “docker” se está convirtiendo en un estándar gracias a su facilidad de uso y a que dispone de un repositorio público para poder descargar contenedores ya desarrollados

Una “imagen” es la aplicación en sí misma, como podría serlo la calculadora de Windows, y un contenedor  es la instancia de ese programa. Nosotros podríamos tener ejecutándose a la vez varias “calculadora de Windows” de forma simultánea, la imagen es el propio programa y el contenedor es cada una de esas instancias iguales.

Para instalar Docker en nuestro Linux (a día de hoy todos o la inmensa mayoría de despliegues están montados sobre Linux), simplemente tenemos que instalar la aplicación “docker.io”. Una vez que tenemos la aplicación ya podríamos empezar a desplegar nuestros contenedores

Cabe destacar que también existe una versión de Docker para Windows, en este caso, de forma automática lo que hace Microsoft es levantarnos una máquina virtual Linux sobre hyper-V y allí desplegar los contenedores, por este motivo, aunque es 100% funcional y compatible, sólo debería utilizarse para entornos de prueba, nunca en producción

Conceptos Kubernetes

Si bien hemos visto que con Docker es suficiente para construir nuestros contenedores y pasarlos a producción, se han desarrollado nuevas herramientas que aumentan las capacidades de gestión y orquestación con contenedores. Kubernetes es una de las más populares y se está convirtiendo en un estándar ‘de facto’ dada su fuerte presencia y numerosa comunidad de usuarios y desarrolladores.

Aunque tiene muchas utilidades, a nivel introductorio, vamos a comentar sus conceptos y usos básicos

En primer lugar, Kubernetes (abreviado K8s), realiza una función de monitorización y puede rearrancar contenedores que fallan o detener contenedores que no responden. Un pod se define como la unidad mínima de gestión de K8s, aunque un pod lo normal es que contenga únicamente un container, podríamos decidir que contenga más de uno, de esta forma, todos estos contenedores serían monitorizados, creados y destruidos de forma simultánea al gestionar nuestro pod

A nivel de disponibilidad, K8s se desplegará como un clúster con varios nodos,  en donde existen nodos llamados “worker” donde corren nuestros contenedores y “master” donde se gestiona el propio clúster

En segundo lugar, K8s gestiona la escalabilidad de nuestros contenedores. Cuando nuestra aplicación se ve saturada de peticiones, en un despliegue tradicional, tendríamos que crear una nueva máquina virtual y configurarla en nuestro balanceador. Con K8s, el proceso de escalado es automático y gracias a lo que se denomina “servicio”, podemos balancear y gestionar todas las réplicas (contenedores) de nuestra aplicación especificando que nuestro servicio va a estar compuesto por un número de contenedores (iguales), bajo una única IP y puerto

Necesidad de protección

A día de hoy tanto la tendencia como la mayoría de aplicaciones desarrolladas en cloud son aplicaciones web, por lo tanto, la mayoría de aplicaciones que tenemos, independientemente de la estrategia de desarrollo, son susceptibles de ser atacadas aprovechando cualquier vulnerabilidad http/https, esto incluye a nuestros contenedores

Soluciones Fortinet

Para poder proteger cualquier aplicación Web, Fortinet dispone del producto FortiWeb, este producto es un Firewall de Aplicaciones Web y por lo tanto, aplica para proteger cualquier aplicación web que tengamos en producción

Como estrategias principales, podríamos centrarnos en dos topologías

Protección Norte-Sur

En este caso, podemos desplegar un FortiWeb (físico o virtual) a la entrada de nuestra aplicación web, es decir, entre el usuario y la dirección IP/puerto que publica la aplicación independientemente de la arquitectura

Protección Este-Oeste

Para el caso de K8s, Fortinet también ha desarrollado su producto FortiWeb en formato container, por lo tanto, se puede desplegar, escalar e integrar en cualquier aplicación basada en contenedores

De forma similar a como hacemos la microsegmentación en entornos virtuales, utilizamos NSX para decidir el flujo del tráfico y, de esta forma, hacer pasar el tráfico entre dos máquinas virtuales por nuestro FortiGate VMX. En el caso de K8s, en lugar de utilizar NSX, lo que utilizamos es una herramienta llamada ISTIO, esta herramienta nos permite hacer pasar el tráfico por nuestro FortiWeb Container cuando dos contenedores quieren comunicarse entre sí

Tags

Contenidos relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *