kubectl pod 无法拉下 AWS ECR 映像

Bar*_*rak 6 kubernetes aws-ecr

第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
Run Code Online (Sandbox Code Playgroud)

第四步 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:没有基本的身份验证凭据

为什么pod拉不下图片?

Bar*_*rak 13

创建了一个从 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}"
Run Code Online (Sandbox Code Playgroud)

并创建了一个 Linux cronjob 每 10 小时运行一次

  • 值得注意的是:`--docker-email` **需要** Kubernetes 配置才能工作,即使它已被弃用。它可以设置为像 no@email.com 这样的虚假值。 (2认同)
  • 这个剧本太神奇了!太感谢了。作为额外的好处,您可以将此脚本命名为 **kubectl-ecr** 并将其放入您的路径中,从而将其转换为 **kubectl 插件**。然后,您可以像这样直接从“kubectl”调用脚本——“kubectl ecr”。 (2认同)

Raw*_*ode 3

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

apiVersion: v1
kind: Deployment
metadata:
  name: deployment-name
spec:
  containers:
  - image: your-registry/image/name:tag
  imagePullSecrets:
  - name: secret-name
Run Code Online (Sandbox Code Playgroud)