Solución de problemas con los clústeres y nodos de Amazon EKS - Amazon EKS

Ayude a mejorar esta página

¿Quiere contribuir a esta guía del usuario? Elija el enlace Editar esta página en GitHub que se encuentra en el panel derecho de cada página. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.

Solución de problemas con los clústeres y nodos de Amazon EKS

En este capítulo se tratan algunos errores habituales que pueden aparecer al utilizar Amazon EKS y cómo solucionarlos. Si necesita solucionar problemas en áreas específicas de Amazon EKS, consulte los temas aparte Solución de problemas de IAM, Solución de problemas del conector de Amazon EKS y Troubleshooting for ADOT using EKS Add-Ons.

Para obtener más información sobre la solución de problemas, consulte el contenido del Centro de conocimientos sobre Amazon Elastic Kubernetes Service en AWS re:Post.

Capacidad insuficiente

Si aparece el siguiente error al intentar crear un clúster de Amazon EKS, significa que una de las zonas de disponibilidad que ha especificado no tiene capacidad suficiente para admitir un clúster.

Cannot create cluster 'example-cluster' because region-1d, the targeted Availability Zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these Availability Zones: region-1a, region-1b, region-1c

Intente crear de nuevo el clúster con subredes de la VPC de clúster alojadas en las zonas de disponibilidad indicadas en el mensaje de error.

Hay zonas de disponibilidad en las que un clúster no puede residir. Compare las zonas de disponibilidad en las que se encuentran las subredes con la lista de zonas de disponibilidad en Requisitos y consideraciones de subredes.

Los nodos no pueden unirse al clúster

Hay algunos motivos que suelen impedir que los nodos se unan al clúster:

  • Si los nodos son nodos administrados, Amazon EKS añade entradas al ConfigMap de aws-auth al crear el grupo de nodos. Si la entrada se eliminó o modificó, tendrá que volver a agregarla. Para obtener más información, ingrese eksctl create iamidentitymapping --help en su terminal. Puede comprobar las entradas actuales de aws-auth ConfigMap reemplazando my-cluster en el siguiente comando por el nombre de su clúster y luego ejecutando el comando modificado: eksctl get iamidentitymapping --cluster my-cluster . El ARN del rol que especifique no puede incluir una ruta que no sea /. Por ejemplo, si el nombre del rol es development/apps/my-role, deberá cambiarlo a my-role cuando especifique el ARN del rol. Asegúrese de especificar el ARN del rol de IAM correspondiente al nodo (y no el ARN del perfil de instancia).

    Si los nodos son autoadministrados y no ha creado entradas de acceso para el ARN del rol de IAM del nodo, ejecute los mismos comandos indicados para los nodos administrados. Si ha creado una entrada de acceso para el ARN del rol de IAM de su nodo, es posible que no esté configurado correctamente en la entrada de acceso. Asegúrese de especificar el ARN del rol de IAM del nodo (y no el ARN del perfil de instancia) como el ARN de la entidad principal en su entrada o entrada de acceso del ConfigMap de aws-auth. Para obtener más información acerca de las entradas de acceso, consulte Concesión de acceso a los usuarios de IAM a las entradas de acceso de Kubernetes con EKS.

  • El valor de Nombre de clúster en la plantilla de AWS CloudFormation del nodo no coincide exactamente con el nombre del clúster al que desea que se unan los nodos. Si se especifica un valor incorrecto en este campo, la configuración del archivo /var/lib/kubelet/kubeconfig del nodo no será correcta y los nodos no podrán unirse al clúster.

  • El nodo no está etiquetado como propiedad del clúster. Los nodos deben tener la siguiente etiqueta aplicada a ellos, donde my-cluster se reemplaza por el nombre del clúster.

    Clave Valor

    kubernetes.io/cluster/my-cluster

    owned

  • Es posible que los nodos no puedan tener acceso al clúster mediante una dirección IP pública. Asegúrese de que los nodos implementados en subredes públicas tengan asignada una dirección IP pública. Si no es así, puede asociar una dirección IP elástica a un nodo después de que se lance. Para obtener más información, consulte Asociación de una dirección IP elástica a una instancia de ejecución o una interfaz de red. Si la subred pública no está configurada para asignar automáticamente direcciones IP públicas a instancias implementadas en ella, recomendamos habilitar esa configuración. Para obtener más información, consulte Modificación del atributo de direcciones IPv4 públicas de su subred. Si se implementa el nodo en una subred privada, la subred debe tener una ruta a una gateway NAT que tenga asignada una dirección IP pública.

  • El punto de conexión de AWS STS de la región de AWS en la que está implementando los nodos no está habilitado para su cuenta. Para habilitar la región, consulte Activación y desactivación de AWS STS en una región de AWS.

  • El nodo no tiene una entrada DNS privada, lo que provoca que el registro de kubelet contenga un error de node "" not found. Asegúrese de que la VPC donde se crea el nodo tenga valores establecidos para domain-name y domain-name-servers como Options en un DHCP options set. Los valores predeterminados son domain-name:<region>.compute.internal y domain-name-servers:AmazonProvidedDNS. Para más información, consulte Conjuntos de opciones de DHCP en la Guía del usuario de Amazon VPC.

  • Si los nodos del grupo de nodos administrados no se conectan al clúster dentro de 15 minutos, se emitirá un problema de estado con el nombre “NodeCreationFailure” y el estado de la consola se establecerá en Create failed. En el caso de las AMI de Windows con tiempos de inicio lentos, este problema se puede resolver con el inicio rápido.

