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

Noo*_*kie 7 amazon-web-services docker kubernetes

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

\n\n

步骤1)

\n\n

跑步

\n\n
aws ecr get-login-password --region cn-north-1 | docker login --username AWS --password-stdin xxxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn\n
Run Code Online (Sandbox Code Playgroud)\n\n

第2步)

\n\n

跑步kubectl create -f backend.yaml

\n\n

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

\n\n
\xe2\x9e\x9c  backend git:(kubernetes-fresh) \xe2\x9c\x97 kubectl get pods\nNAME                      READY   STATUS             RESTARTS   AGE\nbackend-89d75f7df-qwqdq   0/1     Pending            0          2s\n\n\xe2\x9e\x9c  backend git:(kubernetes-fresh) \xe2\x9c\x97 kubectl get pods\nNAME                      READY   STATUS              RESTARTS   AGE\nbackend-89d75f7df-qwqdq   0/1     ContainerCreating   0          4s\n\n\xe2\x9e\x9c  backend git:(kubernetes-fresh) \xe2\x9c\x97 kubectl get pods\nNAME                      READY   STATUS             RESTARTS   AGE\nbackend-89d75f7df-qwqdq   0/1     ErrImagePull       0          6s\n\n\xe2\x9e\x9c  backend git:(kubernetes-fresh) \xe2\x9c\x97 kubectl get pods\nNAME                      READY   STATUS             RESTARTS   AGE\nbackend-89d75f7df-qwqdq   0/1     ImagePullBackOff   0          7s\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
Events:\n  Type     Reason     Age                 From               Message\n  ----     ------     ----                ----               -------\n  Normal   Scheduled  117s                default-scheduler  Successfully assigned default/backend-89d75f7df-qwqdq to minikube\n  Normal   Pulling    32s (x4 over 114s)  kubelet, minikube  Pulling image "xxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/baopals:latest"\n  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\n  Warning  Failed     31s (x4 over 114s)  kubelet, minikube  Error: ErrImagePull\n  Warning  Failed     19s (x6 over 113s)  kubelet, minikube  Error: ImagePullBackOff\n  Normal   BackOff    4s (x7 over 113s)   kubelet, minikube  Back-off pulling image "xxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/baopals:latest"\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

主要错误是no basic auth credentials

\n\n

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

\n\n

是否有一些明显的我在这里丢失的东西阻止我从私人存储库中提取以便我可以在本地计算机上使用它们?

\n

Son*_*yen 1

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

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

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

如果您正在使用本地计算机上运行的集群进行开发,则甚至不需要这样做。您可以让 Pod 重用您已下载到本地缓存的映像,方法是将imagePullPolicy容器下的规范设置为IfNotPresent,或使用特定标记而不是latest您的映像。