Daniel Carrasco

Daniel Carrasco

Sysadmin & Devops Engineer
Related topics: Cloud GKE Google Cloud Kubertnetes

Pods CIDR: pods por nodo y su relación

21 julio 2022
2 minutos

¿Conoces la relación entre el CIDR de la red de Pods, la opción de pods por nodo en GKE y cómo puede causar varios problemas en el futuro? Pues si no lo sabes, quédate en este artículo para descubrirlo.

Antes de empezar a crear un cluster de GKE, debemos planificar la configuración con tiempo y esfuerzo para evitar problemas en el futuro. El problema relacionado con el tema del que voy a hablar, puede llevar a tener que recrear todo el cluster, lo cual es una tarea muy tediosa y puede causar muchos problemas (incluyendo tiempos de inactividad).

Para entender mejor el problema, lo primero que tenemos que saber es cómo funciona el cluster de Kubernetes en términos de red. Me limitaré a la información relacionada con el tema para mantenerlo simple y condensado.

 

Rango de direcciones del cluster pod

El rango de direcciones del cluster pod es el CIDR reservado para todos los pods del cluster. Todas las IP de los pods estarán ubicadas en este rango, por lo que se puede utilizar para todo lo relacionado con la red, como por ejemplo limitar el acceso en un firewall.

Máximo de pods por nodo

Este número limitará el número de pods en cada nodo del cluster, pero también limitará indirectamente el número de nodos que se pueden crear en el cluster.

Relación entre el rango de direcciones de los pods y los pods por nodo

El número de pods por nodo definirá la configuración de red utilizada en los nodos, y esto puede hacer que el rango de direcciones de los pods se llene, evitando la creación de nuevos nodos. Esto sucede porque Kubernetes reserva una subred para cada nodo para ayudar a enrutar los paquetes de red entre los nodos. Con la dirección IP del pod de destino se conoce el CIDRy el nodo donde se encuentra, evitando complejas tareas de enrutamiento.

La siguiente tabla muestra la relación entre el número de pods por nodo y las direcciones IP reservadas:

Más información en 👉 https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr

Como podemos ver, cada pod reservará al menos dos direcciones IP, por lo que el CIDR requerido estará relacionado con su número.

Por ejemplo: Tenemos un cluster con un rango de direcciones de pods de cluster de 10.0.0.0/24 (256 direcciones IP). Si configuramos el Máximo de Pods por Nodo a 20 obtendremos una reserva de 40 IP por nodo. Como no es posible un CIDR con espacio para 40 direcciones, se utilizará el CIDR más cercano con suficientes direcciones. En este caso el CIDR más cercano es el /36 con 64 direcciones por subred.

Teniendo en cuenta lo anterior, el cluster estará limitado a 4 nodos (256 / 64 = 4):

 

Me he equivocado en la configuración, ¿qué puedo hacer?

Si tus rangos CIDR pueden ser extendidos entonces estás de suerte, para añadir más rangos siguiendo esta guía 

Si esto no consigue que funcione, o necesitas un CIDR continuo, entonces la única forma de proceder será recrear el cluster completo (lo cual no siempre es posible).
Es por eso, que calcular el cluster antes de crearlo es lo mejor que puedes hacer.