Wie behebe ich Amazon ECR-Probleme mit Amazon EKS?
Ich kann keine Images aus Amazon Elastic Container Registry (Amazon ECR) abrufen, wenn ich Amazon Elastic Kubernetes Service (Amazon EKS) verwende.
Kurzbeschreibung
Sie können aus einem der folgenden Gründe keine Bilder aus Amazon ECR abrufen:
- Sie können nicht mit Amazon ECR-Endpunkten kommunizieren.
- Sie verfügen nicht über die entsprechenden Berechtigungen in der Knoten-Instance-Rolle Ihres Worker-Knotens.
- Sie haben keine Schnittstellen-VPC-Endpunkte erstellt.
Verwenden Sie je nach Anwendungsfall einen oder mehrere der folgenden Behebungsabschnitte.
Behebung
Beheben von Problemen bei der Kommunikation zwischen Worker-Knoten und Amazon ECR-Endpunkten
Wenn Ihre Worker-Knoten nicht mit den Amazon ECR-Endpunkten kommunizieren können, sehen Sie diese Fehlermeldung:
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)
Überprüfen Sie Folgendes, um diesen Fehler zu beheben:
- Das Subnetz für Ihren Worker-Knoten hat eine Route zum Internet. Überprüfen Sie die Ihrem Subnetz zugeordnete Routing-Tabelle.
- Die Ihrem Worker-Knoten zugeordnete Sicherheitsgruppe erlaubt ausgehenden Internet-Datenverkehr.
- Die Regel für Eingangs- und Ausgangsverkehr für Ihre Netzwerk-Zugriffssteuerungslisten (ACLs) ermöglicht den Zugriff auf das Internet.
Aktualisieren der Instance-IAM-Rolle Ihrer Worker-Knoten
Im folgenden Beispiel verfügt die Rolle der AWS Identity and Access Management(IAM)-Instance Ihres Worker-Knotens nicht über die erforderliche Berechtigung, um Images aus Amazon ECR abzurufen. In diesem Fall erhalten Sie die folgende Fehlermeldung von Ihrem Amazon EKS-Pod:
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
Um diesen Fehler zu beheben, stellen Sie sicher, dass Ihre Worker-Knoten die verwaltete AWS Identity and Access Management(IAM)-Richtlinie AmazonEC2ContainerRegistryReadOnly verwenden. Oder aktualisieren Sie das Amazon Elastic Compute Cloud (Amazon EC2)-Instance-Profil Ihrer Worker-Knoten mit den folgenden IAM-Berechtigungen:
"ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:DescribeImages", "ecr:BatchGetImage", "ecr:GetLifecyclePolicy", "ecr:GetLifecyclePolicyPreview", "ecr:ListTagsForResource", "ecr:DescribeImageScanFindings"
**Wichtig:**Es hat sich bewährt, die Richtlinie AmazonEC2ContainerRegistryReadOnly zu verwenden. Erstellen Sie keine doppelte Richtlinie.
Die aktualisierte Instance-IAM-Rolle gewährt Ihren Worker-Knoten die Berechtigung, auf Amazon ECR zuzugreifen und Images über das Kubelet abzurufen. Das Kubelet ruft Amazon ECR-Anmeldeinformationen ab und aktualisiert sie regelmäßig. Weitere Informationen finden Sie unter Images auf der Kubernetes-Website.
Überprüfen, ob Ihre Repository-Richtlinien korrekt sind
Repository-Richtlinien sind eine Teilmenge der IAM-Richtlinien, die den Zugriff auf einzelne Amazon ECR-Repositorys regeln. IAM-Richtlinien gelten in der Regel für den gesamten Amazon ECR-Service, sie können aber auch den Zugriff auf bestimmte Ressourcen steuern.
- Öffnen Sie die Amazon ECR-Konsole für Ihr primäres Konto.
- Navigieren Sie zu der AWS-Region, die das ECR-Repository enthält.
- Wählen Sie im Navigationsbereich Repositorys aus. Wählen Sie dann das Repository aus, das Sie überprüfen möchten.
- Wählen Sie im Navigationsbereich die Option Berechtigungen aus. Überprüfen Sie dann, ob Ihr Repository die richtigen Berechtigungen hat.
Diese Beispielrichtlinie ermöglicht es einem bestimmten IAM-Benutzer, das Repository und die Images im Repository zu beschreiben:{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECR Repository Policy", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/MyUsername" }, "Action": [ "ecr:DescribeImages", "ecr:DescribeRepositories" ] } ] }
Überprüfen, ob Ihre Repository-Richtlinien den Zugriff zulassen, wenn sich Ihr EKS in einem anderen AWS-Konto befindet
Wenn Sie in einem anderen AWS-Konto keinen Zugriff auf Container-Images haben, schlägt das Kubelet fehl und folgender Fehler wird angezeigt:
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
Die folgende Beispielrichtlinie ermöglicht es der Instance-IAM-Rolle in einem AWS-Konto, Container-Images zu beschreiben und aus einem ECR-Repository in einem anderen AWS-Konto abzurufen:
{ "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": "*" } ] }
Hinweis: Verwenden Sie den ARN der Instance-IAM-Rolle in der ECR-Richtlinie, nicht den ARN des Instance-Profils.
Schnittstellen-VPC-Endpunkte erstellen
Um Images aus Amazon ECR abzurufen, müssen Sie die Schnittstellen-VPC-Endpunkte konfigurieren. Siehe Erstellen der VPC-Endpunkte für Amazon ECS.
Vergewissern Sie sich, dass Ihre Fargate-Pod-Ausführungsrolle korrekt konfiguriert ist
Wenn Ihr Fargate CoreDNS-Pod beim Abrufen von Images aus von Amazon gehosteten Repositorys im ImagePullbackOff-Status hängen bleibt, sehen Sie diese Fehlermeldung:
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
Um diesen Fehler zu beheben, stellen Sie sicher, dass Sie die Fargate-Pod-Ausführungsrolle so einrichten, dass sie die AmazonEKSFargatePodExecutionRolePolicy verwendet. Stellen Sie sicher, dass der Rolle eine Vertrauensrichtlinie zugeordnet ist, die der folgenden ähnelt:
{ "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": "*" } ] }
Hinweis: Ersetzen Sie example-region durch den Namen Ihrer AWS-Region. Ersetzen Sie 1111222233334444 durch die Kontonummer und example-cluster durch den Namen Ihres Clusters.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 7 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr