我在互联网上找到了很多针对这个问题的解决方案,他们都使用 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
我在这里缺少什么?
我终于使用这篇文章中所示的技巧解决了它。
是的,这是一次逃避。 ;-) 我在我的 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 类型的机密。所以我们需要两种类型的秘密。
@Sharath 给出的上述解决方案可能有效,但是令牌将如何更新?
令牌将在 12 小时后过期。有什么解决办法吗?