Añadiendo IPs de salida estáticas en Amazon EKS

Introducción

Si parte de nuestro aplicativo es ejecutado en un clúster EKS, ya sea una o varias zonas de disponibilidad, es probable que sea necesario acceder a algún servicio a través de internet que esté protegido por un firewall. En estos casos, la naturaleza dinámica de los nodos del clúster puede complicar el acceso teniendo que mantener constantemente el listado de IPs de los nodos, ya que estas pueden cambiar.

Para solucionar este problema, podemos crear una puerta de salida a internet común para todos los nodos en cada una de las zonas de disponibilidad, de manera que solo tengamos una IP por cada zona del clúster. Resultando en un esquema como el siguiente:

Procedimiento a seguir

1. Crear una subnet privada y pública para cada una de las tres zonas de disponibilidad, en este caso, eu-west-1a, eu-west-1b, eu-west-1c.

2. Actualizar el clúster de EKS, para incluir las 3 subnets privadas como subnets de los nodos.

3. Crear 3 nat gateways, con sus respectivas elastic IPs, para cada subnet pública.

4. Crear 3 tablas de ruta para las subnets privadas, que enruten 0.0.0.0/0 a la nat gateway respectiva de cada subnet privada.

5. Crear un internet gateway.

6. Crear 3 tablas de ruta para las subnets públicas que enrutan el tráfico deseado, en este caso 0.0.0.0/0, al internet gateway creado.

7. Marcar el uso de external SNAT como true mediante kubectl:

kubectl set env daemonset -n kube-system aws-node AWS_VPC_K8S_CNI_EXTERNALSNAT=true

Conclusión

Es cierto que la aplicación de este método puede verse limitado por el número de IPs estáticas disponibles en AWS, que por defecto permite la creación de 5 IPs. Además, será necesario recrear los servicios que reciban tráfico de internet para adaptarlos a la nueva red.

Puedes encontrar más información acerca de la solución propuesta y del SNAT en este enlace de la documentación de amazon.

Si este artículo te ha parecido interesante, te animamos a visitar la categoría Data Engineering para ver más posts como este y a compartirlo en redes con todos tus contactos. No olvides mencionarnos (@DamavisStudio) para conocer tu opinión.
Víctor Prats
Víctor Prats
Artículos: 8