Interacciones de la Red en un Clúster Base de Kubernetes. Bloque 3. Tema 3.1 del CKA.

 


En una instalación estándar de Kubernetes, todos los pods y nodos de la red pueden comunicarse directamente entre sí. Esto es esencial para que las aplicaciones que se ejecutan en diferentes pods puedan interactuar sin problemas. Sin embargo, para controlar esta comunicación, Kubernetes ofrece Network Policies, que permiten definir reglas sobre qué pods pueden enviar y recibir tráfico, mejorando así la seguridad de las aplicaciones.

Network Policies: Controlando la Comunicación

Las Network Policies son recursos que te permiten definir reglas de acceso entre los pods. Por defecto, todos los pods pueden comunicarse entre sí, lo cual puede no ser ideal desde un punto de vista de seguridad. Las Network Policies permiten restringir tanto el tráfico de entrada (ingress) como de salida (egress), usando etiquetas, namespaces y direcciones IP. Esto es clave para asegurar que solo los pods que deben comunicarse lo hagan.

Servicios y Networking en Kubernetes

En Kubernetes, los servicios actúan como un punto de contacto para acceder a un grupo de pods. Existen varios tipos de servicios, cada uno con un propósito específico:

  1. ClusterIP: Es el servicio predeterminado en Kubernetes. Crea una IP interna accesible solo dentro del clúster, lo cual es útil para que los pods se comuniquen entre sí de manera interna.

  2. NodePort: Expone un servicio en un puerto específico de cada nodo, permitiendo el acceso desde fuera del clúster a través de la IP de cualquier nodo y el puerto asignado. Es ideal para entornos de desarrollo.

  3. LoadBalancer: Utilizado principalmente en entornos de nube (como AWS o GCP), crea un balanceador de carga externo que distribuye el tráfico entrante entre los pods del clúster. Es útil para exponer aplicaciones a gran escala.

  4. ExternalName: Mapea un nombre interno a un nombre DNS externo. Esto es útil cuando deseas redirigir el tráfico a servicios que no están dentro del clúster.

Controladores de Ingress y Recursos Ingress

El Ingress es un recurso que te permite gestionar el acceso a los servicios dentro del clúster mediante reglas de enrutamiento. Esto simplifica la exposición de aplicaciones web al exterior, permitiendo el uso de un único punto de entrada para gestionar el tráfico HTTP y HTTPS.

  • Controlador de Ingress: Es necesario para que Kubernetes pueda interpretar los recursos de tipo Ingress. Algunos de los controladores más comunes son NGINX Ingress Controller y Traefik, que permiten definir reglas de cómo el tráfico debe ser dirigido a los servicios internos.

CoreDNS: Resolución de Nombres

CoreDNS es el servidor DNS de Kubernetes, encargado de resolver los nombres de los servicios y pods dentro del clúster. Esto permite que los pods puedan encontrarse entre sí usando nombres en lugar de IPs, lo que facilita la escalabilidad y la flexibilidad en la configuración.

  • Configuración y Personalización: Puedes personalizar CoreDNS para añadir zonas DNS adicionales, ajustar el tiempo de cacheo y definir redirecciones, adaptando su comportamiento a las necesidades específicas del clúster.

Elección de un Plugin CNI

La elección del plugin de red CNI es importante para asegurar que la red del clúster funcione de acuerdo a las necesidades del entorno. Algunos plugins populares son:

  • Calico: Ideal para entornos donde la seguridad es prioritaria, ya que permite definir políticas de red avanzadas.
  • Flannel: Fácil de configurar y perfecto para entornos de desarrollo donde la simplicidad es clave.
  • Weave Net: Ofrece flexibilidad y es fácil de usar, siendo útil para despliegues híbridos y clústeres de mayor escala.

Consideraciones y Mejores Prácticas

  • Redundancia y Alta Disponibilidad: Es fundamental tener varios nodos en el clúster para mantener la disponibilidad en caso de que uno falle. Las políticas de red adecuadas aseguran que se mantenga la seguridad sin comprometer la disponibilidad.
  • Monitorización de la Red: Herramientas como Prometheus y Grafana son útiles para monitorear el tráfico de red, identificar problemas y asegurar que los servicios estén funcionando correctamente.
  • Pruebas de Conectividad: Siempre prueba las políticas de red después de aplicarlas usando comandos como kubectl exec y curl para asegurarte de que el acceso está configurado como esperas.

Ejemplos Prácticos

Ejemplo de Servicio ClusterIP

Este manifiesto define un servicio ClusterIP que expone un grupo de pods de la aplicación my-app internamente en el clúster:

apiVersion: v1 kind: Service metadata: name: my-app-service namespace: default spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080

Explicación: Este servicio es accesible solo dentro del clúster, redirigiendo el tráfico que recibe en el puerto 80 al puerto 8080 de los pods.


Ejemplo de Servicio NodePort

Este manifiesto expone un servicio en un puerto específico accesible desde fuera del clúster:

apiVersion: v1 kind: Service metadata: name: my-app-nodeport-service spec: type: NodePort selector: app: my-app ports: - port: 80 targetPort: 8080 nodePort: 30007

Explicación: Permite acceder al servicio a través del puerto 30007 en la IP de cualquier nodo del clúster, redirigiendo el tráfico al puerto 8080 de los pods.


Ejemplo de Recurso Ingress

Un manifiesto para exponer un servicio HTTP:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-app-ingress spec: rules: - host: myapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: my-app-service port: number: 80

Explicación: Este Ingress expone el servicio my-app-service a través de la URL http://myapp.example.com, permitiendo que las solicitudes se dirijan a los pods correspondientes.


Conclusión

Entender cómo interactúa la red en Kubernetes es fundamental para asegurar una administración efectiva del clúster. Con el conocimiento de Network Policies, Servicios e Ingress, estarás mejor preparado para configurar y gestionar la red de Kubernetes de forma segura y eficiente. ¡No te pierdas los próximos artículos donde profundizaremos en la configuración avanzada de estas herramientas!

Comentarios