Поделиться через


Не удается извлечь изображения из Реестр контейнеров Azure в веб-приложение Azure

В этой статье приводятся рекомендации по устранению наиболее распространенных ошибок, которые могут возникнуть при извлечении образов из реестра контейнеров Azure в веб-приложение Azure.

Симптомы и начальное устранение неполадок

Рекомендуется начать устранение неполадок, проверив работоспособность реестра контейнеров.

Чтобы проверить работоспособность реестра контейнеров, выполните следующую команду:

az acr check-health --name <myregistry> --ignore-errors --yes

Если обнаружена проблема, результаты включают код ошибки и описание. Дополнительные сведения об этих ошибках и возможных решениях см . в справочнике по ошибкам проверки работоспособности.

Примечание.

Если вы получаете ошибки, связанные с Helm или нотариями, это не означает, что реестр контейнеров или AKS не работает или имеет проблему. Это просто указывает на проблемы, такие как то, что Helm или Нотари не установлен, или что Azure CLI несовместима с текущей установленной версией Helm или Нотари.

Затем определите сообщение об ошибке, связанное с вытягиванием, которое важно для устранения неполадок:

  1. Войдите на портал Azure.
  2. В веб-приложении выберите журнал Центра>развертывания. Выберите фиксацию, чтобы просмотреть сведения о журнале. Вы также можете просматривать журналы для процесса извлечения изображения в режиме реального времени, проверив поток журнала в разделе "Мониторинг ".

В следующих разделах описаны наиболее распространенные ошибки, отображаемые в журналах веб-приложений.

Ошибка 1. Несанкционированный доступ

Head \" https://<acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": unauthorized

Решение для проверки подлинности на основе пользователей на основе администратора

Ошибка "несанкционированная" может быть вызвана неверными учетными данными администратора. Сюда входят сервер входа, имя пользователя или пароль, настроенный в переменных среды веб-приложения.

Чтобы разрешить эту проблему, выполните следующие действия:

  1. В портал Azure перейдите к контейнеру реестра. В разделе "Параметры" выберите "Ключи доступа". Проверьте параметры учетных данных пользователя администратора сервера входа, имени пользователя и пароля.
  2. Перейдите к веб-приложению. В разделе "Параметры" выберите переменные среды.
  3. Убедитесь, что три переменные, настроенные для реестра контейнеров (сервер входа, имя пользователя, пароль) соответствуют параметрам учетных данных администратора в контейнере реестра.

Решение для проверки подлинности на основе управляемых удостоверений

При использовании управляемой проверки подлинности на основе удостоверений Microsoft.ContainerRegistry/registries/pull/read веб-приложения Azure разрешение должно быть назначено управляемому удостоверению для выполнения действия по запросу.

Встроенные роли Azure, содержащие Microsoft.ContainerRegistry/registries/pull/read разрешение, приведены ниже.

  • AcrPull
  • AcrPush
  • ЧитательContributor
  • Ответственный

Дополнительные сведения см. в разделе Реестр контейнеров Azure ролях и разрешениях.

При запуске операции извлечения из реестра контейнеров роль AcrPull автоматически назначается управляемому удостоверению веб-приложения Azure. Вам не нужно вручную добавлять разрешения. Однако необходимо убедиться, что создание назначения ролей не блокируется, например, политикой Azure. Кроме того, убедитесь, что назначение роли не было удалено.

Ошибка 2. Манифест, помеченный тегом<>, не найден

DockerApiException : Docker API responded with status code=NotFound, response={"message":"manifest for <acr-name>.azurecr.io/<repository>:<tag> not found: manifest unknown: manifest tagged by \"<tag>\" is not found"}

Решение. Убедитесь, что тег существует

Сообщение об ошибке указывает, что тег, связанный с изображением, который вы пытаетесь извлечь, не найден. Убедитесь, что тег существует в связанном репозитории и реестре.

Чтобы использовать Azure CLI для поиска тегов в связанном репозитории и реестре, выполните следующую команду:

