Redes en Kubernetes

Para entender las redes en Kubernetes empezaremos viendo un clúster de Kubernetes de un solo nodo. El nodo tiene una dirección IP, digamos que es 192.168.1.2. Esta es la dirección IP que usamos para acceder al nodo Kubernetes con ssh, etc. Recuerde que si está utilizando una configuración de miniKube, esa es la dirección IP de la máquina virtual de miniKube dentro de su Hipervisor. El ordenador donde se ejecuta tendrá una dirección IP diferente, algo como 192.168.1.10. Por lo tanto, es importante comprender cómo están configuradas las máquinas virtuales.

Redes en Kubernetes un solo nodoEn el clúster de kubernets de un solo nodo, hemos creado un solo POD. El POD aloja un contenedor. A diferencia del mundo Docker, donde siempre se asigna una dirección IP a un contenedor, en el mundo de los Kubernetes la dirección IP se asigna a un POD, por lo que cada POD en Kubernetes obtiene su propia dirección IP interna.

Cuando Kubernetes se configura inicialmente, se crea una red privada interna con una dirección, por ejemplo 10.244.0.0 y todos los PODs están unidos a ella. Cuando implementa varios PODs, todos obtienen una IP separada asignada desde esta red. Los PODs pueden comunicarse entre sí a través de estas IP, pero el acceso al otro POD usando esta dirección IP interna puede no ser una buena idea, ya que está sujeto a cambios cuando se recrean los PODs. Es fácil y simple de entender cuando se trata de redes en un solo nodo.

Varios nodos

Si tenemos dos nodos ejecutando Kubernetes y tienen direcciones IP 192.168.1.2 y 192.168.1.3 asignados a ellos. Hay que tener en cuenta que no son parte del clúster todavía, pero cada uno de ellos tiene un solo POD desplegado. Estos PODs están conectados a una red interna y tienen sus propias direcciones IP asignadas. Si se observan las direcciones de red internas, puede ver que sean las mismas, por ejemplo 10.244.0.0 y los módulos desplegados también tienen la misma dirección. Esto no funcionará bien con los nodos que forman parte del mismo clúster, ya que los PODs tienen las mismas direcciones IP asignadas y eso generará conflictos de IP en la red. Ahora bien, ese es un problema para cuando el clúster de Kubernetes esté configurado.

Redes en Kubernetes varios nodosKubernetes no configura automáticamente ningún tipo de red para manejar estos problemas. De hecho, Kubernetes espera que establezcamos redes para cumplir con ciertos requisitos fundamentales. Los principales son que todos los contenedores/PODs en un clúster de Kubernetes deben poder comunicarse entre sí sin tener que configurar NAT. Otro requisito es que todos los nodos deben poder comunicarse con los contenedores y viceversa sin usar NAT. Kubernetes espera que configuremos una solución de red que cumpla con estos criterios.

Soluciones ya implementadas

Afortunadamente, no tenemos que configurarlo por nuestra cuenta, ya que hay múltiples soluciones preconstruidas disponibles. Algunos de ellos son las redes Cisco SCI, Cilium, Flannel, WMWare NSX T y Kaliko. Dependiendo de la plataforma en la que se esté implementando el clúster de Kubernetes, puede usar una de esas soluciones.

Redes en Kubernetes solucionCon la configuración de red personalizada, ya sea de Flannel o Kaliko, ahora se pueden administrar las redes e IPSs en los nodos y asignar una dirección de red diferente para cada red en el nodo. Esto crea una red virtual de todos los PODs y nodos donde a todos se les asigna una dirección IP única y mediante el enrutamiento simple la red de clúster permite la comunicación entre los diferentes PODs o nodos para cumplir con los requisitos de red de Kubernetes. Por lo tanto, todos los PODs ahora pueden comunicarse entre sí utilizando la dirección IP asignada.

Para ver la información de las IPs asignadas se puede usar el comando “kubectl get pods -o wide”.

Más información: https://kubernetes.io/docs/concepts/cluster-administration/networking/