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
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
deaws-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, ingreseeksctl create iamidentitymapping --help
en su terminal. Puede comprobar las entradas actuales deaws-auth
ConfigMap
reemplazandomy-cluster
en el siguiente comando por el nombre de su clúster y luego ejecutando el comando modificado:eksctl get iamidentitymapping --cluster
. El ARN del rol que especifique no puede incluir una ruta que no seamy-cluster
/
. Por ejemplo, si el nombre del rol esdevelopment/apps/my-role
, deberá cambiarlo amy-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
deaws-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 denode "" not found
. Asegúrese de que la VPC donde se crea el nodo tenga valores establecidos paradomain-name
ydomain-name-servers
comoOptions
en unDHCP options set
. Los valores predeterminados sondomain-name:<region>.compute.internal
ydomain-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 archivokube 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 unRole
oClusterRole
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 RBACen la documentación de Kubernetes. Puede comprobar las entradas actuales de aws-auth
ConfigMap
reemplazandomy-cluster
en el siguiente comando por el nombre de su clúster y luego ejecutando el comando modificado:eksctl get iamidentitymapping --cluster
. Si no hay una entrada para el ARN de la entidad principal de IAM en elmy-cluster
ConfigMap
, ingreseeksctl 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”?
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:
-
Capaz de acceder a internet mediante una dirección IP pública. El grupo de seguridad asociado a la subred en la que se encuentra el nodo debe permitir la comunicación. Para obtener más información, consulte Requisitos y consideraciones de la subred y Revisión de requisitos de grupos de seguridad de Amazon EKS para clústeres.
-
Los nodos y la VPC deben cumplir los requisitos que aparecen en la sección Implementación de clústeres privados con acceso limitado a Internet.
-
- 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-reservedkubelet
. 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
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:
-
O bien no tiene un
ConfigMap
deaws-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
reemplazandomy-cluster
en el siguiente comando con el nombre de su clúster y, luego, ejecute el comando modificado:eksctl get iamidentitymapping --cluster
. Si recibe un mensaje de error del comando, puede que esto se deba a que el clúster no tiene unmy-cluster
aws-auth
ConfigMap
. El siguiente comando añade una entrada alConfigMap
. SiConfigMap
no existe, el comando también lo crea. Sustituya111122223333
por el ID de la cuenta de AWS correspondiente al rol de IAM ymyAmazonEKSNodeRole
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 esdevelopment/apps/my-role
, tendrá que cambiarlo pormy-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). -
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 reemplazandomy-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
. El siguiente comando agrega una entrada de acceso para el rol de IAM del nodo. Sustituyamy-cluster
111122223333
por el ID de la cuenta de AWS correspondiente al rol de IAM ymyAmazonEKSNodeRole
por el nombre del rol del nodo. Si tiene un nodo de Windows, reemplaceEC2_Linux
porEC2_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
-
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 enkubectl
. 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 |
Sí |
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 |
Sí |
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 |
Sí |
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 |
Sí |
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 |
Sí |
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 |
Sí |
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 |
Sí |
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 |
Sí |
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 |
Sí |
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 |
Sí |
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 |