Para identificar y solucionar problemas de causas comunes que impiden que los nodos de trabajo se unan a un clúster, puede usar el manual de procedimientos AWSSupport-TroubleshootEKSWorkerNode. Para obtener más información, consulte AWSSupport-TroubleshootEKSWorkerNode en la Referencia del manual de procedimientos de AWS Systems Manager Automation.

Acceso denegado o no autorizado (kubectl)

Si aparece uno de los siguientes errores al ejecutar los comandos de kubectl, eso significa que su kubectl no está configurado correctamente para Amazon EKS o las credenciales para la entidad principal de IAM (rol u usuario) que utiliza no están asignadas a un nombre de usuario de Kubernetes con suficientes permisos para los objetos de Kubernetes en su clúster de Amazon EKS.

  • could not get token: AccessDenied: Access denied

  • error: You must be logged in to the server (Unauthorized)

  • error: the server doesn’t have a resource type "svc"

Esto podría deberse a una de las siguientes razones:

  • El clúster se creó con credenciales para una entidad principal de IAM y kubectl utiliza credenciales para otra entidad principal de IAM. Para resolver este problema, actualice el archivo kube config para usar las credenciales que crearon el clúster. Para obtener más información, consulte Conexión de kubectl a un clúster de EKS mediante la creación de un archivo kubeconfig.

  • Si el clúster cumple los requisitos mínimos de la plataforma que se indican en la sección de requisitos previos Concesión de acceso a Kubernetes a usuarios de IAM con entradas de acceso de EKS, no existe una entrada de acceso con la entidad principal de IAM. Si existe, no tiene definidos los nombres de grupo de Kubernetes necesarios o no tiene asociada la política de acceso adecuada. Para obtener más información, consulte Concesión de acceso a los usuarios de IAM a las entradas de acceso de Kubernetes con EKS.

  • Si el clúster no cumple los requisitos mínimos de la plataforma que se indican en Concesión de acceso a Kubernetes a usuarios de IAM con entradas de acceso de EKS, no existe una entrada con la entidad principal de IAM en aws-auth ConfigMap. Si existe, no está asignada a nombres de grupo de Kubernetes vinculados a un Role o ClusterRole de Kubernetes con los permisos necesarios. Para obtener más información sobre los objetos de autorización basada en roles (RBAC) de Kubernetes, consulte Uso de la autorización de RBAC en la documentación de Kubernetes. Puede comprobar las entradas actuales de aws-auth ConfigMap reemplazando my-cluster en el siguiente comando por el nombre de su clúster y luego ejecutando el comando modificado: eksctl get iamidentitymapping --cluster my-cluster . Si no hay una entrada para el ARN de la entidad principal de IAM en el ConfigMap, ingrese eksctl create iamidentitymapping --help en el terminal para aprender a crear una.

Si instala y configura la AWS CLI, puede configurar las credenciales de IAM que utiliza. Para obtener más información, consulte Configurar la AWS CLI, en la Guía del usuario de la interfaz de línea de comandos de AWS. También puede configurar kubectl para utilizar un rol de IAM si asume un rol de IAM para acceder a los objetos de Kubernetes en su clúster. Para obtener más información, consulte Conexión de kubectl a un clúster de EKS mediante la creación de un archivo kubeconfig.

hostname doesn’t match

La versión de Python de su sistema debe ser 2.7.9 o posterior. En caso contrario, se producirán errores hostname doesn’t match en las llamadas de la AWS CLI a Amazon EKS. Para obtener más información, consulte ¿Qué significan los errores “el nombre del host no coincide”? en Preguntas frecuentes sobre las solicitudes de Python.

getsockopt: no route to host

