Come posso risolvere i problemi di Amazon ECR con Amazon EKS?
Non riesco a estrarre immagini da Amazon Elastic Container Registry (Amazon ECR) quando utilizzo Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrizione
Non puoi estrarre immagini da Amazon ECR per uno dei seguenti motivi:
- Non puoi comunicare con gli endpoint Amazon ECR.
- Non disponi delle autorizzazioni appropriate nel ruolo di istanza del nodo di lavoro.
- Non hai creato endpoint VPC di interfaccia.
In base al caso d'uso, utilizza una o più delle seguenti sezioni di risoluzione.
Risoluzione
Risoluzione dei problemi di comunicazione tra i nodi worker e gli endpoint Amazon ECR
Se i tuoi nodi worker non riescono a comunicare con gli endpoint Amazon ECR, verrà visualizzato il seguente messaggio di errore:
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)
Per risolvere questo errore, verifica quanto segue:
- La sottorete per il tuo nodo di lavoro ha un percorso verso Internet. Controlla la tabella delle rotte associata alla tua sottorete.
- Il gruppo di sicurezza associato al nodo di lavoro consente il traffico Internet in uscita.
- La regola di ingresso e uscita per le liste di controllo degli accessi alla rete (ACL) consente l'accesso a Internet.
Aggiornamento del ruolo IAM dell'istanza dei nodi worker
Nell’esempio seguente, il ruolo AWS Identity and Access Management (IAM) dell’istanza del nodo worker non dispone dell'autorizzazione richiesta per estrarre immagini da Amazon ECR. Quindi, il pod Amazon EKS restituisce il seguente messaggio di errore:
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
Per risolvere questo errore, conferma che i nodi worker utilizzino la policy gestita AmazonEC2ContainerRegistryReadOnly di AWS Identity and Access Management (IAM). Oppure, aggiorna il profilo dell’istanza Amazon Elastic Compute Cloud (Amazon EC2) dei nodi worker con le seguenti autorizzazioni 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: è consigliabile utilizzare la policy AmazonEC2ContainerRegistryReadOnly. Non creare una policy duplicata.
Il ruolo IAM dell'istanza aggiornato consente ai nodi worker di accedere ad Amazon ECR e di estrarre immagini attraverso il kubelet. Il kubelet recupera e aggiorna periodicamente le credenziali Amazon ECR. Per maggiori dettagli, consulta la sezione Concepts sul sito Web di Kubernetes.
Verifica della correttezza delle policy del repository
Le policy del repository sono un sottoinsieme delle policy IAM che controllano l'accesso ai singoli repository Amazon ECR. In genere, le policy IAM vengono utilizzate per applicare le autorizzazioni per l'intero servizio Amazon ECR, ma possono anche controllare l'accesso a risorse specifiche.
- Apri la console Amazon ECR per il tuo account principale.
- Accedi alla regione AWS che contiene il repository ECR.
- Nel riquadro di navigazione, scegli Repository. Quindi, scegli il repository che desideri controllare.
- Nel riquadro di navigazione, scegli Autorizzazioni. Quindi, controlla se il repository dispone delle autorizzazioni corrette.
Questa policy di esempio consente a un utente IAM specifico di descrivere il repository e le immagini all'interno del repository:{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECR Repository Policy", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/MyUsername" }, "Action": [ "ecr:DescribeImages", "ecr:DescribeRepositories" ] } ] }
Verifica che le politiche del tuo repository consentano l'accesso se EKS si trova in un account AWS diverso
Se non hai accesso alle immagini dei contenitori in un altro account AWS, il kubelet fallisce con il seguente errore:
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
La seguente policy di esempio consente al ruolo IAM dell'istanza in un account AWS di descrivere ed estrarre immagini dei container da un repository ECR in un altro account 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: Usa l'ARN del ruolo IAM dell'istanza nella policy ECR, non il profilo di istanza ARN.
Crea endpoint VPC di interfaccia
Per estrarre immagini da Amazon ECR, devi configurare gli endpoint VPC di interfaccia. Consulta Creating the VPC Endpoints for Amazon ECS.
Verifica che il ruolo di esecuzione del tuo pod Fargate sia configurato correttamente
Se il pod Fargate CoreDNS è bloccato nello stato ImagePullBackOff quando recuperi immagini dai repository ospitati su Amazon, verrà visualizzato il seguente messaggio di errore:
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
Per risolvere questo errore, assicurati di avere impostato il ruolo di esecuzione del pod Fargate per utilizzare AmazonEKSFargatePodExecutionRolePolicy. Assicurati che al ruolo sia associata anche una policy di attendibilità simile alla seguente:
{ "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: sostituisci example_region con il nome della tua regione AWS. Sostituisci 1111222233334444 con il numero di account e example-cluster con il nome del tuo cluster.
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 7 mesi fa