EKS节点无法从ECR拉取Docker镜像:”no basic auth credentials”

57次阅读
没有评论

问题描述

使用eksctl工具创建了一个包含5个节点的EKS集群。他的应用程序的Docker镜像存储在同一区域的ECR注册表中。他部署了Kubernetes集群,过去的6周一切都很顺利。

今天早上,他发现有3个Pod处于ErrImagePull状态。通过使用kubectl describe pod <pod name>命令,他发现了以下错误:

Failed to pull image "<ECR REGISTRY>/<IMAGE>": rpc error: code = Unknown desc = Error response from daemon: Get <ECR REGISTRY>/<IMAGE>: no basic auth credentials

他对EKS和ECR的理解是,他不需要一个pull secret(对于其他正在运行的Pod,他也没有使用过),所以他猜测可能是某个进程或Docker镜像在该节点上出现了问题,但是他找不到任何相关的文档。

更新:我忘记了这个问题。当我创建原始节点组时,我忘记了包含--ssh-access标志,这导致我无法进入节点并查看是否有Kubernetes进程失败。我从未找到实际的解决方案;我只是给有问题的节点添加了一个污点,创建了一个新的节点,然后继续工作。我仍在努力找时间启动一个带有ssh访问权限的新节点组。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

请确保附加到EKS集群中的EC2实例的IAM角色具有ECR的IAM策略。如果没有,请更新IAM角色。
参考链接:https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_EKS.html#:~:targetText=The%20Amazon%20EKS%20worker%20node,policy%20permissions%20for%20Amazon%20ECR.&targetText=When%20referencing%20an%20image%20from,tag%20naming%20for%20the%20image.

方案2

如果IAM角色已经具有ECR的IAM策略,请尝试重新创建节点组并确保节点组具有ssh访问权限。
如果IAM角色已经具有ECR的IAM策略,请尝试重新创建节点组并确保节点组具有ssh访问权限。这将允许您登录到节点并检查是否有Kubernetes进程失败。
以下是重新创建节点组的步骤:
1. 使用eksctl工具删除现有的节点组。
2. 创建一个新的节点组,并确保使用--ssh-access标志。
3. 等待新的节点组创建完成。
4. 使用kubectl命令检查新的节点组是否已成功加入集群。
5. 使用kubectl命令检查新的节点组上是否有Kubernetes进程失败的情况。

请注意,重新创建节点组可能会导致一些服务中断,请确保在执行此操作之前做好备份和计划。

以上是解决此问题的两种可能方案。请根据您的具体情况选择适合您的方案。

希望对您有所帮助!如果您有任何其他问题,请随时提问。

正文完