Como soluciono problemas do Amazon ECR com o Amazon EKS?
Não consigo extrair imagens do Amazon Elastic Container Registry (Amazon ECR) quando uso o Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrição
Você não consegue extrair imagens do Amazon ECR por um dos seguintes motivos:
- Não é possível se comunicar com os endpoints do Amazon ECR.
- Não há permissões apropriadas no perfil de instância de nó do seu nó de processamento.
- Os endpoints da VPC de interface não foram criados.
Com base no seu caso de uso, use uma ou mais das seções de resolução a seguir.
Resolução
Solucionar problemas de comunicação entre os nós de processamento e endpoints do Amazon ECR
Se seus nós de processamento não conseguirem se comunicar com os endpoints do Amazon ECR, você verá esta mensagem de erro:
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 resolver esse erro, confirme o seguinte:
- A sub-rede do seu nó de processamento tem uma rota para a internet. Verifique a tabela de rotas associada à sua sub-rede.
- O grupo de segurança associado ao seu nó de processamento permite o tráfego de saída da Internet.
- A regra de entrada e saída das suas listas de controle de acesso (ACLs) à rede permite o acesso à internet.
Atualize o perfil do IAM da instância dos seus nós de processamento
No exemplo a seguir, o perfil do AWS Identity and Access Management (IAM) da instância do seu nó de processamento não tem a permissão necessária para extrair imagens do Amazon ECR. Nesse caso, será exibido o seguinte erro do seu pod do 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 esse erro, confirme se seus nós de processamento usam a política gerenciada AmazonEC2ContainerRegistryReadOnly do AWS Identity and Access Management (IAM). Ou atualize o perfil de instância do Amazon Elastic Compute Cloud (Amazon EC2) dos seus nós de trabalho com as seguintes permissões do 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: é uma prática recomendada usar a política AmazonEC2ContainerRegistryReadOnly. Não crie uma política duplicada.
O perfil do IAM da instância atualizada dá aos nós de processamento a permissão de acessar o Amazon ECR e extrair imagens por meio do kubelet. O kubelet busca e atualiza periodicamente as credenciais do Amazon ECR. Para obter mais informações, consulte Images no site do Kubernetes.
Confirmar se as políticas do seu repositório estão corretas
Políticas de repositório são um subconjunto das políticas do IAM que controlam o acesso a repositórios individuais do Amazon ECR. As políticas do IAM geralmente aplicam permissões para todo o serviço Amazon ECR, mas também podem controlar o acesso a recursos específicos.
- Abra o console do Amazon ECR para sua conta principal.
- Navegue até a região da AWS que contém o repositório do ECR.
- No painel de navegação, escolha Repositórios. Em seguida, escolha o repositório que você deseja verificar.
- No painel de navegação, escolha Permissões. Em seguida, verifique se seu repositório tem as permissões corretas.
Esse exemplo de política permite que um usuário específico do IAM descreva o repositório e as imagens dentro dele:{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECR Repository Policy", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/MyUsername" }, "Action": [ "ecr:DescribeImages", "ecr:DescribeRepositories" ] } ] }
Confirmar se as suas políticas de repositório permitem acesso caso o seu EKS esteja em uma conta diferente da AWS
Se você não tiver acesso às imagens de contêiner em outra conta da AWS, o kubelet falhará com o seguinte erro:
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
O exemplo de política a seguir permite que o perfil do IAM da instância em uma conta da AWS descreva e extraia imagens de contêiner de um repositório do ECR em outra conta da 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": "*" } ] }
Observação: use o ARN do perfil do IAM da instância na política de ECR, e não o ARN do perfil de instância.
Criar endpoints de VPC de interface
Para extrair imagens do Amazon ECR, você deve configurar endpoints de VPC de interface. Consulte Criação de endpoints VPC para o Amazon ECS.
Confirmar se o seu perfil de execução do pod do Fargate está configurado corretamente
Se o seu pod CoreDNS do Fargate estiver preso no estado ImagePullBackOff quando você recuperar imagens dos repositórios hospedados na Amazon, você receberá a seguinte mensagem de erro:
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 esse erro, certifique-se de configurar o perfil de execução do pod do Fargate para usar AmazonEKSFargatePodExecutionRolePolicy. Certifique-se de que uma política de confiança semelhante à seguinte também esteja anexada ao perfil:
{ "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": "*" } ] }
Observação: substitua example_region pelo nome da sua região da AWS. Substitua 1111222233334444 pelo número da conta e example-cluster pelo nome do seu cluster.
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 6 meses
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 9 meses