Docker se ejecuta en el rango de CIDR 172.17.0.0/16 en los clústeres de Amazon EKS. Le recomendamos que las subredes de la VPC de su clúster no se superpongan. De lo contrario, recibirá el siguiente error:

Error: : error upgrading connection: error dialing backend: dial tcp 172.17.<nn>.<nn>:10250: getsockopt: no route to host

Instances failed to join the Kubernetes cluster

Si aparece el error Instances failed to join the Kubernetes cluster en la AWS Management Console, asegúrese de que el acceso privado al punto de conexión del clúster esté habilitado o de que haya configurado correctamente los bloques de CIDR para el acceso público al punto de conexión. Para obtener más información, consulte Control del acceso de la red al punto de conexión del servidor de API del clúster.

Códigos de error del grupo de nodos administrado

Si el grupo de nodos administrado encuentra un problema de estado del hardware, Amazon EKS devuelve un código de error para ayudarlo a diagnosticar el problema. Estas comprobaciones de estado no detectan problemas de software porque se basan en comprobaciones de estado de Amazon EC2. En la siguiente lista se describen los códigos de error.

AccessDenied

Amazon EKS, o uno o varios de sus nodos administrados, no pueden autenticarse ni autorizarse con su servidor de la API del clúster de Kubernetes. Para obtener más información sobre la resolución de una causa común, consulte Resolución de una causa común de errores AccessDenied para grupos de nodos administrados.. Las AMI privadas de Windows también pueden provocar este código de error junto con el mensaje de error Not authorized for images. Para obtener más información, consulte Not authorized for images.

AmiIdNotFound

No hemos podido encontrar el ID de la AMI asociado a su plantilla de lanzamiento. Asegúrese de que la AMI existe y de que se comparte con su cuenta.

AutoScalingGroupNotFound

No se pudo encontrar el grupo de escalado automático asociado al grupo de nodos administrados. Es posible que pueda volver a crear un grupo de Auto Scaling con la misma configuración para recuperarlo.

ClusterUnreachable

Amazon EKS, o uno o varios de los nodos administrados, no pueden comunicarse con el servidor de la API del clúster de Kubernetes. Esto puede suceder si hay interrupciones en la red o si los servidores de la API están agotando el tiempo de espera de las solicitudes de procesamiento.

Ec2SecurityGroupNotFound

No se pudo encontrar el grupo de seguridad del clúster para el clúster. Debe volver a crear el clúster.

Ec2SecurityGroupDeletionFailure

No hemos podido eliminar el grupo de seguridad de acceso remoto para el grupo de nodos administrados. Elimine cualquier dependencia del grupo de seguridad.

Ec2LaunchTemplateNotFound

No hemos podido encontrar la plantilla de lanzamiento de Amazon EC2 para el grupo de nodos administrados. Debe volver a crear el grupo de nodos para recuperarlo.

Ec2LaunchTemplateVersionMismatch

La versión de la plantilla de lanzamiento de Amazon EC2 para el grupo de nodos administrados no coincide con la versión creada por Amazon EKS. Es posible que pueda volver a la versión que creó Amazon EKS para recuperarla.

IamInstanceProfileNotFound

No hemos podido encontrar el perfil de instancia de IAM para su grupo de nodos administrados. Es posible que pueda volver a crear un perfil de instancia con la misma configuración para recuperarlo.

IamNodeRoleNotFound

No hemos podido encontrar el rol de IAM para su grupo de nodos administrados. Es posible que pueda volver a crear un rol de IAM con la misma configuración para recuperarlo.

AsgInstanceLaunchFailures

Su grupo de escalado automático está experimentando errores al intentar lanzar instancias.

NodeCreationFailure

Las instancias lanzadas no pueden registrarse en el clúster de Amazon EKS. Las causas comunes de este error son permisos del rol de IAM del nodo insuficientes o falta de acceso a Internet saliente para los nodos. Los nodos deben cumplir cualquiera de los siguientes requisitos:

InstanceLimitExceeded

Su cuenta de AWS no puede lanzar más instancias del tipo de instancia especificado. Es posible que pueda solicitar un aumento del límite de instancias de Amazon EC2 para recuperarlas.

InsufficientFreeAddresses

Una o varias de las subredes asociadas al grupo de nodos administrados no tienen suficientes direcciones IP disponibles para nuevos nodos.

InternalFailure

Estos errores suelen ser causados por un problema del lado del servidor de Amazon EKS.

La causa más común de los errores de AccessDenied al realizar operaciones en grupos de nodos administrados es la falta de eks:node-manager, ClusterRole o ClusterRoleBinding. Amazon EKS configura estos recursos en el clúster como parte de la incorporación con grupos de nodos administrados, y estos son necesarios para administrar los grupos de nodos.

