ArgoCD Image Updater连接AWS ECR失败:凭证脚本输出无效求助
解决ArgoCD Image Updater读取ECR镜像更新的凭证错误问题
问题核心
日志反复报错 Could not set registry endpoint credentials: invalid script output, must be single line with syntax <username>:<password>,根源在于ECR登录脚本存在两个关键问题:
- AWS命令被换行拆分,导致语法错误,无法正确获取凭证token
- 脚本输出格式不符合ArgoCD Image Updater要求的单行
<username>:<password>规范
解决方案
1. 修复ECR登录脚本
修改authScript ConfigMap中的ecr-login.sh,确保命令完整且输出格式合规:
ecr-login.sh: | #!/bin/sh aws ecr --region "XXXXXXXX" get-authorization-token --output text --query 'authorizationData[].authorizationToken' | base64 -d
说明:
- 将AWS命令合并为一行,避免换行导致的语法解析错误
base64 -d解码ECR返回的授权token,解码后输出为AWS:<token-string>,完全匹配<username>:<password>的格式要求
2. 确保脚本具备执行权限
修改ArgoCD Image Updater的Deployment配置,挂载auth-scripts卷时设置默认可执行权限:
volumeMounts: - name: auth-scripts mountPath: /scripts defaultMode: 0755
或通过init容器主动设置权限:
initContainers: - name: set-script-permissions image: busybox:latest command: ['chmod', '+x', '/scripts/ecr-login.sh'] volumeMounts: - name: auth-scripts mountPath: /scripts
3. 验证脚本输出
进入ArgoCD Image Updater的Pod,手动执行脚本检查输出格式:
kubectl exec -n argocd <argocd-image-updater-pod-name> -- /scripts/ecr-login.sh
正常输出应为单行的AWS:<long-token-string>格式。
4. 确认Pod具备AWS权限
确保ArgoCD Image Updater的Pod有权限调用ecr:GetAuthorizationToken API:
- 推荐使用IAM角色绑定(IRSA),为Pod关联具备对应权限的IAM角色
- 若使用AWS凭证文件,需将凭证挂载到Pod的
~/.aws/目录,并配置AWS_REGION环境变量
5. 重启ArgoCD Image Updater
修改配置后,重启Pod使变更生效:
kubectl rollout restart deployment argocd-image-updater -n argocd
内容的提问来源于stack exchange,提问作者Gabe
相关产品推荐
相关产品推荐

