Управление общедоступным содержимым с помощью Реестра контейнеров Azure

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

Риски, связанные с общедоступным содержимым

В вашей среде могут существовать зависимости от общедоступного содержимого, такого как общедоступные образы контейнеров, диаграммы Helm, политики Open Policy Agent (OPA) или другие артефакты. Возможно, например, вы запускаете nginx для маршрутизации службы или docker build FROM alpine путем извлечения образов непосредственно из Docker Hub или другого общедоступного реестра.

Без соответствующих элементов управления наличие зависимостей от общедоступного содержимого реестра может привести к рискам, связанным с рабочими процессами разработки и развертывания образов. Чтобы снизить риски, по возможности сохраняйте локальные копии общедоступного содержимого. Дополнительные сведения см. в блоге Open Container Initiative.

Проверка подлинности с помощью Docker Hub

Для начала, если вы сейчас извлекаете общедоступные образы из Docker Hub в рамках рабочего процесса сборки или развертывания, рекомендуется выполнять проверку подлинности с помощью учетной записи Docker Hub, а не анонимного запроса на вытягивание.

При частом выполнении анонимных запросов на вытягивание могут возникать ошибки Docker, аналогичные ERROR: toomanyrequests: Too Many Requests. или You have reached your pull rate limit. Чтобы предотвратить возникновение этих ошибок, выполняйте аутентификацию в Docker Hub.

Примечание.

Начиная с 2 ноября 2020 года ограничения скорости скачивания применяются к анонимным и прошедшим проверку подлинности запросам к Docker Hub из учетных записей бесплатных планов Docker по IP-адресу и идентификатору Docker.

При оценке количества запросов на вытягивание следует учитывать, что при использовании служб поставщика облачных служб или применении корпоративного преобразования сетевых адресов (NAT) в Docker Hub в качестве подмножества IP-адресов будет представлено несколько пользователей в агрегированном виде. Добавление проверки подлинности для платной учетной записи Docker в запросы, отправленные в Docker Hub, позволит избежать возможных нарушений в работе служб из-за регулирования скорости.

Дополнительные сведения см. на странице цен и подписок на Docker и в условиях предоставления услуг Docker.

Маркер доступа к Docker Hub

Docker Hub поддерживает личные маркеры доступа в качестве альтернативы паролю Docker при проверке подлинности в Docker Hub. Маркеры рекомендуется использовать для автоматических служб, которые извлекают образы из Docker Hub. Можно создать несколько маркеров для разных пользователей или служб и отозвать их, если они больше не нужны.

Чтобы выполнить проверку подлинности с помощью маркера, используя docker login, не указывайте пароль в командной строке. При запросе пароля введите вместо этого маркер. Если вы включили двухфакторную проверку подлинности для учетной записи Docker Hub, необходимо использовать личный маркер доступа при входе из интерфейса командной строки Docker.

Аутентификация из служб Azure

Некоторые службы Azure, в том числе Служба приложений и Экземпляры контейнеров Azure, поддерживают извлечение образов из общедоступных реестров, таких как Docker Hub, для развертываний контейнеров. Если необходимо развернуть образ из Docker Hub, рекомендуется настроить параметры для проверки подлинности с помощью учетной записи Docker Hub. Примеры:

Служба приложений

  • Источник образа: Docker Hub
  • Доступ к репозиторию: частный
  • Имя входа: <Имя пользователя Docker Hub>
  • Пароль: <Токен Docker Hub>

Дополнительные сведения см. на странице Операции извлечения с проверкой подлинности в Docker Hub для Службы приложений.

Экземпляры контейнеров Azure

  • Источник образа: Docker Hub или другой реестр
  • Тип образа: частный
  • Сервер входа для реестра образов: docker.io
  • Имя пользователя реестра образа: <Имя пользователя Docker Hub>
  • Пароль реестра образа: <Токен Docker Hub>
  • Изображение: <имя репозитория docker.io/>:<тег>

Настройка кэша артефактов для использования общедоступного содержимого

Рекомендуется использовать общедоступное содержимое для объединения проверки подлинности реестра и функции кэша артефактов. Кэш артефактов можно использовать для кэширования артефактов контейнера в Реестр контейнеров Azure даже в частных сетях. Использование кэша артефактов не только защищает вас от ограничений скорости реестра, но и значительно повышает надежность извлечения при сочетании с геоизбыточными реплика ACR для извлечения артефактов из любого региона, ближайшего к ресурсу Azure. Кроме того, вы также можете использовать все функции безопасности ACR, включая частные сети, конфигурацию брандмауэра, субъекты-службы и многое другое. Полные сведения об использовании общедоступного содержимого с кэшем артефактов ACR проверка руководстве по кэшу артефактов.

Импорт образов в Реестр контейнеров Azure

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

Рекомендуется также однократно импортировать базовые образы и другое общедоступное содержимое в Реестр контейнеров Azure. Команда az acr import в Azure CLI поддерживает импорт образов из общедоступных реестров, таких как Docker Hub и Microsoft Container Registry, а также из других частных реестров контейнеров.

az acr import не требует локальной установки Docker. Эту команду можно использовать с локальной установкой Azure CLI или непосредственно в Azure Cloud Shell. Она поддерживает образы с ОС любых типов, образы с несколькими архитектурами и артефакты OCI, такие как диаграммы Helm.

В зависимости от потребностей организации импорт можно выполнить в выделенный реестр или репозиторий в общем реестре.

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest \
  --username <Docker Hub username> \
  --password <Docker Hub token>

Обновление ссылок на образы

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

  • Обновите ссылки на образы, чтобы использовать частный реестр. Например, измените оператор FROM baseimage:v1 в Dockerfile на FROM myregistry.azurecr.io/mybaseimage:v1.
  • Настройте учетные данные или механизм аутентификации для использования частного реестра. Точный механизм зависит от средств, используемых для доступа к реестру, и способа для управления доступом пользователей.

Автоматизация обновления образов приложения

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

Подробный пример см. в статье Использование и обслуживание общедоступного содержимого с помощью Задач Реестра контейнеров Azure.

Примечание.

Одна предварительно настроенная задача может автоматически собирать заново каждый образ приложения, который ссылается на зависимый базовый образ.

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