ClusterRole puede cambiar con el tiempo, pero debe parecerse al siguiente ejemplo:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create

ClusterRoleBinding puede cambiar con el tiempo, pero debe parecerse al siguiente ejemplo:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Verifique que el ClusterRole de eks:node-manager existe.

kubectl describe clusterrole eks:node-manager

Si está presente, compare la salida con el ejemplo de ClusterRole anterior.

Verifique que el ClusterRoleBinding de eks:node-manager existe.

kubectl describe clusterrolebinding eks:node-manager

Si está presente, compare la salida con el ejemplo de ClusterRoleBinding anterior.

Si ha identificado un ClusterRole o ClusterRoleBinding ausente o defectuoso como la causa de un error de AcessDenied al solicitar operaciones de grupo de nodos administrados, puede restaurarlos. Guarde los siguientes contenidos en un archivo con el nombre eks-node-manager-role.yaml.

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Aplique el archivo.

kubectl apply -f eks-node-manager-role.yaml

Vuelva a intentar la operación del grupo de nodos para ver si se resolvió el problema.

Not authorized for images

Una posible causa de un mensaje de error Not authorized for images es el uso de una AMI privada de Windows de Amazon EKS para lanzar grupos de nodosWindows administrados. Tras lanzar nuevas AMI de Windows, AWS convierte en privadas las AMI de más de cuatro meses de antigüedad, por lo que ya no se puede acceder a ellas. Si el grupo de nodos administrado utiliza una AMI de Windows privada, considere actualizar el grupo de nodos administrados de Windows. Si bien no podemos garantizar que podamos proporcionar acceso a las AMI que se han convertido en privadas, puede solicitar el acceso enviando un ticket a AWS Support. Para obtener más información, consulte Parches en la Guía del usuario de Amazon EC2.

El nodo está en estado NotReady

Si el nodo entra en estado NotReady, es probable que esto indique que el nodo está en mal estado y no está disponible para programar nuevos Pods. Esto puede ocurrir por varios motivos, como que el nodo carezca de recursos suficientes para la CPU, la memoria o el espacio disponible en el disco.

En el caso de las AMI de Windows optimizadas para Amazon EKS, no hay reservas para los recursos de cómputos especificados de forma predeterminada en la configuración de kubelet. Para evitar problemas de recursos, puede reservar recursos de cómputos para los procesos del sistema proporcionando valores de configuración de kube-reserved o system-reserved al kubelet. Para ello, utilice el parámetro de línea de comandos -KubeletExtraArgs del script de arranque. Para obtener más información, consulte Reservar recursos de cómputos para los daemons del sistema en la documentación de Kubernetes y los Parámetros de configuración del script de arranque en esta guía del usuario.

Herramienta de recopilación de registros de CNI

El Amazon VPC CNI plugin for Kubernetes de tiene su propio script de resolución de problemas que está disponible en los nodos en /opt/cni/bin/aws-cni-support.sh. Puede utilizar el script a fin de recopilar registros de diagnóstico para casos de soporte y solución de problemas general.

Utilice el siguiente comando para ejecutar el script en su nodo:

sudo bash /opt/cni/bin/aws-cni-support.sh
nota

Si el script no está presente en esa ubicación, el contenedor de CNI no podrá ejecutarse. Puede descargar y ejecutar manualmente el script con el siguiente comando:

curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/log-collector-script/linux/eks-log-collector.sh sudo bash eks-log-collector.sh

El script recopila la siguiente información de diagnóstico: La versión de CNI que ha implementado puede ser anterior a la versión del script.

This is version 0.6.1. New versions can be found at https://github.com/awslabs/amazon-eks-ami Trying to collect common operating system logs... Trying to collect kernel logs... Trying to collect mount points and volume information... Trying to collect SELinux status... Trying to collect iptables information... Trying to collect installed packages... Trying to collect active system services... Trying to collect Docker daemon information... Trying to collect kubelet information... Trying to collect L-IPAMD information... Trying to collect sysctls information... Trying to collect networking information... Trying to collect CNI configuration information... Trying to collect running Docker containers and gather container data... Trying to collect Docker daemon logs... Trying to archive gathered information... Done... your bundled logs are located in /var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

La información de diagnóstico se recopila y se almacena en:

/var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

La red de tiempo de ejecución del contenedor no está lista

Puede recibir un error Container runtime network not ready y errores de autorización similares a los siguientes:

4191 kubelet.go:2130] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized 4191 kubelet_node_status.go:106] Unable to register node "ip-10-40-175-122.ec2.internal" with API server: Unauthorized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized

