You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从ECR部署镜像到EKS失败:Pod始终处于0/2未就绪状态

解决EKS Pod ImagePullBackOff(no basic auth credentials)问题

核心问题分析

Pod拉取ECR镜像时返回no basic auth credentials,说明节点无权限访问ECR仓库,或目标镜像未正确推送至ECR。以下分步骤排查解决:


1. 确认ECR镜像已正确推送

先验证目标镜像是否存在于ECR仓库:

aws ecr describe-images --repository-name docker-gs-ping --region us-east-1

如果返回结果中没有latest标签的镜像,重新执行推送流程:

  1. 登录ECR:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 549840312665.dkr.ecr.us-east-1.amazonaws.com
  1. 重新打标签并推送:
docker tag docker-gs-ping:latest 549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest
docker push 549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest

2. 验证EKS节点角色权限

你的CloudFormation已为节点角色附加AmazonEC2ContainerRegistryReadOnly策略,需确认:

  • 节点组正确关联该角色:
kubectl describe node <你的节点名称>

在输出的Annotations部分找到eks.amazonaws.com/role-arn,确认其值与my.eks.node.role的ARN一致。

  • 节点网络连通性:由于节点部署在私有子网,检查NAT网关是否正常运行,执行以下命令测试:
kubectl run -it --rm test-pod --image=busybox -- wget --spider https://549840312665.dkr.ecr.us-east-1.amazonaws.com

返回Connecting to ... succeeded则说明网络无问题。


3. 创建ImagePullSecret(角色权限失效时的备用方案)

若节点角色权限未生效,手动创建ECR凭证的ImagePullSecret:

  1. 生成Secret:
kubectl create secret docker-registry ecr-secret \
  --docker-server=549840312665.dkr.ecr.us-east-1.amazonaws.com \
  --docker-username=AWS \
  --docker-password=$(aws ecr get-login-password --region us-east-1)
  1. 修改Deployment.yaml,添加imagePullSecrets字段:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloworld
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: helloworld
  template:
    metadata:
      labels:
        app: helloworld
    spec:
      imagePullSecrets:
        - name: ecr-secret
      containers:
        - name: new-container
          image: 549840312665.dkr.ecr.us-east-1.amazonaws.com/docker-gs-ping:latest
          ports:
            - containerPort: 80
  1. 重新部署:
kubectl apply -f Deployment.yaml

4. 检查安全组与网络ACL

  • 节点安全组:允许出站HTTPS(443)流量到ECR服务(可临时放开所有出站443流量测试)。
  • 私有子网网络ACL:允许出站443流量;NAT网关所在公有子网的网络ACL需允许入站/出站443流量。

额外注意点

本地容器运行时映射的是8080:8080,但Deployment中设置containerPort: 80,请确保镜像内的应用确实监听80端口,否则Pod启动后可能出现健康检查失败问题。

内容的提问来源于stack exchange,提问作者Vishwa Ratna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:50:37