¿Cómo soluciono los problemas con el complemento de CNI de Amazon VPC para Amazon EKS?
Quiero usar el complemento de interfaz de red de contenedores (CNI) de Amazon Virtual Private Cloud (Amazon VPC) en mis clústeres de Amazon Elastic Kubernetes Service (Amazon EKS). Sin embargo, recibo errores.
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Si el nodo de trabajo no está listo porque el complemento de CNI de Amazon VPC no se inicializó, recibirás un mensaje de error similar al del siguiente ejemplo:
«container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized»
Para comprobar este problema, ejecuta el siguiente comando:
kubectl describe node node_name
Nota: Sustituye node_name por el nombre del nodo. Puedes encontrar el mensaje de error cni plugin no initialized en el resultado.
Toma estas medidas para solucionar este problema.
Confirma que has instalado el complemento de CNI de Amazon VPC
Si faltan los pods de aws-node en el clúster, recibirás un mensaje de error similar al siguiente ejemplo en los registros de containerd:
«cni config load failed: no network config found in /etc/cni/net.d: cni plugin not initialized: failed to load cni config»
Para resolver este problema, instala el complemento de CNI de Amazon VCP.
Comprobar si hay problemas con los permisos de IAM
Para utilizar el complemento de CNI de Amazon VPC, utiliza la política administrada AmazonEKS_CNI_Policy de AWS Identity and Access Management (IAM). O bien, si usas una política personalizada, asegúrate de que incluye los siguientes permisos:
"ec2:AssignPrivateIpAddresses", "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes", "ec2:DescribeSubnets", "ec2:DetachNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute", "ec2:UnassignPrivateIpAddresses" "ec2:CreateTags"
Para identificar los permisos de IAM que faltan, comprueba los registros del daemon L-IPAM (IPAMD) en el directorio host /var/log/aws-routed-eni/ipamd.log. Si el complemento de CNI de Amazon VPC no tiene el permiso de IAM obligatorio, recibirás un mensaje de error similar al del siguiente ejemplo:
{"level":"error","ts":"2023-11-18T01:08:34.083Z","caller":"aws-k8s-agent/main.go:28","msg":"Initialization failure: ipamd init: failed to retrieve attached ENIs info: UnauthorizedOperation: You are not authorized to perform this operation. User: arn:aws:sts::XXXXXXXXXXXXXXXXXXXX:assumed-role/rolename is not authorized to perform: ec2:DescribeNetworkInterfaces because no identity-based policy allows the ec2:DescribeNetworkInterfaces action\n\tstatus code: 403, request id: request id"}
El mensaje de error del ejemplo anterior muestra que el complemento requiere el permiso ec2:DescribeNetworkInterfaces.
Si no tienes acceso directo al nodo de trabajo, comprueba los pods de aws-node en el nodo de trabajo. Para identificar el pod aws-node en el nodo de trabajo, ejecuta el siguiente comando:
kubectl describe node node_name
Nota: Sustituye node_name por el nombre del nodo. Consulta la sección Pods no terminados del resultado para ver el nombre del pod aws-node.
A continuación, ejecuta el siguiente comando para ver los detalles del pod aws-node:
kubectl describe pod pod-name -n kube-system
Nota: Sustituye pod-name por el nombre del pod aws-node.
En el resultado, consulta Evento para obtener información sobre los permisos que faltan.
Resultado de ejemplo:
Type Reason Age From Message ---- ------ ---- ---- ------- Warning MissingIAMPermissions 105s (x2 over 105s) aws-node Unauthorized operation: failed to call ec2:DescribeNetworkInterfaces due to missing permissions. Please refer https://github.com/aws/amazon-vpc-cni-k8s/blob/master/docs/iam-policy.md to attach relevant policy to IAM role in the event section you can able to see the error message also you can check the AWS cloud trail event for the particular instance by filtering the cloudtrail with username and provide the instanceID there.
O bien, utiliza AWS CloudTrail para comprobar si hay eventos específicos. Por ejemplo, comprueba el nombre de usuario y el ID de instancia de la llamada a la API DescribeNetworkInterfaces para determinar si se ejecutó.
Comprobación de problemas de red
El complemento de CNI de Amazon VPC debe llegar al punto de enlace del servidor de API y al punto de enlace de Amazon Elastic Compute Cloud (Amazon EC2) cuando se ejecute. Si alguna de las conexiones falla, el complemento no se puede inicializar y los nodos pasan al estado NotReady.
Para comprobar el mensaje de error específico, revisa los registros de IPAMD en el directorio host /var/log/aws-routed-eni/ipamd.log. Asegúrate de que los pods kube-proxy y coreDNS puedan ejecutarse sin errores.
Comprobación de las versiones de los componentes del complemento
Se recomienda actualizar los componentes principales a la versión más reciente. Si la versión del complemento no coincide con la versión de tu clúster de Kubernetes, el complemento no se puede inicializar. Asegúrate que la versión del complemento sea compatible con la versión del clúster de Kubernetes.
Solución de errores de complementos de CNI de Amazon VPC
Para identificar los errores de los complementos, usa SSH para conectarte al nodo de trabajo donde el complemento no puede asignar la dirección IP. A continuación, revisa los registros de IPAMD en el archivo /var/log/aws-routed-eni/ipamd.log para ver si hay mensajes de error.
Error al asignar la dirección IP
El error Failed to assign ip se produce cuando el complemento de CNI de Amazon VPC no puede asignar direcciones IP a los pods programados para los nodos de trabajo. Para identificar el error, también puedes consultar la página del historial de eventos de CloudTrail para ver el evento AssignPrivateIpAddresses.
Para determinar si la subred asignada no tiene direcciones IP disponibles, ejecuta el siguiente comando describe-subnets de la AWS CLI:
aws ec2 describe-subnets --filters "Name=vpc-id,Values= VPCID" | jq '.Subnets[] | .SubnetId + "=" + "\(.AvailableIpAddressCount)"'
Nota: Sustituye VPCID por el ID de tu VPC.
El error Failed to assign ip también puede producirse cuando se establecen valores demasiado bajos para las variables de WARM_ENI_TARGET, WARM_IP_TARGET o MINIMUM_IP_TARGET. Asegúrate de que el intervalo de CIDR de la subred sea lo suficientemente amplio y tenga suficientes asignaciones de direcciones IP para tu caso de uso. Para obtener más información, consulta WARM_ENI_TARGET, WARM_IP_TARGET y MINIMUM_IP_TARGET en el sitio web de GitHub.
Para comprobar los valores de las variables de entorno, ejecuta el siguiente comando para ver los detalles del pod:
kubectl describe pod pod-name -n kube-system
Nota: Sustituye pod-name por el nombre del pod aws-node.
Puedes actualizar las variables de entorno en el DaemonSet de aws-node:
env: - name: WARM_ENI_TARGET value: "1" - name: WARM_IP_TARGET value: "5" - name: MINIMUM_IP_TARGET value: "25"
O bien, ejecuta el siguiente comando para actualizar las variables de entorno:
kubectl set env ds aws-node -n kube-system WARM_ENI_TARGET=1 WARM_IP_TARGET=5 MINIMUM_IP_TARGET=25
Si utilizas el modo de delegación de prefijos y no utilizas un intervalo de subredes de pod dedicado, la fragmentación de la subred puede provocar un error en el complemento. El complemento debe asignar un intervalo continuo de prefijos /28 para IPv4 y /80 para IPv6 a la interfaz de red. Para obtener más información sobre la delegación de prefijos, consulta ENABLE_PREFIX_DELEGATION en el sitio web de GitHub.
No puedes comprobar directamente la fragmentación de la subred. En su lugar, comprueba si todavía tienes más de 16 direcciones IP disponibles en el intervalo de CIDR de subred. Si tienes suficientes direcciones IP y sigues recibiendo con frecuencia el error Failed to assign ip, el problema suele ser la fragmentación de la subred. Para solucionar este problema, se recomienda usar redes personalizadas con delegación de prefijos para establecer subredes dedicadas para los pods. Para obtener más información, consulta AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG en el sitio web de GitHub.
Error Failed to get pod ENI config
Si usas AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG para activar redes personalizadas pero no creas un recurso ENIConfig, recibirás un mensaje de error similar al siguiente ejemplo:
«{"level":"error","ts":"","caller":"ipamd/ipamd.go:798","msg":"Failed to get pod ENI config"}»
Para comprobar si el recurso ENIConfig existe en el clúster, ejecuta el siguiente comando:
kubectl get eniconfig -o yaml
Si el recurso personalizado EniConfig no existe, crea uno. Para obtener más información acerca de las redes personalizadas, consulta AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG en el sitio web de GitHub.
Error Failed to watch
Si no escribes el archivo YAML en el formato correcto, es posible que recibas un mensaje de error similar al del siguiente ejemplo:
«Failed to watch *v1alpha1.ENIConfig: failed to list *v1alpha1.ENIConfig:json: cannot unmarshal string into Go struct field ENIConfigSpec.items.spec.securityGroups of type []string»
Este problema suele producirse cuando hay una discrepancia entre los datos de JSON y la definición del tipo de datos de Go. El mensaje de error del ejemplo anterior muestra que hay un problema con elcampo securityGroups.
Para solucionar este problema, ejecuta el siguiente comando para comprobar los datos de JSON:
kubectl describe ENIConfig
En el resultado del comando, comprueba la sintaxis en función del problema identificado en el mensaje de error. Por ejemplo, asegúrate de que el campo securityGroups de tu JSON sea una matriz de cadenas, no una sola cadena.
Resultado de ejemplo:
cat >$az_1.yaml <<EOF apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: us-west-2a spec: securityGroups: - sg-0123456789abcdef0 subnet: subnet-0123456789abcdef0 EOF
- Temas
- Containers
- Etiquetas
- Amazon Elastic Kubernetes Service
- Idioma
- Español

Contenido relevante
preguntada hace un año
preguntada hace un año
preguntada hace 2 años
preguntada hace 2 años
preguntada hace un año
OFICIAL DE AWSActualizada hace un año