¿Cómo soluciono los problemas de Amazon ECR con Amazon EKS?
No puedo extraer imágenes de Amazon Elastic Container Registry (Amazon ECR) cuando utilizo Amazon Elastic Kubernetes Service (Amazon EKS).
Descripción corta
No puede extraer imágenes de Amazon ECR por uno de los siguientes motivos:
- No puede comunicarse con los puntos de enlace de Amazon ECR.
- No tienes los permisos adecuados en el rol de instancia de nodo de su nodo de trabajo.
- No ha creado puntos de enlace de VPC de interfaz.
Según su caso de uso, utilice una o más de las siguientes secciones de resolución.
Resolución
Solución de problemas de comunicación entre los nodos de trabajo y los puntos de enlace de Amazon ECR
Si sus nodos de trabajo no pueden comunicarse con los puntos de enlace de Amazon ECR, se mostrará el siguiente mensaje de error:
Failed to pull image "ACCOUNT.dkr.ecr.REGION.amazonaws.com/imagename:tag": rpc error: code = Unknown desc = Error response from daemon: Get https://ACCOUNT.dkr.ecr.REGION.amazonaws.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Para solucionar este error, confirme lo siguiente:
- La subred de su nodo de trabajo tiene una ruta a Internet. Compruebe la tabla de rutas asociadas a su subred.
- El grupo de seguridad asociado con su nodo de trabajo permite el tráfico de Internet saliente.
- Las reglas de entrada y salida de las listas de control de acceso (ACLs) a su red permite el acceso a Internet.
Actualización del rol de IAM de instancias de sus nodos de trabajo
En el siguiente ejemplo, el rol de AWS Identity and Access Management (IAM) de la instancia de su nodo de trabajo no cuenta con los permisos necesarios para extraer imágenes de Amazon ECR. A continuación, aparece el siguiente error en su pod de Amazon EKS:
Warning Failed 14s (x2 over 28s) kubelet, ip-000-000-000-000.us-west-2.compute.internal Failed to pull image "ACCOUNT.dkr.ecr.REGION.amazonaws.com/imagename:tag": rpc error: code = Unknown desc = Error response from daemon: Get https://ACCOUNT.dkr.ecr.REGION.amazonaws.com/v2/imagename/manifests/tag: no basic auth credentialsWarning Failed 14s (x2 over 28s) kubelet, ip-000-000-000-000.us-west-2.compute.internal Error: ErrImagePull Normal BackOff 2s (x2 over 28s) kubelet, ip-000-000-000-000.us-west-2.compute.internal Back-off pulling image "ACCOUNT.dkr.ecr.REGION.amazonaws.com/imagename:tag" Warning Failed 2s (x2 over 28s) kubelet, ip-000-000-000-000.us-west-2.compute.internal Error: ImagePullBackOff
Para resolver este error, confirme que sus nodos de trabajo utilizan la política gestionada de AWS Identity and Access Management (IAM) AmazonEC2ContainerRegistryReadOnly. O bien, actualice el perfil de instancia de Amazon Elastic Compute Cloud (Amazon EC2) de sus nodos de trabajo con los siguientes permisos de IAM:
"ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:DescribeImages", "ecr:BatchGetImage", "ecr:GetLifecyclePolicy", "ecr:GetLifecyclePolicyPreview", "ecr:ListTagsForResource", "ecr:DescribeImageScanFindings"
Importante: Se recomienda utilizar la política AmazonEC2ContainerRegistryReadOnly. No cree una política duplicada.
El rol de IAM de instancias actualizado otorga a sus nodos de trabajo el permiso para acceder a Amazon ECR y extraer imágenes a través del kubelet. El kubelet obtiene y actualiza periódicamente las credenciales de Amazon ECR. Para obtener más información, consulte Images en el sitio web de Kubernetes.
Cómo confirmar que las políticas de su repositorio son correctas
Las políticas de repositorio son un subconjunto de políticas de IAM que controlan el acceso a los repositorios individuales de Amazon ECR. Por lo general, las políticas de IAM aplican permisos a todo el servicio Amazon ECR, pero también pueden controlar el acceso a recursos específicos.
- Abra la consola de Amazon ECR de su cuenta principal.
- Navegue hasta la región de AWS que contenga el repositorio de ECR.
- En el panel de navegación, elija Repositorios. A continuación, seleccione el repositorio que quiera comprobar.
- En el panel de navegación, Seleccione Permisos. Luego, compruebe si su repositorio tiene los permisos correctos.
Este ejemplo de política permite a un usuario específico de IAM describir el repositorio y las imágenes que contiene:{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECR Repository Policy", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/MyUsername" }, "Action": [ "ecr:DescribeImages", "ecr:DescribeRepositories" ] } ] }
Confirme que sus políticas de repositorio permiten el acceso si su EKS se encuentra en una cuenta diferente de AWS
Si no tiene acceso a las imágenes del contenedor en otra cuenta de AWS, entonces el kubelet presentará el siguiente error:
Failed to pull image "cross-aws-account-id:.dkr.ecr.REGION.amazonaws.com/repo-name:image-tag": rpc error: code = Unknown desc = Error response from daemon: pull access denied for arn:aws:ecr:REGION:cross-aws-account-id:repository/repo-name, repository does not exist or may require 'docker login': denied: User: arn:aws:sts::<aws-account-containing-eks-cluster>:assumed-role/<node-instance-role-for-worker-node is not authorized to perform: ecr:BatchGetImage on resource: arn:aws:ecr:REGION:cross-aws-account-id:repository/repo-name
El siguiente ejemplo de política permite que la función de IAM de instancias de una cuenta de AWS describa y extraiga imágenes de contenedores de un repositorio de ECR en otra cuenta de AWS:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/eksctl-cross-account-ecr-access-n-NodeInstanceRole" }, "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:DescribeImages", "ecr:BatchGetImage", "ecr:GetLifecyclePolicy", "ecr:GetLifecyclePolicyPreview", "ecr:ListTagsForResource", "ecr:DescribeImageScanFindings" ], "Resource": "*" } ] }
Nota: Utilice el ARN del rol de IAM de la instancia en la política de ECR, no el ARN del perfil de instancia.
Crear puntos de enlace de VPC de interfaz
Para extraer imágenes desde Amazon ECR, debe configurar los puntos de enlace de VPC de la interfaz. Consulte Creación de puntos de enlace de la VPC para Amazon ECS.
Cómo confirmar que su rol de ejecución del pod de Fargate esté configurado correctamente
Si su pod de Fargate CoreDNS está atascado en el estado ImagePullbackOff, al recuperar imágenes de los repositorios alojados en Amazon, se mostrará el siguiente mensaje de error:
Warning Failed 27s (x2 over 40s) kubelet Failed to pull image "151284513677.dkr.ecr.eu-central-1.amazonaws.com/coredns:latest ": rpc error: code = Unknown desc = failed to pull and unpack image "151284513677.dkr.ecr.eu-central-1.amazonaws.com/coredns:latest ": failed to resolve reference "151284513677.dkr.ecr.eu-central-1.amazonaws.com/coredns:latest ": pulling from host 151284513677.dkr.ecr.eu-central-1.amazonaws.com failed with status code [manifests latest]: 401 Unauthorized
Para solucionar este error, asegúrese de configurar el rol de ejecución del pod de Fargate para utilizar AmazonEKSFargatePodExecutionRolePolicy. Asegúrese de que al rol se adjunte una política de confianza similar a la siguiente:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/eksctl-cross-account-ecr-access-n-NodeInstanceRole" }, "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:DescribeImages", "ecr:BatchGetImage", "ecr:GetLifecyclePolicy", "ecr:GetLifecyclePolicyPreview", "ecr:ListTagsForResource", "ecr:DescribeImageScanFindings" ], "Resource": "*" } ] }
Nota: Sustituya example-region por el nombre de su región de AWS. Sustituya 1111222233334444 por el número de cuenta y example-cluster por el nombre de su clúster.
Contenido relevante
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 7 meses