我的发布管道成功运行并在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”。
任何帮助将不胜感激。
答案 0 :(得分:1)
如错误所示,它要求验证。从您的描述中可以看出,可能的原因是您的团队未将ACR角色分配给您团队创建的服务主体,或者您使用了错误的服务主体。因此,您需要检查两件事:
检查服务主体是否具有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/