Esto puede deberse a una de las siguientes razones:

  1. O bien no tiene un ConfigMap de aws-auth en su clúster, o este no incluye entradas para el rol de IAM con el que configuró sus nodos.

    Para resolver este problema, consulte las entradas existentes en su ConfigMap reemplazando my-cluster en el siguiente comando con el nombre de su clúster y, luego, ejecute el comando modificado: eksctl get iamidentitymapping --cluster my-cluster . Si recibe un mensaje de error del comando, puede que esto se deba a que el clúster no tiene un aws-auth ConfigMap. El siguiente comando añade una entrada al ConfigMap. Si ConfigMap no existe, el comando también lo crea. Sustituya 111122223333 por el ID de la cuenta de AWS correspondiente al rol de IAM y myAmazonEKSNodeRole por el nombre del rol del nodo.

    eksctl create iamidentitymapping --cluster my-cluster \ --arn arn:aws:iam::111122223333:role/myAmazonEKSNodeRole --group system:bootstrappers,system:nodes \ --username system:node:{{EC2PrivateDNSName}}

    El ARN del rol que especifique no puede incluir una ruta que no sea /. Por ejemplo, si el nombre de su rol es development/apps/my-role, tendrá que cambiarlo por my-role cuando especifique el ARN del rol. Asegúrese de especificar el ARN del rol de IAM correspondiente al nodo (y no el ARN del perfil de instancia).

  2. Los nodos autoadministrados se encuentran en un clúster con una versión de la plataforma que es la versión mínima indicada en los requisitos previos del tema Concesión de acceso a Kubernetes a usuarios de IAM con entradas de acceso de EKS, pero no aparece ninguna entrada en el aws-auth ConfigMap (consulte el punto anterior) correspondiente al rol de IAM del nodo o no existe una entrada de acceso para ese rol. Para resolver el problema, consulte las entradas de acceso existentes reemplazando my-cluster en el siguiente comando por el nombre de su clúster y luego ejecutando el comando modificado: aws eks list-access-entries --cluster-name my-cluster . El siguiente comando agrega una entrada de acceso para el rol de IAM del nodo. Sustituya 111122223333 por el ID de la cuenta de AWS correspondiente al rol de IAM y myAmazonEKSNodeRole por el nombre del rol del nodo. Si tiene un nodo de Windows, reemplace EC2_Linux por EC2_Windows. Asegúrese de especificar el ARN del rol de IAM correspondiente al nodo (y no el ARN del perfil de instancia).

    aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/myAmazonEKSNodeRole --type EC2_LINUX

Tiempo de espera de protocolo de enlace TLS

Cuando un nodo no puede establecer una conexión con el punto de conexión del servidor de la API público, podría ver un error similar al siguiente.

server.go:233] failed to run Kubelet: could not init cloud provider "aws": error finding instance i-1111f2222f333e44c: "error listing AWS instances: \"RequestError: send request failed\\ncaused by: Post net/http: TLS handshake timeout\""

El proceso kubelet reaparecerá continuamente y probará el punto de conexión del servidor de API. El error también puede producirse temporalmente durante cualquier procedimiento que realice una actualización sucesiva del clúster en el plano de control, como un cambio de configuración o una actualización de versión.

Para resolver el problema, verifique la tabla de enrutamiento y los grupos de seguridad para asegurarse de que el tráfico de los nodos puede llegar al punto de conexión público.

InvalidClientTokenId

Si está utilizando roles de IAM para cuentas de servicio de un Pod o DaemonSet implementado en un clúster de la región de China de AWS y no ha establecido la variable de entorno AWS_DEFAULT_REGION en la especificación, el Pod o el DaemonSet pueden recibir el siguiente error:

An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid

Para resolver el problema, debe agregar la variable de entorno AWS_DEFAULT_REGION a la especificación del Pod o DaemonSet, tal y como se muestra en el siguiente ejemplo de especificación de un Pod.

apiVersion: v1 kind: Pod metadata: name: envar-demo labels: purpose: demonstrate-envars spec: containers: - name: envar-demo-container image: gcr.io/google-samples/node-hello:1.0 env: - name: AWS_DEFAULT_REGION value: "region-code"

Los grupos de nodos deben coincidir con la versión de Kubernetes antes de actualizar el plano de control

