【问题标题】:ImagePullBackOff with "rpc error: code = Unknown desc = failed to pull and unpack image" from AKS when pulling from ACR从 ACR 拉取时,带有“rpc 错误:代码 = 未知 desc = 无法从 AKS 拉取和解压缩图像”的 ImagePullBackOff
【发布时间】:2021-08-31 06:33:40
【问题描述】:

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

Warning Failed 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. 上传了一个示例 hello-world 图像,该图像已被 AKS 成功提取
  3. 已验证图像密钥与 ACR 密钥匹配

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

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

【问题讨论】:

    标签: jenkins azure-aks acr


    【解决方案1】:

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

    按照以下步骤:-

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

    az acr update --anonymous-pull-enabled

    【讨论】:

      【解决方案2】:

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

      您可以使用 Azure CLI(详情 here)或自行创建角色分配(详情 here)。

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

      【讨论】:

        【解决方案3】:

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2022-12-11
          • 1970-01-01
          • 2021-08-01
          • 2018-09-05
          • 2021-03-07
          • 2019-06-12
          • 2020-08-30
          • 2021-10-12
          • 2019-01-23
          相关资源
          最近更新 更多