Solución de problemas del conector de Amazon EKS
En este tema, se tratan algunos de los errores comunes que pueden producirse mientras se usa Amazon EKS Connector y se incluyen las instrucciones sobre cómo resolverlos e implementar soluciones alternativas.
Solución de problemas básicos
En esta sección se describen los pasos para diagnosticar problemas de Amazon EKS Connector.
Verificación del estado de Amazon EKS Connector
Compruebe el estado de Amazon EKS Connector, ingrese:
kubectl get pods -n eks-connector
Inspección de los registros de Amazon EKS Connector
El Pod de Amazon EKS Connector consta de tres contenedores. Para recuperar los registros completos de todos estos contenedores y poder inspeccionarlos, ejecute los siguientes comandos:
-
connector-init
kubectl logs eks-connector-0 --container connector-init -n eks-connector kubectl logs eks-connector-1 --container connector-init -n eks-connector
-
connector-proxy
kubectl logs eks-connector-0 --container connector-proxy -n eks-connector kubectl logs eks-connector-1 --container connector-proxy -n eks-connector
-
connector-agent
kubectl exec eks-connector-0 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log kubectl exec eks-connector-1 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log
Obtención del nombre real del clúster
Los clústeres de Amazon EKS se identifican de forma inequívoca a través del clusterName
dentro de una cuenta de AWS y una región de AWS. Si tiene varios clústeres conectados en Amazon EKS, puede confirmar qué clúster de Amazon EKS se ha registrado en el clúster de Kubernetes actual. Para ello, ingrese lo siguiente para saber cuál es el clusterName
del clúster actual.
kubectl exec eks-connector-0 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/" kubectl exec eks-connector-1 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/"
Comandos diversos
Los siguientes comandos son útiles para recuperar la información que necesita para solucionar problemas.
-
Utilice el siguiente comando para recopilar imágenes que utilizan los Pods en Amazon EKS Connector.
kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n'
-
Utilice el siguiente comando para determinar los nombres de los nodos en los que se ejecuta Amazon EKS Connector.
kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.nodeName}" | tr -s '[[:space:]]' '\n'
-
Ejecute el siguiente comando para obtener las versiones de cliente y servidor de Kubernetes.
kubectl version
-
Ejecute el siguiente comando para obtener información acerca de los nodos.
kubectl get nodes -o wide --show-labels
Problema de Helm: 403 Prohibido
Si ha recibido el siguiente error al ejecutar los comandos de instalación de Helm:
Error: INSTALLATION FAILED: unexpected status from HEAD request to https://public.ecr.aws/v2/eks-connector/eks-connector-chart/manifests/0.0.6: 403 Forbidden
Puede ejecutar la siguiente línea para solucionarlo:
docker logout public.ecr.aws
Error de la consola: El clúster está atascado en el estado Pending
Si después de registrar el clúster, este se queda atascado en el estado Pending
en la consola de Amazon EKS, tal vez se deba a que Amazon EKS Connector todavía no conectó correctamente el clúster a AWS. Para un clúster registrado, el estado Pending
significa que la conexión todavía no se ha establecido correctamente. Para resolver este problema, asegúrese de haber aplicado el manifiesto al clúster de Kubernetes de destino. Si lo aplicó al clúster, pero este sigue en estado Pending
, puede que StatefulSet eks-connector
esté en mal estado. Para solucionar este problema, consulte Los Pods de Amazon EKS Connector se están bloqueando en bucle en este tema.
Error de la consola: El usuario system:serviceaccount:eks-connector:eks-connector no puede suplantar los usuarios de recursos en el grupo de la API en el ámbito del clúster.
Amazon EKS Connector utiliza la suplantación de usuarioseks-connector
se le debe conceder permiso para suplantar al usuario de Kubernetes correspondiente con un ARN de IAM como nombre de usuario de Kubernetes. En los siguientes ejemplos, el ARN de IAM se asigna a un usuario de Kubernetes.
-
El usuario de IAM
john
de la cuenta de AWS111122223333
está asignado a un usuario de Kubernetes. Según las prácticas recomendadas de IAM, se recomienda conceder permisos a los roles en lugar de a los usuarios.arn:aws:iam::111122223333:user/john
-
El rol de IAM
admin
de la cuenta de AWS111122223333
está asignado a un usuario de Kubernetes:arn:aws:iam::111122223333:role/admin
El resultado es el ARN de un rol de IAM, en lugar del ARN de la sesión de AWS STS.
Para obtener instrucciones sobre cómo configurar ClusterRole
y ClusterRoleBinding
a fin de conceder a la cuenta de servicio de eks-connector
el privilegio para suplantar al usuario asignado, consulte Concesión de acceso para ver los recursos del clúster de Kubernetes en una consola de Amazon EKS. Asegúrese de que, en la plantilla, %IAM_ARN%
se sustituya con el ARN de IAM de la entidad principal de IAM de la AWS Management Console.
Error de la consola: […] está prohibido: el usuario […] no puede publicar el recurso […] en grupo de la API en el ámbito del clúster
Considere el siguiente problema. Amazon EKS Connector ha suplantado correctamente a la entidad principal de IAM solicitante de la AWS Management Console en el clúster de Kubernetes de destino. Sin embargo, la entidad principal suplantada no tiene permiso de RBAC en las operaciones de la API de Kubernetes.
Para resolver este problema, existen dos métodos para conceder permisos a usuarios adicionales. Si anteriormente instaló eks-connector mediante el gráfico de Helm, puede conceder acceso a los usuarios fácilmente ejecutando el siguiente comando. Sustituya userARN1
y userARN2
con una lista de los ARN de los roles de IAM para permitir el acceso a la visualización de los recursos de Kubernetes:
helm upgrade eks-connector oci://public.ecr.aws/eks-connector/eks-connector-chart \ --reuse-values \ --set 'authentication.allowedUserARNs={userARN1,userARN2}'
O bien, como administrador del clúster, otorgue el nivel adecuado de privilegios de RBAC a los usuarios individuales de Kubernetes. Para obtener más información y ejemplos, consulta Concesión de acceso para ver los recursos del clúster de Kubernetes en una consola de Amazon EKS.
Error de la consola: Amazon EKS no puede comunicarse con el servidor de la API del clúster de Kubernetes. El clúster debe estar en estado ACTIVE (ACTIVO) para que la conexión se establezca de forma correcta. Intente establecer la conexión en unos minutos.
Si el servicio Amazon EKS no puede comunicarse con Amazon EKS Connector en el clúster de destino, tal vez se deba a alguno de los siguientes motivos:
-
Amazon EKS Connector no funciona bien en el clúster de destino.
-
La conectividad es deficiente o la conexión se ha interrumpido entre el clúster de destino y la región de AWS.
Para resolver este problema, consulte los registros de Amazon EKS Connector. Si no aparece un error para Amazon EKS Connector, vuelva a intentar establecer la conexión después de unos minutos. Si experimenta regularmente una alta latencia o una conectividad intermitente para el clúster de destino, considere volver a registrar el clúster en una región de AWS que se encuentre en una ubicación más cercana.
Los Pods de Amazon EKS Connector se están bloqueando en bucle
Hay muchas razones que pueden provocar que un Pod de Amazon EKS Connector entre en el estado CrashLoopBackOff
. Es probable que este problema afecte al contenedor connector-init
. Compruebe el estado del Pod conector de Amazon EKS.
kubectl get pods -n eks-connector
Un ejemplo de salida sería el siguiente.
NAME READY STATUS RESTARTS AGE eks-connector-0 0/2 Init:CrashLoopBackOff 1 7s
Si el resultado es similar al resultado anterior, consulte Inspección de los registros de Amazon EKS Connector para solucionar el problema.
Error al iniciar eks-connector: InvalidActivation
Cuando inicia Amazon EKS Connector por primera vez, este registra un activationId
y un activationCode
en Amazon Web Services. El registro puede fallar, lo que podría provocar que el contenedor connector-init
se bloquee con un error similar al siguiente.
F1116 20:30:47.261469 1 init.go:43] failed to initiate eks-connector: InvalidActivation:
Para solucionar este problema, tenga en cuenta las siguientes causas y correcciones recomendadas:
-
Es posible que el registro haya fallado porque el
activationId
y elactivationCode
no están en el archivo de manifiesto. En este caso, asegúrese de que se devolvieron los valores correctos de la operaciónRegisterCluster
de la API y de que elactivationCode
se encuentra en el archivo de manifiesto. ElactivationCode
se agrega a los secretos de Kubernetes, por lo que debe estar codificado enbase64
. Para obtener más información, consulte Paso 1: registro del clúster. -
Es posible que el registro haya fallado porque la activación venció. Esto se debe a que, por razones de seguridad, debe activar Amazon EKS Connector en un plazo de tres días después del registro del clúster. Para resolver este problema, asegúrese de haber aplicado el manifiesto de Amazon EKS Connector al clúster de Kubernetes de destino antes de la fecha y la hora de vencimiento. Para confirmar la fecha de vencimiento de la activación, llame a la operación de la API
DescribeCluster
.aws eks describe-cluster --name my-cluster
En la siguiente respuesta de ejemplo, la fecha y la hora de vencimiento se registran como
2021-11-12T22:28:51.101000-08:00
.{ "cluster": { "name": "my-cluster", "arn": "arn:aws:eks:region:111122223333:cluster/my-cluster", "createdAt": "2021-11-09T22:28:51.449000-08:00", "status": "FAILED", "tags": { }, "connectorConfig": { "activationId": "00000000-0000-0000-0000-000000000000", "activationExpiry": "2021-11-12T22:28:51.101000-08:00", "provider": "OTHER", "roleArn": "arn:aws:iam::111122223333:role/my-connector-role" } } }
Si
activationExpiry
ya transcurrió, anule el registro del clúster y vuelva a registrarlo. Hacer esto genera una nueva activación.
El nodo del clúster no tiene conectividad de salida
Para que funcione correctamente, Amazon EKS Connector requiere conectividad de salida a varios puntos de conexión de AWS. No se puede conectar un clúster privado sin conectividad de salida a una región de AWS de destino. Para resolver este problema, debe agregar la conectividad de salida necesaria. Para obtener información sobre los requisitos de los conectores, consulte Consideraciones sobre Amazon EKS Connector.
Los Pods conectores de Amazon EKS están en estado ImagePullBackOff
Si ejecuta el comando get pods
y los Pods se encuentran en el estado ImagePullBackOff
, no pueden funcionar correctamente. Si los Pods de Amazon EKS Connector se encuentran en estado ImagePullBackOff
, no pueden funcionar correctamente. Compruebe el estado de los Pods de Amazon EKS Connector.
kubectl get pods -n eks-connector
Un ejemplo de salida sería el siguiente.
NAME READY STATUS RESTARTS AGE eks-connector-0 0/2 Init:ImagePullBackOff 0 4s
El archivo de manifiesto predeterminado de Amazon EKS Connector hace referencia a imágenes de Galería pública de Amazon ECR