Marcio Cunha

Construcción de Sistemas Multi-Tenant Aislados con Namespaces y Políticas de Red Restrictivas en Entornos Kubernetes

Aprenda a aislar cargas de trabajo en Kubernetes utilizando namespaces lógicos y reglas restrictivas de tráfico de red para garantizar la seguridad en entornos compartidos.

Marcio Cunha•4 min
También disponible en:EnglishPortuguês
Resumen
  • Los namespaces ofrecen una división lógica de los recursos informáticos, pero por sí solos no garantizan barreras de seguridad impenetrables.
  • Las NetworkPolicies actúan como cortafuegos internos, bloqueando el tráfico lateral no autorizado entre diferentes cargas de trabajo.
  • La estrategia de denegación predeterminada combinada con permisos explícitos reduce drásticamente la superficie de ataque en clústeres compartidos.
  • El uso correcto de ResourceQuotas evita que un solo inquilino agote la memoria y el procesamiento de todo el clúster.
  • Las auditorías regulares de tráfico aseguran que las reglas de aislamiento sigan siendo efectivas durante las actualizaciones de infraestructura.

El Desafío de Compartir Infraestructura de Forma Segura

Gestionar múltiples proyectos o clientes en una única infraestructura de servidores suele ser el equivalente digital de dividir un apartamento grande entre varias personas. En lugar de comprar una propiedad separada para cada uno, lo cual costaría una fortuna, se construyen divisiones. En el mundo tecnológico, esta práctica se conoce como arquitectura multi-tenant, donde diferentes equipos o clientes utilizan el mismo conjunto de computadoras centralizadas manteniendo sus datos separados.

El gran riesgo de este modelo es que, si la puerta de una de las habitaciones se queda sin llave, cualquier persona puede transitar libremente por las demás áreas. En Kubernetes, que es el sistema de orquestación de contenedores estándar de la industria para gestionar aplicaciones empaquetadas, el desafío es muy similar. Sin barreras rígidas, una aplicación comprometida en un proyecto puede servir como puente para infiltrarse en sistemas vecinos, provocando fugas de datos o interrupciones críticas del servicio.

Aislamiento Lógico a Través de Namespaces

El primer nivel de defensa dentro de Kubernetes se llama namespace, que funciona como una carpeta lógica o un compartimento aislado dentro del mismo clúster. En la práctica, imagine un edificio comercial donde cada empresa ocupa un piso diferente; la dirección del edificio es la misma, pero el espacio interior está completamente delimitado. Objetos como bases de datos, servidores web y colas de mensajes creados dentro de un namespace permanecen invisibles para otros espacios por defecto.

Sin embargo, es fundamental comprender que los namespaces solo separan los nombres y la organización visual de los recursos, pero no crean una muralla de seguridad impenetrable por sí mismos. Los pods, que son las unidades de ejecución más pequeñas que contienen una o más aplicaciones, siguen ejecutándose en el mismo núcleo del sistema operativo subyacente. Esto significa que si un atacante logra obtener privilegios elevados de ejecución, aún podrá ver lo que sucede fuera de su propio compartimento lógico.

Restricción de Tráfico Lateral con NetworkPolicies

Para transformar el aislamiento lógico en una barrera real de seguridad, se recurre a las NetworkPolicies, que actúan como policías de tráfico digitales controlando quién puede hablar con quién. Por defecto, Kubernetes opera en un modelo abierto donde cualquier contenedor puede comunicarse con cualquier otro contenedor en cualquier lugar del clúster. Cuando aplicamos políticas restrictivas, cambiamos esta regla a un modelo de denegación predeterminada, donde todo el tráfico está prohibido excepto el que se autoriza explícitamente.

En la práctica, creamos reglas declarativas que indican que el microservicio de pagos solo puede aceptar conexiones procedentes del portal de compras, bloqueando cualquier intento de acceso desde namespaces experimentales o externos. Este enfoque previene el llamado movimiento lateral, una técnica muy utilizada por ciberdelincuentes que, tras vulnerar un punto de entrada frágil, intentan saltar hacia sistemas internos más valiosos y protegidos.

Implementación de Reglas de Tráfico en la Práctica

La configuración de una política de red restrictiva se realiza mediante archivos YAML aplicados directamente en el clúster. A continuación, se muestra un ejemplo práctico de una política que aísla completamente un namespace, bloqueando todo el tráfico entrante excepto el originado dentro del propio espacio de nombres.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
  namespace: produccion
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector: {}

Este pequeño fragmento de código actúa como un portero extremadamente riguroso en la entrada del edificio. La directiva podSelector vacía combinada con la ausencia de permisos externos significa que solo los residentes de esa misma planta pueden comunicarse entre sí, manteniendo a los intrusos de otros pisos estrictamente fuera.

Control del Consumo de Recursos con Cuotas

Además de proteger el tráfico de red, un entorno multi-tenant maduro debe garantizar que un inquilino ruidoso no perjudique a sus vecinos. En términos computacionales, esto significa evitar que una aplicación defectuosa consuma toda la memoria RAM y el procesamiento de la máquina física compartida. Para resolver este problema, utilizamos los objetos ResourceQuotas y LimitRanges.

Estas herramientas establecen límites estrictos de consumo para cada namespace. Si un cliente contrata un plano básico, podemos limitar su espacio a un máximo de cuatro núcleos de procesamiento y ocho gigabytes de memoria. Si el sistema de ese cliente intenta superar el límite, Kubernetes bloquea la creación de nuevos pods, garantizando la estabilidad y la armonía de todo el ecosistema digital.

Consideraciones Finales sobre Arquitecturas Compartidas

Construir entornos multi-tenant seguros en Kubernetes exige un cambio de mentalidad que va mucho más allá de la simple instalación de herramientas. El éxito de esta arquitectura depende de la combinación rigurosa entre namespaces organizacionales, políticas de red restrictivas y límites claros de consumo de hardware. Al adoptar una postura de denegación predeterminada y validar continuamente el tráfico interno, los equipos de ingeniería consiguen extraer la máxima eficiencia de costes en la nube sin sacrificar la seguridad ni la previsibilidad operativa.