【问题标题】:Failed to pull image "xx.azurecr.io/xx:latest": rpc error: code = Unknown desc = Error response from daemon: unauthorized: authentication required无法提取图像“xx.azurecr.io/xx:latest”:rpc 错误:代码 = 未知 desc = 来自守护进程的错误响应:未经授权:需要身份验证
【发布时间】:2019-04-08 12:58:17
【问题描述】:

我的 ACR 和 AKS 位于同一订阅的同一 Azure 目录中。

在向我的服务主体授予 ACR Pull 访问权限后,没有任何效果并且仍然出现此错误。

错误:- 无法提取图像“xx.azurecr.io/xx:latest”:rpc 错误: 代码 = 未知 desc = 来自守护程序的错误响应:获取 https://xx.azurecr.io/v2/xx/manifests/latest:未经授权: 需要认证

screenshot of dashboard

【问题讨论】:

  • 您确定与您授予访问权限的服务主体相同吗?
  • 是的,我检查了@4c74356b41
  • 你能提供证据吗?
  • 这并不意味着它是 AKS 正在使用的 SP。您可以使用 az aks show -n xxx -g yyy 检查 AKS SP
  • az aks show --resource-group rg-000 --name demo-cluster --query "servicePrincipalProfile" -o json { "clientId": "0173xxxxxxxxxxxxx" }

标签: image authentication required azure-aks azure-acr


【解决方案1】:

从错误消息中可以看出,您未进行身份验证以将映像拉入您的 Azure 容器注册表。

对于 AKS,有两种方法可以获取从 Azure 容器注册表中提取映像的权限。

一个是授予 AKS 群集使用的服务主体的权限。您可以在Grant AKS access to ACR 获取详细信息。这样,您只需要一个服务主体。

另一个是将权限授予与 AKS 使用的服务主体不同的新服务主体。然后,您使用服务主体创建一个密钥以提取映像。详情可在Access with Kubernetes Secret获取。

它们是两种不同的方式,所以你应该确保你的步骤没有错误。要检查服务主体的角色分配,CLI 命令如下:

az role assignment list --assignee $SP_ID --role acrpull --scope $ACR_ID

SP_ID 取决于您使用的方式。

【讨论】:

    【解决方案2】:

    我们对这个错误有不同的原因:默认情况下,使用 AKS 群集创建的服务主体会在一年后过期。 https://docs.microsoft.com/en-us/azure/aks/update-credentials 上的说明显示了如何更新或创建新主体。

    【讨论】:

      【解决方案3】:

      集群运行的服务主体不是我认为的主体。要检查,请按照以下步骤操作。

      1. 运行命令“az aks show -n aks-cluster-name -g resource-group-name | grep client”

      2. 运行命令“az ad sp credential list --id”——该命令用于检查密钥是否关联。

      3. 登录到 Azure 门户。

      4. 导航到 Azure 容器注册表

      5. IAM --> 查看角色分配 --> 检查列表中是否存在具有最少“AcrPull”访问权限的客户端 ID。如果不授予对 SP 的访问权限。

      如果我们看到正确的身份验证,请检查 YAML。

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 2018-04-08
        • 2022-01-24
        • 2019-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-20
        相关资源
        最近更新 更多