ImagePullBackOff с «ошибкой rpc: код = Неизвестный desc = не удалось извлечь и распаковать изображение» из AKS при извлечении из ACR

#jenkins #azure-aks #acr

Вопрос:

При извлечении пользовательского изображения service-jenkins из ACR AKS выдает следующую ошибку:

Ошибка предупреждения 0 с (x2 более 31 с) кублету не удалось извлечь изображение «XXX.azurecr.io/service-jenkins:latest»: [ошибка rpc: код = Неизвестно описание = не удалось извлечь и распаковать изображение «XXX.azurecr.io/service-jenkins:latest»: не удалось извлечь слой sha256:XXX: неожиданный EOF: неизвестно, ошибка rpc: код = Неизвестно desc = не удалось извлечь и распаковать изображение «XXX.azurecr.io/service-jenkins:latest»: не удалось разрешить ссылку «XXX.azurecr.io/service-jenkins:latest»: не удалось авторизоваться: не удалось получить анонимный токен: неожиданный статус: 401 Несанкционированный]

Мы предприняли следующие шаги в попытке решить эту проблему:

  1. Подключил AKS с ACR с помощью SP вместо использования секрета, хранящегося в том же пространстве имен
  2. Загрузил образец изображения приветственного мира, которое успешно извлекается AKS
  3. Проверил, что секрет изображения совпадает с ключами ACR

Мы извлекли и выполнили образ service-jenkins с помощью локального механизма докеров, чтобы проверить, нет ли каких-либо проблем с созданием образа, но контейнер выполняется нормально.

Мы не можем точно определить проблему. Любая помощь будет признательна!

Ответ №1:

Если в вашей ошибке есть формулировка «анонимный токен доступа«, выполните команду ниже в облачной оболочке azure

выполните следующие действия:-

  1. Перейдите на портал azure
  2. Войдите в кластер aks с помощью cloudshell
  3. Выполните команду ниже :

обновление az acr-анонимное-с возможностью извлечения

Ответ №2:

Как вы связали AKS с ACR?

Вы можете сделать это с помощью Azure CLI (подробности здесь) или самостоятельно создав назначение ролей (подробности здесь).

Для последнего вам придется назначить acrpull Роль Управляемому удостоверению (или Участнику службы) пула узлов AKS.

Ответ №3:

Оказывается, эта конкретная проблема возникает, когда

  1. Версия AKS K8 > 1.18.xx
  2. Используется базовый образ докера Ubuntu 20.10

При глубоком погружении в проблему кажется, что Ubuntu 20.10 имеет некоторое дублирование слоев, которое плохо сочетается с реализацией MSFT среды выполнения K8 containerd.

Я не эксперт, но это единственное отличие, которое я заметил в Azure, так как мы также пробовали те же развертывания с IBM Cloud, и это, похоже, работает в соответствии с ожиданиями.

Простое обновление базы Ubuntu до 21.04 устранило проблему для меня 🙂