Comment puis-je dépanner les problèmes d'Amazon ECR avec Amazon EKS ?
Je ne parviens pas à extraire des images d'Amazon Elastic Container Registry (Amazon ECR) lorsque j'utilise Amazon Elastic Kubernetes Service (Amazon EKS).
Brève description
Vous ne pouvez pas extraire des images d’Amazon ECR pour l'une des raisons suivantes :
- Vous ne pouvez pas communiquer avec les points de terminaison Amazon ECR.
- Vous ne disposez pas des autorisations appropriées dans le rôle d'instance de nœud de votre composant master.
- Vous n'avez pas créé de points de terminaison d'interface d’un VPC.
Pour résoudre ces problèmes, utilisez une ou plusieurs des sections de résolution suivantes, selon votre cas d'utilisation.
Résolution
Résolvez les problèmes de communication entre les composants master et les points de terminaison Amazon ECR
Si vos composants master ne peuvent pas communiquer avec les points de terminaison Amazon ECR, vous recevrez le message d'erreur suivant :
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)
Pour résoudre cette erreur, confirmez les points suivants :
- Le sous-réseau de votre composant master possède une route vers Internet. Vérifiez la table de routage associée à votre sous-réseau.
- Le groupe de sécurité associé à votre composant master autorise le trafic Internet sortant.
- La stratégie d'entrée et de sortie de vos listes de contrôle d'accès réseau (ACL) autorise l'accès à Internet.
Mettez à jour le rôle IAM d'instance de vos composants master
Supposez que l'instance AWS Identity and Access Management (IAM) de votre composant master ne dispose pas de l'autorisation requise pour extraire des images d'Amazon ECR. Le message d'erreur suivant s'affiche alors à partir de votre pod Amazon EKS :
Warning Failed 14s (x2 over 28s) kubelet, ip-000-000-000-000.us-west-2.compute.internalFailed 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 credentials Warning 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
Pour résoudre cette erreur, vérifiez que vos composants master utilisent la politique gérée d'AmazonEC2ContainerRegistryReadOnly AWS Identity and Access Management (IAM). Vous pouvez également mettre à jour le profil d'instance Amazon Elastic Compute Cloud (Amazon EC2) de vos composants master avec les autorisations IAM suivantes :
"ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:DescribeImages", "ecr:BatchGetImage", "ecr:GetLifecyclePolicy", "ecr:GetLifecyclePolicyPreview", "ecr:ListTagsForResource", "ecr:DescribeImageScanFindings"
**Remarque :**Il est recommandé d'utiliser la stratégie AmazonEC2ContainerRegistryReadOnly au lieu de créer une politique dupliquée.
Le rôle IAM de l'instance mis à jour donne à vos composants master l'autorisation d'accéder à Amazon ECR et d'extraire des images via le kubelet. Le kubelet est chargé de récupérer et d'actualiser régulièrement les informations d'identification Amazon ECR. Pour plus d'informations, consultez les Images de Kubernetes (sur le site Web de Kubernetes).
Vérifiez que les stratégies de votre référentiel sont correctes
Les politiques de référentiel sont un sous-ensemble des politiques IAM qui contrôlent l'accès aux référentiels Amazon ECR individuels. Les stratégies IAM sont généralement utilisées pour appliquer des autorisations à l'ensemble du service Amazon ECR, mais peuvent également contrôler l'accès à des ressources spécifiques.
1.Ouvrez la console Amazon ECR pour votre compte principal.
2.Accédez à la Région AWS qui contient le référentiel ECR.
3.Dans le volet de navigation, choisissez Référentiels, puis choisissez le référentiel que vous souhaitez vérifier.
4.Dans le volet de navigation, choisissez Autorisations, puis vérifiez si votre référentiel dispose des autorisations appropriées.
Cet exemple de stratégie permet à un utilisateur IAM spécifique de décrire le référentiel et les images qu'il contient :
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECR Repository Policy", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/MyUsername" }, "Action": [ "ecr:DescribeImages", "ecr:DescribeRepositories" ] } ] }
Vérifiez que vos stratégies de référentiel autorisent l'accès si votre EKS se trouve dans un autre compte AWS
Si vous n'avez pas accès aux images de conteneur d'un autre compte AWS, le kubelet renvoie l'erreur suivante :
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
L'exemple de stratégie suivant permet au rôle IAM d'instance d'un compte AWS de décrire et d'extraire des images de conteneur depuis un référentiel ECR d'un autre compte 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": "*" } ] }
**Remarque :**Utilisez l'ARN du rôle IAM de l'instance dans la stratégie ECR, et non l'ARN du profil d'instance.
Créez des points de terminaison d'interface d’un VPC
Pour extraire des images depuis Amazon ECR, vous devez configurer les points de terminaison d’un VPC d’interface . Consultez la section Créer des points de terminaison d’un VPC pour Amazon ECS de la section Points de terminaison d’un VPC de l'interface Amazon ECR (AWS PrivateLink).
Vérifiez que votre rôle d'exécution du pod Fargate est correctement configuré
Si votre pod Fargate CoreDNS est bloqué dans l'état ImagePullbackoff lorsque vous récupérez des images depuis des référentiels hébergés par Amazon, le message d'erreur suivant s'affiche :
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
Pour résoudre cette erreur, veillez à configurer le rôle d'exécution du pod Fargate de manière à utiliser AmazonEKSFargatePodExecutionRolePolicy. Assurez-vous qu'une stratégie de confiance similaire à la suivante est également associée au rôle :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:eks:example-region:1111222233334444:fargateprofile/example-cluster/*" } }, "Principal": { "Service": "eks-fargate-pods.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Remarque :
Veillez à remplacer ce qui suit dans la stratégie :
- example-region par le nom de votre Région AWS
- 1111222233334444 par le numéro de compte
- example-cluster par le nom de votre cluster
Contenus pertinents
- demandé il y a un anlg...
- demandé il y a 10 moislg...
- demandé il y a un anlg...
- demandé il y a un anlg...
- demandé il y a 5 moislg...
- Comment autoriser les tâches Amazon ECS à extraire des images d'un référentiel d'images Amazon ECR ?AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 10 mois