3

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

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

我在 pod 上做了 kubectl describe 并收到以下错误消息:

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

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

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

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

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

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

任何帮助都感激不尽。

4

4 回答 4

3

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

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

判断service principal是否拥有ACR权限的方法是,在docker server中使用service principal登录后,在ACR中拉取镜像。此外,正如评论所说,您需要确保命令正确,如下所示:

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

另外,您使用带有标签的错误图像的可能性很小。顺便说一句,检查一下。

于 2019-08-14T07:04:44.867 回答
0

在我的情况下,问题是我的 --docker-password 有一个特殊字符,我没有使用引号转义它(即 --docker-password 'myPwd$')

你可以检查你的密码是否正确我执行这个命令:kubectl get secret < SECRET > -n < NAMESPACE> --output="jsonpath={.data..dockerconfigjson}" | base64 --解码

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

于 2021-01-29T17:54:39.877 回答
0

我有同样的错误,我意识到服务主体已过期。要检查服务主体的到期日期并使用新凭据更新 AKS 群集,请执行以下步骤:

注意:您需要安装和配置 Azure CLI 版本 2.0.65 或更高版本。

1- 使用 az aks show 命令获取集群的客户端 ID。

az aks show --resource-group YOUR_AKS_RESOURCE_GROUP_NAME --name YOUR_AKS_CLUSTER_NAME --query "servicePrincipalProfile.clientId"

2-检查服务主体的到期日期。

az ad sp credential list --id YOUR_CLIENT_ID --query "[].endDate" -o tsv

如果服务主体已过期,那么要重置现有的服务主体凭据,请执行以下步骤:

1- 使用 az ad sp credential reset 命令重置凭据。

az ad sp credential reset --name YOUR_CLIENT_ID --query password -o tsv

2- 使用新的服务主体凭据更新 AKS 群集。

az aks update-credentials --resource-group YOUR_AKS_RESOURCE_GROUP_NAME --name YOUR_AKS_CLUSTER_NAME --reset-service-principal --service-principal YOUR_CLIENT_ID --client-secret YOUR_NEW_PASSWORD

来源:https ://docs.microsoft.com/en-us/azure/aks/update-credentials

于 2021-10-28T03:44:01.220 回答
0

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

于 2019-08-12T23:16:23.067 回答