Antes de actualizar un plano de control con una nueva versión de Kubernetes, la versión secundaria de los nodos administrados y de Fargate en su clúster debe ser la misma que la de la versión actual de su plano de control. La API update-cluster-version de Amazon EKS rechazará las solicitudes hasta que usted actualice todos los nodos administrados de Amazon EKS a la versión del clúster actual. Amazon EKS proporciona las API para actualizar los nodos administrados. Para obtener información sobre la actualización de la versión de Kubernetes del grupo de nodos administrados, consulte Actualización de un grupo de nodos administrados para un clúster. Para actualizar la versión de un nodo de Fargate, elimine el pod que representa el nodo y vuelva a implementar el pod después de actualizar el plano de control. Para obtener más información, consulte Actualización del clúster existente a la nueva versión de Kubernetes.

Al lanzar muchos nodos, hay errores de Too Many Requests

Si lanza muchos nodos al mismo tiempo, es posible que vea un mensaje de error en Datos de usuario de Amazon EC2registros de ejecución que dice Too Many Requests. Esto puede ocurrir porque el plano de control está sobrecargado con llamadas describeCluster. La sobrecarga da como resultado una limitación, es decir, que los nodos no ejecutan el script de arranque ni se unen por completo al clúster.

Asegúrese de que los argumentos --apiserver-endpoint, --b64-cluster-ca y --dns-cluster-ip se estén pasando al script de arranque del nodo. Al incluir estos argumentos, no es necesario que el script de arranque haga una llamada describeCluster, lo que ayuda a evitar que el plano de control se sobrecargue. Para obtener más información, consulte Proporcione datos de usuario a fin de pasar argumentos al archivo bootstrap.sh incluido con una AMI optimizada Linux/Bottlerocket para Amazon EKS.

Respuesta de error no autorizada HTTP 401 en solicitudes del servidor API de Kubernetes

Verá estos errores si el token de cuenta de servicio de un Pod’s ha caducado en un clúster.

El servidor de API de Kubernetes de los clústeres de Amazon EKS rechaza solicitudes con tokens de más de 90 días. En versiones anteriores de Kubernetes, los tokens no tenían caducidad. Esto significa que los clientes que confían en estos tokens deben actualizarlos en una hora. Para evitar que el servidor API de Kubernetes rechace su solicitud debido a un token no válido, la versión del SDK de cliente de Kubernetes utilizada por la carga de trabajo debe ser la misma o posterior a las siguientes versiones:

  • Versión de Go 0.15.7 y posteriores

  • Versión de Python 12.0.0 y posteriores

  • Versión de Java 9.0.0 y posterior

  • Versión de JavaScript 0.10.3 y posterior

  • Rama de Ruby master

  • Versión de Haskell 0.3.0.0

  • Versión C# 7.0.5 y posterior

Puede identificar todos los Pods existentes de tu clúster que utilizan tokens obsoletos. Para obtener más información, consulte Tokens de cuenta de servicio.

La versión de la plataforma Amazon EKS está más de dos versiones por detrás de la versión de plataforma actual

Esto puede ocurrir cuando Amazon EKS no puede actualizar automáticamente la versión de la plataforma del clúster. Aunque hay muchas causas para esto, se presentan algunas de las causas más comunes. Si alguno de estos problemas se aplica a su clúster, es posible que siga funcionando. Amazon EKS no actualizará la versión de la plataforma.

Problema

El rol de IAM de clúster se eliminó: este rol se especificó cuando se creó el clúster. Puede ver qué rol se ha especificado con el siguiente comando. Reemplace my-cluster por el nombre de su clúster.

aws eks describe-cluster --name my-cluster --query cluster.roleArn --output text | cut -d / -f 2

Un ejemplo de salida sería el siguiente.

eksClusterRole
Solución

Cree un nuevo rol de IAM de clúster con el mismo nombre.

Problema

Se eliminó una subred especificada durante la creación del clúster: las subredes que se usarían con el clúster se especificaron durante la creación del clúster. Puede ver qué subredes se especificaron con el siguiente comando. Reemplace my-cluster por el nombre de su clúster.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.subnetIds

Un ejemplo de salida sería el siguiente.

[ "subnet-EXAMPLE1", "subnet-EXAMPLE2" ]
Solución

Confirme si los ID de subred existen en su cuenta.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-subnets --filters "Name=vpc-id,Values=$vpc_id" --query "Subnets[*].SubnetId"

Un ejemplo de salida sería el siguiente.

[ "subnet-EXAMPLE3", "subnet-EXAMPLE4" ]

Si los ID de subredes devueltos en la salida no coinciden con los ID de subredes que se especificaron cuando se creó el clúster y desea que Amazon EKS actualice el clúster, debe cambiar las subredes utilizadas por el clúster. Esto se debe a que, si especificó más de dos subredes cuando creó el clúster, Amazon EKS seleccionará aleatoriamente las subredes que especificó para crear nuevas interfaces de red elástica en ellas. Estas interfaces de red permiten que el plano de control se comunique con los nodos. Amazon EKS no actualizará el clúster si la subred que selecciona no existe. No tiene control sobre las subredes que especificó en la creación del clúster en las que Amazon EKS elige crear una nueva interfaz de red.

