AWS ECR PULL没有基本身份验证凭证

时间:2019-03-14 11:24:55

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

我正在使用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"
        }
      }
    }
  }
}`

2 个答案:

答案 0 :(得分:3)

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

您需要创建一个包含登录凭据的注册表:

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类型的机密会被尊重

答案 1 :(得分:0)

在kubernetes集群中,您必须添加秘密,该秘密将在提取映像时用于登录ECR

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

请在ECR中检查令牌

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

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

我正在检查容器规范选项中没有秘密

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

  

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