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