Cuando inicia una actualización de la versión Kubernetes del clúster, la actualización puede fallar por el mismo motivo.

Problema

Se eliminó un grupo de seguridad especificado durante la creación del clúster: si especificó grupos de seguridad durante la creación del clúster, puede ver sus ID con el siguiente comando. Reemplace my-cluster por el nombre de su clúster.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.securityGroupIds

Un ejemplo de salida sería el siguiente.

[ "sg-EXAMPLE1" ]

Si se devuelve [], no se especificó ningún grupo de seguridad cuando se creó el clúster y el problema no es que falte un grupo de seguridad. Si se devuelven grupos de seguridad, confirme que los grupos de seguridad existen en su cuenta.

Solución

Confirme si estos grupos de seguridad existen en su cuenta.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-security-groups --filters "Name=vpc-id,Values=$vpc_id" --query "SecurityGroups[*].GroupId"

Un ejemplo de salida sería el siguiente.

[ "sg-EXAMPLE2" ]

Si los ID de grupos de seguridad devueltos en la salida no coinciden con los ID de grupos de seguridad que se especificaron cuando se creó el clúster y desea que Amazon EKS actualice el clúster, debe cambiar los grupos de seguridad utilizados por el clúster. Amazon EKS no actualizará un clúster si los ID de grupos de seguridad especificados en la creación del clúster no existen.

Cuando inicia una actualización de la versión Kubernetes del clúster, la actualización puede fallar por el mismo motivo.

  • No tiene al menos seis (aunque recomendamos 16) direcciones IP disponibles en cada una de las subredes que especificó al crear el clúster. Si no tiene suficientes direcciones IP disponibles en la subred, debe liberar direcciones IP en la subred o bien cambiar las subredes utilizadas por el clúster para que emplee subredes con suficientes direcciones IP disponibles.

  • Ha habilitado el cifrado de secretos cuando creó el clúster y se ha eliminado la clave de AWS KMS especificada. Si desea que Amazon EKS actualice el clúster, deberá crear un clúster nuevo

Preguntas frecuentes sobre el estado de los clústeres y los códigos de error con rutas de resolución

Amazon EKS detecta problemas con los clústeres de EKS y la infraestructura del clúster y los almacena en el estado del clúster. Puede detectar, solucionar y abordar los problemas del clúster más rápido con la ayuda de la información sobre el estado del clúster. Esto le permite crear entornos de aplicación más seguros y actualizados. Además, es posible que no pueda actualizar a versiones más recientes de Kubernetes o que Amazon EKS no pueda instalar actualizaciones de seguridad en un clúster degradado debido a problemas con la infraestructura necesaria o la configuración del clúster. Amazon EKS puede tardar 3 horas en detectar problemas o detectar que se resolvió un problema.

El estado de un clúster de Amazon EKS es una responsabilidad compartida entre Amazon EKS y sus usuarios. Usted es responsable de la infraestructura previa de los roles de IAM y las subredes de Amazon VPC, así como de cualquier otra infraestructura necesaria que deba proporcionarse con antelación. Amazon EKS detecta cambios en la configuración de esta infraestructura y del clúster.

Para acceder al estado de su clúster en la consola de Amazon EKS, busque una sección llamada Problemas del estado en la pestaña Descripción general de la página de detalles del clúster de Amazon EKS. Estos datos también estarán disponibles al llamar a la acción DescribeCluster en la API de EKS, por ejemplo, desde AWS Command Line Interface.

¿Por qué debo utilizar esta característica?

Obtendrá una mayor visibilidad del estado de su clúster de Amazon EKS, diagnosticará y solucionará rápidamente cualquier problema, sin necesidad de perder tiempo depurando o abriendo casos de asistencia de AWS. Por ejemplo: si accidentalmente eliminó una subred del clúster de Amazon EKS, Amazon EKS no podrá crear interfaces entre cuentas ni comandos de la AWS CLI de Kubernetes, tales como ejecuciones en kubectl o registros en kubectl. Estos fallarán con el error: Error from server: error dialing backend: remote error: tls: internal error. Ahora verá un problema de estado de Amazon EKS que dice: subnet-da60e280 was deleted: could not create network interface.

¿Cómo se relaciona o funciona esta característica con otros servicios de AWS?

Los roles de IAM y las subredes de Amazon VPC son dos ejemplos de infraestructura previa donde el estado del clúster detecta problemas. Esta característica devolverá información detallada si esos recursos no están configurados correctamente.

