0

从 ACR 拉取 service-jenkins 自定义映像时,AKS 给出以下错误:

警告失败 0s (x2 over 31s) kubelet 无法拉取图像“XXX.azurecr.io/service-jenkins:latest”:[rpc 错误:代码 = 未知 desc = 无法拉取和解压图像“XXX.azurecr.io/service -jenkins:latest":无法提取层 sha256:XXX:意外 EOF:未知,rpc 错误:code = Unknown desc = 无法提取和解压缩图像“XXX.azurecr.io/service-jenkins:latest”:无法解决参考“XXX.azurecr.io/service-jenkins:latest”:授权失败:无法获取匿名令牌:意外状态:401 未授权]

我们已采取以下步骤来尝试解决此问题:

  1. 使用 SP 而不是使用存储在同一命名空间中的机密将 AKS 与 ACR 连接
  2. 上传了由 AKS 成功提取的示例 hello-world 图像
  3. 已验证图像密钥与 ACR 密钥匹配

我们使用本地 docker 引擎拉取并执行了 service-jenkins 镜像,以检查镜像构建是否存在问题,但容器运行正常。

我们无法确定确切的问题。任何帮助表示赞赏!

4

3 回答 3

1

如果您的错误中有“匿名访问令牌”之类的措辞,则在 azure cloud shell 上运行以下命令

请按照以下步骤操作:-

  1. 转到天蓝色门户
  2. 使用 cloudshell 登录到 aks 集群
  3. 运行以下命令:

az acr update --anonymous-pull-enabled

于 2021-09-21T07:17:07.880 回答
0

事实证明,这个特定问题发生在

  1. AKS K8 版本 > 1.18.xx
  2. 使用 Ubuntu 20.10 docker 基础镜像

在深入研究这个问题时,似乎 Ubuntu 20.10 有一些层重复,这与 MSFT 的 K8 containerd运行时实现不相符。

我不是专家,但这是我在 Azure 上注意到的唯一区别,因为我们还尝试了与 IBM Cloud 相同的部署,并且似乎按预期运行。

只需将 Ubuntu 基础升级到 21.04 即可解决我的问题 :)

于 2021-09-23T05:04:38.113 回答
0

您是如何将 AKS 与 ACR 连接起来的?

您可以通过使用 Azure CLI(此处为详细信息)或自行创建角色分配(此处为详细信息)来执行此操作。

对于后者,您必须将acrpull角色分配给 AKS 节点池的托管标识(或服务主体)。

于 2021-08-31T22:27:19.427 回答