No puedo ejecutar comandos kubectl. Además, he cambiado la configuración de acceso al punto de enlace de público a privado en mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS). En este momento, mi clúster se ha quedado bloqueado en estado Error.
Solución
Nota: Para configurar el acceso al punto de enlace del servidor de la API de Kubernetes, consulta Modificar el acceso al punto de enlace del clúster.
Solución de errores del comando kubectl en un clúster nuevo o existente
Confirmar que el archivo kubeconfig se conecta al clúster
Sigue estos pasos:
-
Confirma que estás utilizando los archivos kubeconfig correctos para conectarte a tu clúster. Para obtener más información, consulta Organizar el acceso a los clústeres utilizando archivos kubeconfig en el sitio web de Kubernetes.
-
Ejecuta el siguiente comando para enumerar los contextos del clúster en tu archivo kubeconfig:
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
Resultado del ejemplo:
Cluster name Server "example-cluster-name" https://"example-cluster-endpoint".eks.amazonaws.com
-
Comprueba que los nombres de los clústeres y los puntos de enlace de tu archivo kubeconfig son correctos. Si el nombre o el punto de enlace de un clúster son incorrectos, ejecuta el siguiente comando para actualizar el contexto del clúster en el archivo kubeconfig:
aws eks update-kubeconfig --name example-cluster-name --region example-region
Nota: Sustituye example-cluster-name por el nombre del clúster que está actualizando y example-region por tu región de AWS.
-
En tu dispositivo, ejecuta el siguiente comando telnet en el puerto 443 para comprobar la conectividad del punto de enlace del servidor de la API:
telnet example-server-endpoint 443
Nota: Sustituye example-server-endpoint por el punto de enlace del servidor de la API.
En el siguiente ejemplo de salida, el puerto 433 puede conectarse con el punto de enlace del servidor D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com:
$ echo exit | telnet D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com 443
Trying 18.224.160.210...
Connected to D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.
Si tu dispositivo no puede conectarse al punto de enlace del servidor de la API a través del puerto 433, completa los pasos de resolución de las siguientes secciones.
Comprobar el solucionador de DNS
Ejecuta el siguiente comando desde el mismo dispositivo en el que fallaron los comandos kubectl:
nslookup example-server-endpoint
Nota: Sustituye example-server-endpoint por el punto de enlace del servidor de la API.
Comprobar si se ha restringido el acceso público al punto de enlace del servidor de la API
Realiza una de las siguientes acciones en función de tus requisitos:
- Si has restringido el acceso a los puntos de enlace del servidor de la API público con bloques de CIDR, verifica que la dirección IP de tu máquina cliente esté dentro de los intervalos de CIDR permitidos.
- Si necesitas acceder desde fuera de tu Amazon Virtual Private Cloud (Amazon VPC), utiliza un punto de enlace público con restricciones de CIDR.
Asegúrate de que la combinación de acceso del punto de enlace del servidor de la API cumpla con tus requisitos de acceso.
Nota: Se recomienda configurar el punto de enlace del servidor de la API como privado y configurar AWS VPN para el acceso externo. Para obtener más información, consulta Acceso a un servidor de API solo privado.
Solución de errores del comando kubectl en un clúster después de que el acceso al punto de enlace pase de público a privado
Haz lo siguiente:
- Confirma que utilizas un host bastión o redes conectadas para acceder al punto de enlace de la API de Amazon EKS. Las redes conectadas incluyen VPC interconectadas, AWS Direct Connect y VPN.
Nota: En el modo de acceso privado, solo puedes acceder al punto de enlace de la API de Amazon EKS desde la VPC del clúster o las redes conectadas.
- Comprueba si los grupos de seguridad o las listas de control de acceso de la red (ACL de la red) bloquean las solicitudes al servidor de API de Kubernetes.
Nota: Si usas una VPC interconectada, confirma que los grupos de seguridad del plano de control permiten el acceso desde la VPC interconectada en el puerto 443.
Solución de problemas de un clúster que está bloqueado en estado Error cuando no puedes cambiar la configuración de acceso a los puntos de enlace de pública a privada
Si hay un problema de permisos con AWS Identity and Access Management (IAM), el clúster pasa al estado Error.
Confirma que el rol de IAM del usuario tenga autorización para realizar la acción AssociateVPCWithHostedZone.
Si la acción no está bloqueada, comprueba si la cuenta de AWS tiene políticas de control de servicios (SCP) de AWS Organizations que bloquean las llamadas a la API. Comprueba que ninguna denegación implícita o explícita bloquea los permisos de tu usuario de IAM a nivel organizativo o de cuenta. Las instrucciones de denegación bloquean los permisos aunque el administrador de la cuenta asocie la política de IAM AdministratorAccess con permisos */* al usuario. Los SCP de AWS Organizations anulan los permisos de las entidades de IAM.