无法提取图像-未经授权:需要身份验证(ImagePullBackOff)

时间:2019-08-12 22:56:33

标签: azure-kubernetes azure-container-registry kubernetes-secrets

我的发布管道成功运行并在Azure Kubernetes中创建了一个容器,但是,当我在azure Portal> Kubernetes服务>“ Insights”屏幕中查看时,它显示失败。

它无法从我的私有容器存储库中提取图像,并显示错误消息“ ImagePullBackOff”

我在吊舱上做了一个kubectl描述,并得到以下错误消息:

  

无法提取图像“ myexampleacr.azurecr.io/myacr:13”:[rpc错误:代码=未知desc =来自守护程序的错误响应:获取https://myexampleacr.azurecr.io/v2/myacr/manifests/53:未授权:需要身份验证。

以下是我的设置的简要背景: 我正在使用Kubernetes secret访问私有容器注册表中的容器。

我使用我的DevOps团队创建的服务原则使用clientId和password(secret)生成了Kubernetes机密。  。 用于生成kubernetes机密的命令:

  

kubectl创建秘密docker-registry acr-auth --docker-server --docker-username --docker-password --docker-email

然后我使用imagePullSecrets更新了我的deployment.yaml:name:acr-auth

此后,我运行了部署和发布管道,均成功运行,但是它们在kubernetes服务中显示失败,并显示错误消息“ ImagePullBackOff”。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

如错误所示,它要求验证。从您的描述中可以看出,可能的原因是您的团队未将ACR角色分配给您团队创建的服务主体,或者您使用了错误的服务主体。因此,您需要检查两件事:

  1. 如果您使用的服务主体具有ACR的正确权限。
  2. 如果在Kubernetes服务中直接创建了Kubernetes机密。

检查服务主体是否具有ACR权限的方法是在docker服务器中使用服务主体登录后在ACR中拉取映像。另外,正如评论所述,您需要确保命令正确,如下所示:

kubectl create secret docker-registry acr-auth --docker-server myexampleacr.azurecr.io --docker-username clientId --docker-password password --docker-email yourEmail

此外,您极有可能使用了带有标记的错误图像。顺便检查一下。

答案 1 :(得分:0)

很奇怪,也许它显示了您没有删除的旧部署。也可能是这些。凭证不正确,acr可能不正确,图片名称或标签错误。您还可以使用aks-acr本机身份验证,并且永远不要使用机密:https://docs.microsoft.com/en-gb/azure/container-registry/container-registry-auth-aks

答案 2 :(得分:0)

就我而言,问题是我的 --docker-password 有一个特殊字符,我没有使用引号将其转义(即 --docker-password 'myPwd$')

您可以在执行此命令时检查您的密码是否正确: kubectl get secret < SECRET > -n < NAMESPACE> --output="jsonpath={.data..dockerconfigjson}" | base64 --decode

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