Actualización de AWS EKS y uso de VPC CNI add-on: desafíos y soluciones

Recientemente, nos enfrentamos a un reto técnico interesante: la actualización a AWS EKS 1.29 y el uso del VPC CNI add-on presentaron ciertos problemas en nuestros clusters. 

Este desafío se hizo evidente cuando uno de nuestros clientes experimentó problemas con la asignación de IPs a cada Pod tras una actualización de los nodos del cluster EKS.

 

¿Qué son AWS EKS y VPC CNI add-on?

 

AWS EKS (Amazon Web Services Elastic Kubernetes Service) es un servicio gestionado que facilita la implementación de aplicaciones en contenedores de forma segura y escalable. 

Por otro lado, el VPC CNI add-on (Amazon VPC CNI plugin for Kubernetes) es un complemento que permite a cada Pod de Kubernetes recibir una IP de la VPC de AWS, lo que facilita una integración directa con los servicios de AWS.

 

Problemas con AWS EKS y el VPC CNI add-on

 

Uno de los problemas más comunes que pueden surgir al usar AWS EKS con el VPC CNI add-on es la falla en la asignación de IPs a los Pods. Este fue precisamente el problema que encontramos. 

El error específico que se produjo fue el siguiente:

 

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox «e200bf63d6a6d0856d6a037e46021370bd0419e131e432a9c8e49286426c165e»: plugin type=»aws-cni» name=»aws-cni» failed (add): add cmd: failed to assign an IP address to container

 

Solución

 

La solución a este problema implica ajustar la configuración del VPC CNI add-on. Para hacer esto, es necesario añadir una nueva política al rol que tiene el EKS adjunto. 

Esta política permite al VPC CNI add-on realizar ciertas acciones en EC2 que son necesarias para la asignación de IPs a los Pods:


JSON

{

    «Version»: «2012-10-17»,

    «Statement»: [

        {

            «Sid»: «AmazonEKSCNIPolicy»,

            «Effect»: «Allow»,

            «Action»: [

                «ec2:AssignPrivateIpAddresses»,

                «ec2:AttachNetworkInterface»,

                «ec2:CreateNetworkInterface»,

                «ec2:DeleteNetworkInterface»,

                «ec2:DescribeInstances»,

                «ec2:DescribeTags»,

                «ec2:DescribeNetworkInterfaces»,

                «ec2:DescribeInstanceTypes»,

                «ec2:DescribeSubnets»,

                «ec2:DetachNetworkInterface»,

                «ec2:ModifyNetworkInterfaceAttribute»,

                «ec2:UnassignPrivateIpAddresses»

            ],

            «Resource»: «*»

        },

        {

            «Sid»: «AmazonEKSCNIPolicyENITag»,

            «Effect»: «Allow»,

            «Action»: [

                «ec2:CreateTags»

            ],

            «Resource»: [

                «arn:aws:ec2:*:*:network-interface/*»

            ]

        }

    ]

}

 

Al aplicarla, es crucial tener en cuenta que la asignación de IPs al Pod puede fallar si no hay suficientes bloques /28 de IPs libres consecutivos disponibles en la subred (16 IPs consecutivas). 

En nuestro caso, al tener una subnet /20 y tener muchas direcciones IPs en uso, esto no era posible, por lo que nuestra solución final fue crear el nodegroup en una nueva subred más grande y nueva, en las que tenía más probabilidades de tener un bloque /28 de IPs libres consecutivos.

 

Validación

 

Para validar que la solución ha funcionado correctamente, simplemente tenemos que ver cómo los diferentes Pods se crean se les asigna IPs correctamente.

 

Esperamos que esta guía te haya sido útil para entender y solucionar los problemas relacionados con el uso de AWS EKS y el VPC CNI add-on. 

Si tienes alguna pregunta o necesitas más detalles, no dudes en contactar con nosotros o dejar un comentario.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *