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


Передача артефактов в другой реестр

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

Для перемещения артефактов нужно создать конвейер передачи, который реплицирует их между двумя реестрами с помощью хранилища BLOB-объектов.

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

В этой статье вы создадите необходимые ресурсы для создания и запуска конвейера переноса. Azure CLI используется для подготовки к работе связанных ресурсов, например секретов хранилища. Рекомендуется использовать Azure CLI 2.2.0 или более поздней версии. Если вам необходимо установить или обновить CLI, см. статью Установка Azure CLI.

Эта возможность доступна на уровне Премиум службы реестра контейнеров. Сведения об уровнях служб реестра и ограничениях см. в статье Уровни службы Реестра контейнеров Azure.

Внимание

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

Рассмотрим ваш случай использования

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

Необходимые компоненты

  • Реестры контейнеров. Вам потребуется исходный реестр с артефактами для передачи и целевой реестр. Передача артефактов в службе ACR предназначена для перемещения между физически отключенными облаками. Для тестирования исходный и целевой реестры могут находиться в одной или разных подписках Azure, клиентах Active Directory или облаках.

    Если вам нужно создать реестр, см. инструкции в статье Краткое руководство. Создание закрытого реестра контейнеров с помощью Azure CLI.

  • Учетные записи хранения. Создайте исходную и целевую учетные записи хранения в любой подписке и любом расположении. Для тестирования можно использовать ту же самую подписку или несколько подписок, что и для исходного и целевого реестров. При работе с разными облаками обычно создается отдельная учетная запись хранения в каждом из них.

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

    В каждой учетной записи создайте контейнер BLOB-объектов для передачи артефактов. Например, создайте контейнер с названием transfer.

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

    При необходимости создайте хранилища ключей с помощью Azure CLI или других инструментов.

  • Переменные сред. Например, команды в этой статье устанавливают указанные ниже переменные для исходной и целевой сред. Все примеры отформатированы для оболочки Bash.

    SOURCE_RG="<source-resource-group>"
    TARGET_RG="<target-resource-group>"
    SOURCE_KV="<source-key-vault>"
    TARGET_KV="<target-key-vault>"
    SOURCE_SA="<source-storage-account>"
    TARGET_SA="<target-storage-account>"
    

Обзор сценария

Для передачи образов между реестрами необходимо создать три указанных ниже ресурса конвейера. Все они создаются с помощью операций PUT. Эти ресурсы работают с исходными и целевыми реестрами и учетными записями хранения.

Проверка подлинности хранилища использует маркеры SAS, которые управляются как секреты в хранилищах ключей. Конвейеры используют управляемые удостоверения для чтения секретов в хранилищах.

  • ExportPipeline — долгосрочный ресурс, который содержит информацию верхнего уровня об исходном реестре и учетной записи хранения. Эти сведения включают универсальный код ресурса (URI) для контейнера BLOB-объектов исходного хранилища, а также хранилище ключей, управляющее исходным маркером SAS.
  • ImportPipeline — долгосрочный ресурс, который содержит информацию верхнего уровня о целевом реестре и учетной записи хранения. Эти сведения включают универсальный код ресурса (URI) для контейнера BLOB-объектов целевого хранилища, а также хранилище ключей, управляющее целевым маркером SAS. Триггер импорта включен по умолчанию, поэтому конвейер запускается автоматически, когда BLOB-объект артефакта попадает в целевой контейнер хранилища.
  • PipelineRun — ресурс, который используется для вызова ExportPipeline или ImportPipeline.
    • Чтобы запустить ExportPipeline вручную, создайте ресурс PipelineRun и укажите артефакты для экспорта.
    • Если включен триггер импорта, ImportPipeline запускается автоматически. Его также можно запустить вручную с помощью PipelineRun.
    • В настоящее время с помощью каждого ресурса PipelineRun можно передать не более 50 артефактов.

Полезная информация

  • Ресурсы ExportPipeline и ImportPipeline обычно находятся в разных клиентах Active Directory, связанных с исходным и целевым облаками. При таком сценарии требуются отдельные управляемые удостоверения и хранилища ключей для ресурсов экспорта и импорта. Для тестирования эти ресурсы можно разместить в одном облаке с общим доступом к удостоверениям.
  • По умолчанию шаблоны ExportPipeline и ImportPipeline позволяют управляемому удостоверению, назначаемому системой, получить доступ к секретам хранилища ключей. Также шаблоны ExportPipeline и ImportPipeline поддерживают удостоверение, назначаемое пользователем.

Создание и хранение ключей SAS

При передаче артефактов используются маркеры подписанного URL-адреса (SAS) для доступа к учетным записям хранения в исходной и целевой средах. Создавайте и храните маркеры, как описано в разделах ниже.

Внимание

Хотя перенос ACR будет работать с сформированным вручную маркером SAS, который хранится в секрете Keyvault, для рабочих нагрузок настоятельно рекомендуется вместо этого использовать секреты определения SAS управляемого хранилища Keyvault.

Создание маркера SAS для экспорта

Выполните команду az storage container generate-sas, чтобы создать маркер SAS для контейнера в исходной учетной записи хранения, которая используется для экспорта артефактов.

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

В примере ниже выходные данные команды присваиваются переменной среды EXPORT_SAS с префиксом "?". Обновите значение --expiry для своей среды:

EXPORT_SAS=?$(az storage container generate-sas \
  --name transfer \
  --account-name $SOURCE_SA \
  --expiry 2021-01-01 \
  --permissions alrw \
  --https-only \
  --output tsv)

Хранение маркера SAS для экспорта

Сохраните маркер SAS в исходном хранилище ключей Azure с помощью команды az keyvault secret set:

az keyvault secret set \
  --name acrexportsas \
  --value $EXPORT_SAS \
  --vault-name $SOURCE_KV

Создание маркера SAS для импорта

Выполните команду az storage container generate-sas, чтобы создать маркер SAS для контейнера в целевой учетной записи хранения, которая используется для импорта артефактов.

Рекомендуемые разрешения для маркера: чтение, удаление, вывод списка.

В примере ниже выходные данные команды присваиваются переменной среды IMPORT_SAS с префиксом "?". Обновите значение --expiry для своей среды:

IMPORT_SAS=?$(az storage container generate-sas \
  --name transfer \
  --account-name $TARGET_SA \
  --expiry 2021-01-01 \
  --permissions dlr \
  --https-only \
  --output tsv)

Хранение маркера SAS для импорта

Сохраните маркер SAS в целевом хранилище ключей Azure с помощью команды az keyvault secret set:

az keyvault secret set \
  --name acrimportsas \
  --value $IMPORT_SAS \
  --vault-name $TARGET_KV

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