【问题标题】:AWS ECR PULL no basic auth credentialsAWS ECR PULL 没有基本的身份验证凭证
【发布时间】:2019-08-05 06:36:52
【问题描述】:

我正在使用 Terraform 部署 Azure K8s 集群,并且图像托管在 Amazon ECR 中。 从 ECR 拉取映像时部署失败,并出现以下错误:

Failed to pull image "tooot.eu-west-1.amazonaws.com/app-t:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://tooot.eu-west-1.amazonaws.com/v2/app-t/manifests/latest: no basic auth credentials

以下是我在 terraform 模板中的 kuberentes 资源

  metadata {
    name = "terraform-app-deployment-example"
    labels {
      test = "app-deployment"
    }
  }

  spec {
    replicas = 6

    selector {
      match_labels {
        test = "app-deployment"
      }
    }

    template {
      metadata {
        labels {
          test = "app-deployment"
        }
      }

      spec {
        container {
          image = "toot.eu-west-1.amazonaws.com/app-t:latest"
          name  = "app"
        }
      }
    }
  }
}`

【问题讨论】:

标签: azure kubernetes kubectl azure-aks terraform-provider-azure


【解决方案1】:

在 kubernetes 集群中,您必须添加用于在提取图像时登录 ECR 的密码

ECR 管理用于推送和拉取图像的令牌。令牌有效期为 12 小时

所以请检查 ECR 中的令牌

我已经为此编写了 shell 脚本,您也可以查看它

它正在从 aws ECR 获取令牌,删除 Kubernetes 集群中的旧密钥并在 Kubernetes 集群中再次创建新密钥。哪个秘密将用于从 aws ecr 中提取图像。

因为我正在检查容器规格选项中没有秘密

您可以在这里查看更多信息:

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

【讨论】:

  • 非常感谢脚本 Harsh !,但我应该如何运行它?我试图通过运行 $(aws ecr get-login --no-include-email --region eu-west-1) 和该命令的输出来验证我自己,但是当我运行 kubectl 时我仍然遇到同样的问题获取 pods --watch 我得到 ImagePullBackOff 和 ErrImagePull kubelet,aks-default-32086448-1 无法提取图像“toot.dkr.ecr.eu-west-1.amazonaws.com/app-t:latest”:rpc 错误:代码 = 未知 desc = 来自守护程序的错误响应:获取 toot.dkr.ecr.eu-west-1.amazonaws.com/v2/app-t/manifests/latest:没有基本身份验证凭据
  • 在运行 aws ecr get-login --no-include-email --region eu-west-1 之后,您将获得一个带有大令牌的 docker 命令作为输出...在您的情况下,在 kubernetes 集群中生成令牌是有问题的...
  • 你编辑过manbifest文件吗???哪里有规范容器配置???你必须在那里添加秘密名称..secret 它将存储 ECR 的令牌
  • 您的脚本是这个脚本的副本 - stackoverflow.com/a/50502171/1882064
  • @HarshManvar - 一点也不,很高兴与您分享!归根结底,我们一直在互相抄袭。该链接也回答了 Renm 的问题。
【解决方案2】:

基本上,您缺乏从 AWS 提取图像的凭据。

您需要创建一个regcred,其中包含登录凭据:

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

之后,您需要在 terraform 配置中添加 regcred。我没有使用模板,但在部署规范中,您将添加一个名为 imagePullSecrets 的字段。

https://www.terraform.io/docs/providers/kubernetes/r/deployment.html

imagePullSecrets 描述:

image_pull_secrets - (可选)ImagePullSecrets 是对同一命名空间中秘密的可选引用列表,用于拉取此 PodSpec 使用的任何图像。如果指定,这些秘密将被传递给各个 puller 实现供他们使用。例如,在 docker 的情况下,只有 DockerConfig 类型的机密被接受

【讨论】:

  • 谢谢,我今天会详细了解它,我想这些会带我走向正确的方向
猜你喜欢
  • 2017-09-29
  • 1970-01-01
  • 2020-02-24
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多