步骤1 sudo $(aws ecr get-login --no-include-email --region xx-xxxx-x)
步骤2 curl -LSs https://github.com/fermayo/ecr-k8s-secret/raw/master/gen-secret.sh | bash -
步骤3 kubectl describe secret aws-ecr-credentials
Name: aws-ecr-credentials
Namespace: default
Labels: <none>
Annotations: <none>
Type: kubernetes.io/dockerconfigjson
Data
.dockerconfigjson: 32 bytes
步骤4 kubectl describe pod x
警告失败5s kubelet,ip-10-46-250-151无法提取图像“ my-account.dkr.ecr.us-east-1.amazonaws.com/my-image:latest”:rpc错误:代码=未知desc =来自守护程序的错误响应:获取https://my-account.dkr.ecr.us-east-1.amazonaws.com/my-image/latest:没有基本身份验证凭据
为什么吊舱不能下拉图像?
答案 0 :(得分:2)
Created a script that pulls the token from AWS-ECR
ACCOUNT=xxxxxxxxxxxx
REGION=xx-xxxx-x
SECRET_NAME=${REGION}-ecr-registry
EMAIL=email@email.com
#
#
TOKEN=`aws ecr --region=$REGION get-authorization-token --output text --query
authorizationData[].authorizationToken | base64 -d | cut -d: -f2`
#
# Create or replace registry secret
#
kubectl delete secret --ignore-not-found $SECRET_NAME
kubectl create secret docker-registry $SECRET_NAME \
--docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \
--docker-username=AWS \
--docker-password="${TOKEN}" \
--docker-email="${EMAIL}"
并创建了一个Linux cronjob来每10小时运行一次
答案 1 :(得分:1)
您的部署清单将需要指定容器注册表凭据处于秘密状态。这就像添加imagePullSecrets
一样简单:
apiVersion: v1
kind: Deployment
metadata:
name: deployment-name
spec:
containers:
- image: your-registry/image/name:tag
imagePullSecrets:
- name: secret-name
答案 2 :(得分:0)
我也为此大吃一惊,意识到这是一个地区不匹配的情况。当图片位于us-west-2中时,我是从us-east-2获取令牌的。
来自https://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html#error-403的片段
有时,即使您已使用aws ecr get-login命令成功通过Docker身份验证,也可能会收到HTTP 403(禁止)错误,或错误消息来自docker push命令的基本身份验证凭据。以下是此问题的一些已知原因:
您已对其他区域进行身份验证身份验证请求绑定到特定区域,并且不能跨区域使用。例如,如果您从美国西部(俄勒冈州)获得授权令牌,则不能使用它对美国东部(弗吉尼亚北部)的存储库进行身份验证。要解决此问题,请确保对身份验证和docker push命令调用使用相同的区域。