Tekton流水线推送AWS ECR镜像报401 Unauthorized错误如何解决
排查解决步骤
你通过Deployment验证可正常拉取ECR镜像,仅能证明kubelet拉取镜像时所用的imagePullSecrets有效。Tekton的镜像推送逻辑是在任务容器内部执行,不会直接复用kubelet的镜像拉取凭证,二者属于完全独立的凭证链路,可按以下顺序排查:
- 检查流水线绑定的ServiceAccount配置
你需要将ECR凭证的dockerconfigjson类型Secret关联到Tekton运行PipelineRun所用的ServiceAccount上,同时添加指定仓库地址的Tekton专用注解,示例配置如下:
同时需要确保你的PipelineRun显式指定apiVersion: v1 kind: ServiceAccount metadata: name: tekton-build-sa annotations: # 替换为你的ECR仓库地址前缀 tekton.dev/docker-0: https://12345678910.dkr.ecr.us-east-1.amazonaws.com secrets: # 替换为你的ECR凭证Secret名称 - name: ecr-docker-configserviceAccountName: tekton-build-sa,不要使用默认ServiceAccount。 - 验证IAM权限范围
你当前仅验证了镜像拉取权限,推送ECR需要额外的写权限,确认你的IAM身份(用户/角色)绑定的策略包含以下必要权限:ecr:PutImage、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload、ecr:BatchCheckLayerAvailability - 确认ECR仓库已预先创建
AWS ECR不支持推送时自动创建仓库,你需要提前在对应区域创建名称为test-api的镜像仓库,AWS会对不存在的仓库请求返回401未授权错误,而非明确提示仓库不存在。 - 排查凭证有效期问题
ECR的登录凭证默认有效期仅为12小时,如果你是手动生成的Secret,需要定期刷新,建议部署集群内的ECR凭证自动刷新组件避免过期。
内容的提问来源于stack exchange,提问作者Pavan Elthepu
相关产品推荐
相关产品推荐

