K3OS 无法从 AWS ECR 私有注册表中提取映像,尽管它可以推送

问题描述 投票:0回答:2

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

我使用 Kaniko 创建了镜像,并成功将其推送到私有 ECR 注册表中。为此,我创建了配置映射和秘密,如下所示。不使用 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 失败,状态代码 [最新清单]:401 未经授权

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

我在这里缺少什么?

kubectl amazon-ecr k3s
2个回答
3
投票

我终于使用这篇文章中所示的技巧解决了它。

是的,这是一次逃避。 ;-) 我在我的 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 的容器中完成的。它可以使用通用类型的秘密进行管理。但 K3OS 需要 docker-registry 类型的机密。所以我们需要两种类型的秘密。


0
投票

@Sharath 给出的上述解决方案可能有效,但是令牌将如何更新?

令牌将在 12 小时后过期。有什么解决办法吗?

© www.soinside.com 2019 - 2024. All rights reserved.