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

使用Helm部署K8s应用时AWS ECR镜像拉取失败求助

解决AWS ECR镜像拉取失败(ImagePullBackOff)问题

问题场景

我有一个用于从AWS ECR拉取镜像并部署到原生Kubernetes集群的Helm Chart,部署后Pod出现ImagePullBackOff状态,无法启动容器。但同类服务使用相同的AWS ECR凭证已部署成功,需要排查并解决当前镜像拉取失败的问题。

相关配置

Chart.yml

apiVersion: v2
description: helm chart for microservice-registry
name: microservice-registry
type: application
version: 0.0.1

values.yaml

namespace:

replica: 1

labels:
 app: microservice-registry

imagePullSecrets: microservice-registry-secret

image:
 repository: 123456789.dkr.ecr.us-east-1.amazonaws.com/microservice-registry
 tag: 0.0.1
 imagePullPolicy: Always
 
strategy:
 rollingUpdate:
  maxSurge: 1
  maxUnavailable: 0
 type: RollingUpdate

service:
 containerPort: 8761
 port: 80
 type: NodePort
 nodePort: 30061

secrets:
 data: 
   .dockerconfigjson: 123456789
 type: kubernetes.io/dockerconfigjson

awscreds:
 data:
  SECRET_KEY: 123456789
  ACCESS_KEY: 123456789
 name: awscreds-registry
 region: us-east-1

cronjob:
 name: microservice-registry-job
 image: gtsopour/awscli-kubectl:latest

部署后状态

执行kubectl get pods结果:

root@node1:~# kubectl get pods
NAME                                               READY   STATUS             RESTARTS        AGE
microservice-registry-7c4654467c-q292p             0/1     ImagePullBackOff   0               17m
cicd                                               1/1     Running            1 (22d ago)     44d
grafana-f6d989bbf-hrr6c                            1/1     Running            1 (22d ago)     45d
ingress-nginx-controller-6b8bfd7f69-cwd2b          1/1     Running            1 (22d ago)     35d
nfs-subdir-external-provisioner-5f7dff96d9-rj75j   1/1     Running            39 (2d3h ago)   38d
zookeeper-0                                        1/1     Running            1 (22d ago)     38d
root@node1:~#

查看Pod日志:

root@node1:~# kubectl logs microservice-registry-7c4654467c-q292p
Error from server (BadRequest): container "microservice-registry" in pod "microservice-registry-7c4654467c-q292p" is waiting to start: trying and failing to pull image
root@node1:~#

已配置的AWS IAM策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        }
    ]
}

排查与解决步骤

由于同类服务能正常拉取镜像,说明核心AWS凭证和IAM策略无问题,重点排查当前Helm Chart的配置细节:

  1. 检查ImagePullSecret与Pod的关联

    • 执行kubectl describe pod microservice-registry-7c4654467c-q292p | grep ImagePullSecrets,确认输出包含microservice-registry-secret。
    • 如果未关联,检查Helm的Deployment模板是否正确引用了values.yaml中的imagePullSecrets,模板中需包含:
      spec:
        imagePullSecrets:
          - name: {{ .Values.imagePullSecrets }}
      
  2. 修复ImagePullSecret的内容

    • 当前values.yaml中secrets.data..dockerconfigjson的123456789是无效值,正确值应为base64编码的ECR认证配置。重新生成:
      1. 用AWS CLI获取认证令牌:aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789.dkr.ecr.us-east-1.amazonaws.com
      2. 对本地~/.docker/config.json内容进行base64编码:cat ~/.docker/config.json | base64 -w 0
      3. 将编码结果替换到values.yaml的对应字段,或直接用kubectl创建secret:
        kubectl create secret docker-registry microservice-registry-secret \
          --docker-server=123456789.dkr.ecr.us-east-1.amazonaws.com \
          --docker-username=AWS \
          --docker-password=$(aws ecr get-login-password --region us-east-1) \
          --namespace=<你的Pod命名空间>
        
  3. 确认镜像地址和标签的有效性

    • 登录AWS ECR控制台,检查microservice-registry仓库中是否存在0.0.1标签的镜像。
    • 在集群节点上手动测试拉取:docker pull 123456789.dkr.ecr.us-east-1.amazonaws.com/microservice-registry:0.0.1,根据错误提示直接定位问题(如镜像不存在、节点网络问题)。
  4. 检查命名空间一致性

    • 若values.yaml中namespace为空,确认Pod所在命名空间与microservice-registry-secret的命名空间一致,Kubernetes要求secret和Pod必须在同一命名空间才能被引用。
  5. 验证AWS凭证权限

    • 用当前配置的ACCESS_KEY和SECRET_KEY配置AWS CLI,执行aws ecr describe-images --repository-name microservice-registry --region us-east-1,确认能正常获取镜像信息,排除凭证失效的可能。

内容的提问来源于stack exchange,提问作者Peter Penzov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:05:01