kubectl - K3OS 无法从 AWS ECR 私有(private)注册表中提取镜像,尽管它可以推送

标签 kubectl amazon-ecr k3s

我在互联网上找到了很多针对这个问题的解决方案,他们都是使用 aws-cli 和 docker cli 来解决的。好吧,它们在 K3OS 中都不存在。所以我不能使用它们。

我使用 Kaniko 创建了镜像并成功将其推送到私有(private) ECR 注册表中。为此,我创建了配置映射和 secret ,如下所示。不使用 aws 或 docker cli。

kubectl create configmap docker-config --from-file=/home/rancher/.docker/config.json
kubectl create secret generic aws-secret --from-file=/home/rancher/.aws/credentials

但是,当我使用类似的技巧从同一个 K3OS shell 中拉回相同的镜像时,我运气不佳。 pod.yaml如下:

apiVersion: v1
kind: Pod
metadata:
  name: tracker
spec:
  containers:
  - name: tracker
    image: xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/tracker:latest
  imagePullSecrets:
  - name: aws-secret

我收到以下错误: 无法拉取镜像“xxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/tracker:latest”:rpc 错误:代码 = 未知 desc = 无法拉取和解压镜像“xxxxxxxxxxx.dkr.ecr.us-east” -1.amazonaws.com/tracker:latest”:无法解析引用“xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/tracker:latest”:从主机 xxxxxxxxxxxxx.dkr.ecr.us-east 拉取-1.amazonaws.com 失败,状态代码 [最新 list ]:401 未经授权

IAM 启用了以下策略: AmazonEC2ContainerRegistryFullAccess EC2InstanceProfileForImageBuilderECRContainerBuilds AmazonElasticContainerRegistryPublicFullAccess

我在这里缺少什么?

最佳答案

我终于使用this article中所示的技巧解决了这个问题。 .

是的,这是一次逃避。 ;-) 我在 Windows PC 中运行了 aws cli。

aws ecr get-login-password --region us-east-1

然后在此命令中将生成的密码复制粘贴到 K3OS 终端:

kubectl create secret docker-registry ecr-push-cred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

然后在 pod 定义中使用它:

  imagePullSecrets:
  - name: ecr-push-cred

我一直想知道为什么我可以推送图像,但不能拉取图像。我终于意识到,在推送时,它是在运行 gcr.io/kaniko-project/executor 的容器中完成的。它可以使用通用类型的 secret 进行管理。但 K3OS 需要 docker-registry 类型的 secret 。所以我们需要两种类型的 secret 。

关于kubectl - K3OS 无法从 AWS ECR 私有(private)注册表中提取镜像,尽管它可以推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70837524/

相关文章:

kubernetes - Kubectl命令如何从远程服务器检索 list

kubernetes - 在 K3s Kubernetes 中创建 NFS 共享的链接

amazon-web-services - 使用 ECS-CLI 将多容器 docker 应用程序部署到 AWS ECS Fargate

python - 如何为 flask 和 celery 应用程序创建通用的基本docker镜像

amazon-web-services - ECS Fargate 计划任务无法连接到 ECR

docker - 使用 k3s 访问本地 docker 镜像

nginx - kubernetes k3s 代理无法连接到主 CA/SSL 错误

kubernetes - Kubernetes中的公开服务和副本集关系

powershell - “kubectl 补丁”适用于 Linux Bash,但不适用于 Windows Powershell ISE

kubernetes - minikube - EXTERNAL-IP 仍然<待定>