La seguridad de red en Kubernetes es un aspecto crucial para proteger las aplicaciones y los datos que se ejecutan en un clúster. Este tema abarca las prácticas y herramientas necesarias para asegurar la comunicación dentro del clúster y con el mundo exterior.
Conceptos Clave
- Políticas de Red (Network Policies): Son reglas que definen cómo los Pods pueden comunicarse entre sí y con otros servicios. Las políticas de red permiten controlar el tráfico de entrada y salida a nivel de Pod.
- CNI (Container Network Interface): Es una especificación y conjunto de bibliotecas para configurar interfaces de red en contenedores. Kubernetes utiliza plugins CNI para gestionar la red del clúster.
- Seguridad de la Capa de Transporte (TLS): Protocolo que proporciona privacidad e integridad de los datos entre dos aplicaciones que se comunican.
Políticas de Red
Las políticas de red en Kubernetes permiten definir reglas de tráfico para los Pods. Estas políticas se aplican a nivel de namespace y pueden controlar tanto el tráfico de entrada (ingress) como el de salida (egress).
Ejemplo de Política de Red
A continuación, se muestra un ejemplo de una política de red que permite el tráfico de entrada solo desde Pods en el mismo namespace y bloquea todo el tráfico de salida.
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-same-namespace namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - podSelector: {} egress: - to: - podSelector: {}
Explicación del Código
apiVersion: networking.k8s.io/v1
: Especifica la versión de la API de Kubernetes.kind: NetworkPolicy
: Define el tipo de recurso como una política de red.metadata
: Contiene información sobre la política, como su nombre y namespace.spec
: Define las reglas de la política.podSelector
: Selecciona los Pods a los que se aplicará la política.policyTypes
: Especifica los tipos de tráfico que la política controla (Ingress
yEgress
).ingress
: Define las reglas de tráfico de entrada.egress
: Define las reglas de tráfico de salida.
TLS en Kubernetes
El uso de TLS es fundamental para asegurar la comunicación entre los componentes del clúster y con servicios externos. Kubernetes facilita la configuración de TLS mediante la integración con herramientas como Cert-Manager.
Configuración de TLS con Cert-Manager
Cert-Manager es una herramienta que automatiza la gestión de certificados TLS en Kubernetes. A continuación, se muestra cómo instalar y configurar Cert-Manager.
Instalación de Cert-Manager
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
Creación de un Issuer
Un Issuer es un recurso que describe cómo obtener certificados. Aquí se muestra un ejemplo de Issuer que utiliza Let's Encrypt.
apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: letsencrypt-prod namespace: default spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: [email protected] privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: nginx
Creación de un Certificado
Una vez que el Issuer está configurado, se puede crear un recurso de Certificado.
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: example-com namespace: default spec: secretName: example-com-tls issuerRef: name: letsencrypt-prod commonName: example.com dnsNames: - example.com - www.example.com
Explicación del Código
apiVersion: cert-manager.io/v1
: Especifica la versión de la API de Cert-Manager.kind: Issuer
: Define el tipo de recurso como un Issuer.metadata
: Contiene información sobre el Issuer, como su nombre y namespace.spec
: Define las configuraciones del Issuer.acme
: Configura el Issuer para usar ACME (Automated Certificate Management Environment).server
: URL del servidor ACME.email
: Correo electrónico para notificaciones.privateKeySecretRef
: Referencia al secreto que contiene la clave privada.solvers
: Define los métodos para resolver desafíos ACME.
Ejercicio Práctico
Ejercicio: Crear una Política de Red
- Objetivo: Crear una política de red que permita el tráfico de entrada solo desde Pods con la etiqueta
app: frontend
y bloquee todo el tráfico de salida. - Pasos:
- Crear un archivo YAML con la política de red.
- Aplicar la política de red al clúster.
Solución
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-frontend namespace: default spec: podSelector: matchLabels: role: backend policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: app: frontend egress: []
Explicación del Código
podSelector
: Selecciona los Pods con la etiquetarole: backend
.ingress
: Permite el tráfico de entrada solo desde Pods con la etiquetaapp: frontend
.egress
: Bloquea todo el tráfico de salida.
Conclusión
La seguridad de red en Kubernetes es esencial para proteger las aplicaciones y datos. Las políticas de red permiten controlar el tráfico entre Pods y servicios, mientras que TLS asegura la comunicación. Herramientas como Cert-Manager facilitan la gestión de certificados TLS. Con estos conocimientos, puedes asegurar la red de tu clúster de Kubernetes de manera efectiva.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster