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

  1. 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.
  2. 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.
  3. 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 y Egress).
    • 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

  1. 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.
  2. 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 etiqueta role: backend.
  • ingress: Permite el tráfico de entrada solo desde Pods con la etiqueta app: 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

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

Módulo 8: Seguridad en Kubernetes

Módulo 9: Escalado y Rendimiento

Módulo 10: Ecosistema y Herramientas de Kubernetes

Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real

Módulo 12: Preparación para la Certificación de Kubernetes

© Copyright 2024. Todos los derechos reservados