az acr repository show-tags -n <ContainerRegistryName> --repository <RepositoryName>

Чтобы использовать портал Azure для поиска тегов, находящихся в связанном репозитории и реестре, выполните следующие действия.

Перейдите к контейнеру реестра. В разделе "Службы" выберите репозитории, откройте связанный репозиторий и проверьте список тегов.

Примечание.

Команда az acr repository show-tags или проверка репозиториев из портал Azure работает только в том случае, если правила сети реестра контейнеров разрешают его.

Ошибка 3. Клиент с IP-адресом не разрешен доступ

DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Head \"https:// <acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": denied: client with IP '<web-app-outbound-ip>' is not allowed access. Refer https://aka.ms/acr/firewall to grant access."}

Решение 1. Убедитесь, что встроенный брандмауэр реестра контейнеров разрешает IP-адрес устройства

По умолчанию реестр контейнеров принимает подключения через Интернет из всех сетей. Реестр контейнеров имеет встроенный брандмауэр, который может ограничить доступ к определенным IP-адресам или CIDR или полностью отключить доступ к общедоступной сети.

Эта проблема может возникнуть, если IP-адреса веб-приложения блокируются встроенным брандмауэром реестра контейнеров.

Чтобы устранить эту проблему, убедитесь, что встроенный брандмауэр разрешает исходящие IP-адреса веб-приложения, которые должны извлекать образ.

Чтобы найти исходящие IP-адреса веб-приложения, выполните следующие действия.

  1. В портал Azure перейдите к веб-приложению.
  2. На странице обзора найдите исходящий IP-адрес и нажмите кнопку "Показать больше", чтобы получить полный список исходящих IP-адресов.

Сведения об использовании Azure CLI для поиска исходящих IP-адресов веб-приложения см. в статье "Поиск исходящих IP-адресов" в службе приложение Azure.

Решение 2. Настройка интеграции виртуальной сети для веб-приложения

Если необходимо полностью отключить доступ к общедоступной сети или разрешить только выбранные сети в реестре контейнеров без ручного добавления IP-адресов веб-приложения, альтернативным вариантом является частное извлечение образа. Чтобы извлечь образы в частном порядке, необходимо настроить реестр контейнеров с помощью частной конечной точки и включить интеграцию виртуальной сети для веб-приложения.

Интеграция виртуальной сети можно настроить на стороне веб-приложения, выполнив следующие действия.

  1. В портал Azure перейдите к веб-приложению и выберите "Сеть".

  2. В разделе "Конфигурация исходящего трафика" настройте интеграцию виртуальная сеть, выберите "Добавить интеграцию виртуальной сети", а затем укажите подписку, виртуальную сеть и подсеть.

  3. На странице конфигурации виртуальной сети убедитесь, что выбран параметр извлечения образа контейнера.

    Снимок экрана: параметр извлечения образа контейнера.

Чтобы извлечь образ по виртуальной сети, необходимо включить извлечение образа через виртуальную сеть в Центре развертывания веб-приложения. Кроме того, если реестр контейнеров отключен или установлен для определенных сетей, может появиться сообщение "Не удалось загрузить теги ACR — сбой", как показано в следующем примере. Эта ошибка ожидается в этом сценарии. В этом случае раскрывающийся список параметров изображения и тега не будет доступен. Вам придется вручную ввести изображение и тег.

Снимок экрана: не удалось загрузить сообщение об ошибке тегов ACR.

Следующие шаги

Если это руководство по устранению неполадок не устраняет проблему, рассмотрите следующее:

Проверьте группы безопасности сети и таблицы маршрутов, связанные с подсетями. Если виртуальное устройство, например брандмауэр, управляет трафиком между подсетями, просмотрите брандмауэр и правила доступа.

Используйте службу Kudu для устранения неполадок. Вы можете подключиться к службе Kudu. Например, используйте Bash для проверки разрешения DNS путем выполнения nslookup <acr-name>.azurecr.ioили проверки подключения с помощью tcpping <acr-name>.azurecr.io.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.