¿Se cobran cargos por un clúster con problemas de estado?

Sí, todos los clústeres de Amazon EKS se facturan al precio estándar de Amazon EKS. La característica estado del clúster está disponible sin costo adicional.

¿Funciona esta característica con los clústeres de Amazon EKS en AWS Outposts?

Sí, se detectan problemas con los clústeres de EKS en la Nube de AWS, incluidos los clústeres extendidos en AWS Outposts y los clústeres locales en AWS Outposts. El estado del clúster no detecta problemas con Amazon EKS Anywhere o Amazon EKS Distro (EKS-D).

¿Puedo recibir una notificación cuando se detecten nuevos problemas?

Sí. AWS envía un correo electrónico y una notificación al panel Personal Health Dashboard cuando se detectan nuevos problemas de estado en el clúster.

¿La consola me avisa en caso de problemas de estado?

Sí, cualquier clúster con problemas de estado incluirá un cartel en la parte superior de la consola.

Las primeras dos columnas son las que se necesitan para los valores de respuesta de la API. El tercer campo del objeto Problemas en el estado del clúster es resourceIds, cuya devolución depende del tipo de problema.

Código Mensaje ResourceIds ¿Clúster recuperable?

SUBNET_NOT_FOUND

No logramos encontrar una o más subredes actualmente asociadas a su clúster. Llame a la API update-cluster-config de Amazon EKS para actualizar las subredes.

ID de subred

SECURITY_GROUP_NOT_FOUND

No logramos encontrar uno o más grupos de seguridad actualmente asociados a su clúster. Llame a la API update-cluster-config de Amazon EKS para actualizar los grupos de seguridad

ID de grupos de seguridad

IP_NOT_AVAILABLE

Una o varias de las subredes asociadas a su clúster no tienen suficientes direcciones IP disponibles para que Amazon EKS realice operaciones de administración del clúster. Libere direcciones en las subredes o asocie diferentes subredes a su clúster mediante la API update-cluster-config de Amazon EKS.

ID de subred

VPC_NOT_FOUND

No logramos encontrar la VPC asociada a su clúster. Debe eliminar y volver a crear su clúster.

ID de la VPC

No

ASSUME_ROLE_ACCESS_DENIED

Su clúster no utiliza el rol vinculado al servicio de Amazon EKS. No logramos asumir el rol asociado a su clúster para realizar las operaciones de administración necesarias de Amazon EKS. Compruebe si el rol existe y tiene la política de confianza requerida.

El rol de IAM del clúster

PERMISSION_ACCESS_DENIED

Su clúster no utiliza el rol vinculado al servicio de Amazon EKS. El rol asociado a su clúster no otorga permisos suficientes para que Amazon EKS lleve a cabo las operaciones de administración requeridas. Compruebe las políticas asociadas al rol del clúster y si se aplica alguna política de denegación independiente.

El rol de IAM del clúster

ASSUME_ROLE_ACCESS_DENIED_USING_SLR

No logramos asumir el rol vinculado al servicio de administración del clúster de Amazon EKS. Compruebe si el rol existe y tiene la política de confianza requerida.

El rol vinculado al servicio de Amazon EKS

PERMISSION_ACCESS_DENIED_USING_SLR

El rol vinculado al servicio de administración del clúster de Amazon EKS no concede permisos suficientes para que Amazon EKS lleve a cabo las operaciones de administración requeridas. Compruebe las políticas asociadas al rol del clúster y si se aplica alguna política de denegación independiente.

El rol vinculado al servicio de Amazon EKS

OPT_IN_REQUIRED

Su cuenta no tiene una suscripción al servicio Amazon EC2. Actualice las suscripciones de su cuenta en la página de configuración de su cuenta.

N/A

STS_REGIONAL_ENDPOINT_DISABLED

El punto de conexión regional de STS está deshabilitado. Habilite el punto de conexión para que Amazon EKS lleve a cabo las operaciones de administración del clúster necesarias.

N/A

KMS_KEY_DISABLED

La clave de AWS KMS asociada a su clúster está deshabilitada. Vuelva a habilitar la clave para recuperar su clúster.

Con la KMS Key Arn

KMS_KEY_NOT_FOUND

No logramos encontrar la clave de AWS KMS asociada a su clúster. Debe eliminar y volver a crear el clúster.

Con la KMS Key ARN

No

KMS_GRANT_REVOKED

Se revocan las concesiones de la clave de AWS KMS asociada al clúster. Debe eliminar y volver a crear el clúster.

Con la KMS Key Arn

No