首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将私有容器从AWS ECR拉取到本地集群

问如何将私有容器从AWS ECR拉取到本地集群
EN

Stack Overflow用户
提问于 2020-06-17 11:17:07
回答 2查看 2.2K关注 0票数 2

我当前在尝试提取通过AWS ECR托管的远程docker映像时遇到问题。我在运行部署时遇到此错误

步骤1)

跑

代码语言:javascript
复制
aws ecr get-login-password --region cn-north-1 | docker login --username AWS --password-stdin xxxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn

步骤2)

运行kubectl create -f backend.yaml

从这里开始,将发生以下情况:

代码语言:javascript
复制
➜  backend git:(kubernetes-fresh) ✗ kubectl get pods
NAME                      READY   STATUS             RESTARTS   AGE
backend-89d75f7df-qwqdq   0/1     Pending            0          2s

➜  backend git:(kubernetes-fresh) ✗ kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
backend-89d75f7df-qwqdq   0/1     ContainerCreating   0          4s

➜  backend git:(kubernetes-fresh) ✗ kubectl get pods
NAME                      READY   STATUS             RESTARTS   AGE
backend-89d75f7df-qwqdq   0/1     ErrImagePull       0          6s

➜  backend git:(kubernetes-fresh) ✗ kubectl get pods
NAME                      READY   STATUS             RESTARTS   AGE
backend-89d75f7df-qwqdq   0/1     ImagePullBackOff   0          7s

然后我运行kubectl describe pod backend,它将输出:

代码语言:javascript
复制
Events:
  Type     Reason     Age                 From               Message
  ----     ------     ----                ----               -------
  Normal   Scheduled  117s                default-scheduler  Successfully assigned default/backend-89d75f7df-qwqdq to minikube
  Normal   Pulling    32s (x4 over 114s)  kubelet, minikube  Pulling image "xxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/baopals:latest"
  Warning  Failed     31s (x4 over 114s)  kubelet, minikube  Failed to pull image "xxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/baopals:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://xxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/v2/baopals/manifests/latest: no basic auth credentials
  Warning  Failed     31s (x4 over 114s)  kubelet, minikube  Error: ErrImagePull
  Warning  Failed     19s (x6 over 113s)  kubelet, minikube  Error: ImagePullBackOff
  Normal   BackOff    4s (x7 over 113s)   kubelet, minikube  Back-off pulling image "xxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/baopals:latest"

主要错误是no basic auth credentials

现在我困惑的是,我可以将图像推送到我的ECR,我也可以推送到我的远程EKS集群,我觉得基本上我现在唯一不能做的事情就是从ECR上托管的私有存储库中拉出。

这里有没有什么明显的东西让我无法从私有repos中提取,这样我就可以在本地机器上使用它们了?

EN

回答 2

Stack Overflow用户

发布于 2020-06-17 13:04:46

要在本地获取ECR镜像,您需要登录ECR并获取docker镜像。而如果你在Kubernetes上,你必须使用secret来存储ECR登录详细信息,并且每次都要使用它来从ECR中提取图像。

这里是shell脚本如果您在Kubernetes上,它将自动从AWS配置中获取值,或者您可以在脚本开始时更新变量。

代码语言:javascript
复制
ACCOUNT=$(aws sts get-caller-identity --query 'Account' --output text) #aws account number
REGION=ap-south-1                                     #aws ECR region
SECRET_NAME=${REGION}-ecr-registry                    #secret_name
EMAIL=abc@xyz.com                                     #can be anything

TOKEN=`aws ecr --region=$REGION get-authorization-token --output text --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2`

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}"

YAML文件中使用的imagePullSecret,用于拉取私有docker repos的存储密钥。

https://github.com/harsh4870/ECR-Token-automation/blob/master/aws-token.sh

票数 1
EN

Stack Overflow用户

发布于 2020-06-17 12:02:57

当集群中的节点启动容器时,它需要访问私有注册表的凭据才能拉取镜像。即使您已经在本地计算机上进行了身份验证,节点也不能重用登录,因为根据设计,它可能在另一台计算机上运行;因此您必须在pod模板中提供凭据。请遵循以下指南来执行此操作:

https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

基本上,您将ECR凭证存储为秘密,并在容器规范的imagePullSecret中提供它。然后,pod将能够每次都拉取图像。

如果您在本地机器上运行集群进行开发,您甚至不需要这样做。您可以通过将容器规范下的imagePullPolicy设置为IfNotPresent,或者对您的镜像使用特定的标签而不是latest,让pod重用已下载到本地缓存的镜像。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62420919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档