6

步骤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

警告 Failed 5s kubelet, ip-10-46-250-151 Failed to pull image "my-account.dkr.ecr.us-east-1.amazonaws.com/my-image:latest": rpc error: code = Unknown desc = 来自守护程序的错误响应:获取https://my-account.dkr.ecr.us-east-1.amazonaws.com/my-image/latest:没有基本身份验证凭据

为什么 pod 拉不下图片?

4

3 回答 3

17

创建了一个从 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 小时运行一次

于 2019-04-12T20:16:08.610 回答
1

您的部署清单将需要指定容器注册表凭据处于机密状态。这就像添加一样简单imagePullSecrets

apiVersion: v1
kind: Deployment
metadata:
  name: deployment-name
spec:
  containers:
  - image: your-registry/image/name:tag
  imagePullSecrets:
  - name: secret-name
于 2018-12-19T13:59:40.100 回答
1

我也对此一头雾水,并意识到这是区域不匹配。当图像位于 us-west-2 时,我从 us-east-2 获取我的令牌。

来自https://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html#error-403的片段

有时您可能会收到 HTTP 403(禁止访问)错误,或者来自 docker push 命令的错误消息 no basic auth credentials,即使您已使用 aws ecr get-login 命令成功向 Docker 进行身份验证。以下是导致此问题的一些已知原因:

您已对不同区域进行身份验证 身份验证请求与特定区域绑定,不能跨区域使用。例如,如果您从美国西部(俄勒冈)获得授权令牌,则不能使用它对您在美国东部(弗吉尼亚北部)的存储库进行身份验证。要解决此问题,请确保您对身份验证和 docker push 命令调用使用相同的区域。

于 2019-06-01T03:06:20.830 回答