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


Настройка образа контейнера для выполнения развертываний

Среды развертывания Azure (ADE) поддерживают модель расширяемости, которая позволяет настроить определение среды с помощью предпочтительной платформы шаблонов IaC. Вы можете хранить пользовательские образы в реестре контейнеров, например Реестр контейнеров Azure (ACR) или Docker Hub, а затем ссылаться на них в определениях среды для развертывания сред.

Из этой статьи вы узнаете, как создавать пользовательские образы контейнеров Bicep для развертывания определений среды в ADE. Вы узнаете, как использовать стандартный образ, предоставляемый корпорацией Майкрософт, или как настроить настраиваемую инфраструктуру подготовки образов с помощью платформы Bicep Infrastructure-as-Code (IaC).

Из этой статьи вы узнаете, как создавать пользовательские образы контейнеров Terraform для создания сред развертывания с помощью сред развертывания Azure (ADE). Вы узнаете, как настроить пользовательский образ для подготовки инфраструктуры с помощью платформы Terraform Infrastructure-as-Code (IaC).

Из этой статьи вы узнаете, как использовать Pulumi для развертываний в ADE. Вы узнаете, как использовать стандартный образ, предоставляемый Pulumi или как настроить пользовательский образ для подготовки инфраструктуры с помощью платформы Pulumi Infrastructure-as-Code (IaC).

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

Использование образов контейнеров с ADE

Вы можете использовать один из следующих подходов к использованию образов контейнеров с ADE:

  • Используйте стандартный образ контейнера для простых сценариев, используйте стандартный образ контейнера ARM-Bicep, предоставляемый ADE.
  • Создайте пользовательский образ контейнера для более сложных сценариев, создайте пользовательский образ контейнера, соответствующий вашим конкретным требованиям.

Использование стандартного образа контейнера

ADE поддерживает Azure Resource Manager (ARM) и Bicep без дополнительной настройки. Вы можете создать определение среды, которое развертывает ресурсы Azure для среды развертывания, добавив файлы шаблонов (например , azuredeploy.json и environment.yaml) в каталог. Затем ADE использует стандартный образ контейнера ARM-Bicep для создания среды развертывания.

В файле environment.yaml свойство указывает расположение образа контейнера, runner который требуется использовать. Чтобы использовать стандартный образ, опубликованный в Реестр артефактов Microsoft, используйте соответствующие идентификаторыrunner.

В следующем примере показано, что ссылается на стандартный runner образ контейнера ARM-Bicep:

    name: WebApp
    version: 1.0.0
    summary: Azure Web App Environment
    description: Deploys a web app in Azure without a datastore
    runner: Bicep
    templatePath: azuredeploy.json

Вы можете увидеть стандартный образ контейнера Bicep в стандартном репозитории ADE в папке Runner-Images для образа ARM-Bicep .

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

Создание пользовательского образа контейнера

Создание пользовательского образа контейнера с помощью скрипта

Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями. Вы можете создать и создать образ на основе стандартного образа ADE и отправить его в реестр контейнеров с помощью скрипта быстрого запуска, предоставленного корпорацией Майкрософт. Скрипт можно найти в репозитории сред развертывания. Чтобы использовать скрипт быстрого запуска, введите репозиторий и запустите скрипт локально.

Скрипт создает изображение и отправляет его в указанный Реестр контейнеров Azure (ACR) в репозитории "ade" и тег "latest". Для этого скрипта требуется имя реестра и каталог для пользовательского образа, установлен Azure CLI и Docker Desktop и в переменных PATH, а также требуется, чтобы у вас были разрешения на отправку в указанный реестр.

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

  • Вилку этого репозитория в личная учетная запись.
  • Убедитесь, что azure CLI и классическое приложение Docker установлены на компьютере и в переменных PATH.
  • Убедитесь, что у вас есть разрешения на отправку образов в выбранный Реестр контейнеров Azure.

Скрипт можно вызвать с помощью следующей команды в PowerShell:

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

Кроме того, если вы хотите отправить в определенный репозиторий и имя тега, можно выполнить следующее:

.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

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

Использование образов контейнеров с ADE

Вы можете использовать один из следующих подходов к использованию образов контейнеров с ADE:

  • Создайте пользовательский образ контейнера с помощью скрипта: используйте опубликованный сценарий для создания конкретного образа Terraform.
  • Создайте пользовательский образ контейнера, используюющий рабочий процесс GitHub: используйте опубликованный рабочий процесс GitHub из репозитория расширяемости ADE с помощью репозитория Terraform.
  • Создание пользовательского образа контейнера вручную: создание настраиваемого образа Terraform вручную

Создание пользовательского образа контейнера

Создание пользовательского образа контейнера с помощью скрипта

Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями. Вы можете создать образ на основе стандартного образа ADE и отправить его в реестр контейнеров с помощью скрипта быстрого запуска, предоставленного корпорацией Майкрософт. Скрипт можно найти в средах развертывания с помощью репозитория Terraform. Чтобы использовать скрипт быстрого запуска, введите репозиторий и запустите скрипт локально.

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

  • Вилку этого репозитория в личная учетная запись.
  • Убедитесь, что azure CLI и классическое приложение Docker установлены на компьютере и в переменных PATH.
  • Убедитесь, что у вас есть разрешения на отправку образов в выбранный Реестр контейнеров Azure.

Скрипт создает изображение и отправляет его в указанный Реестр контейнеров Azure (ACR) в репозитории "ade" и тег "latest". Для этого скрипта требуется имя реестра и каталог для пользовательского образа, установлен Azure CLI и Docker Desktop и в переменных PATH, а также требуется, чтобы у вас были разрешения на отправку в указанный реестр. Скрипт можно вызвать с помощью следующей команды в PowerShell:

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

Кроме того, если вы хотите отправить в определенный репозиторий и имя тега, можно выполнить следующее:

.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

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

Использование стандартного образа контейнера, предоставленного Pulumi

Команда Pulumi предоставляет предварительно созданный образ для начала работы, который можно увидеть в папке Runner-Image . Этот образ доступен в Центре pulumi/azure-deployment-environmentsDocker в Pulumi, так что его можно использовать непосредственно из определений среды ADE.

Ниже приведен пример файла environment.yaml , который использует предварительно созданный образ:

name: SampleDefinition
version: 1.0.0
summary: First Pulumi-Enabled Environment
description: Deploys a Storage Account with Pulumi
runner: pulumi/azure-deployment-environments:0.1.0
templatePath: Pulumi.yaml

В папке "Среды" можно найти несколько примеров определений среды.

Создание пользовательского образа

Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями. Вы можете создавать пользовательские образы на основе стандартных образов Pulumi и настраивать их в соответствии с вашими требованиями. После завершения настройки образа необходимо создать образ и отправить его в реестр контейнеров.

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

  1. Создайте пользовательский образ на основе стандартного образа.
  2. Установите нужные пакеты.
  3. Настройте скрипты оболочки операций.
  4. Создайте скрипты оболочки операций, использующие интерфейс командной строки Pulumi.

1. Создание пользовательского образа на основе стандартного образа

Создайте DockerFile, включающую инструкцию FROM, указывающую на стандартный образ, размещенный на Реестр артефактов Microsoft.

Ниже приведен пример инструкции FROM, ссылающейся на стандартный основной образ:

FROM mcr.microsoft.com/deployment-environments/runners/core:latest

Эта инструкция извлекает последний опубликованный основной образ и делает его основой для пользовательского образа.

2. Установка обязательных пакетов

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

Ниже приведен пример этого процесса, устанавливающий последнюю версию интерфейса командной строки Pulumi:

RUN apk add curl
RUN curl -fsSL https://get.pulumi.com | sh
ENV PATH="${PATH}:/root/.pulumi/bin"

В зависимости от того, какой язык программирования вы планируете использовать для программ Pulumi, может потребоваться установить одну или несколько соответствующих сред выполнения. Среда выполнения Python уже доступна в базовом образе.

Ниже приведен пример установки Node.js и TypeScript:

# install node.js, npm, and typescript
RUN apk add nodejs npm
RUN npm install typescript -g

Стандартные образы ADE основаны на образе Azure CLI и предварительно установлены пакеты ADE CLI и JQ. Дополнительные сведения о Azure CLI и пакете JQ можно узнать больше.

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

Существует четыре шага по развертыванию инфраструктуры через Pulumi:

  1. pulumi login — подключение к хранилищу состояний в локальной файловой системе или в Pulumi Cloud
  2. pulumi stack select — создание или выбор стека, используемого для конкретной среды
  3. pulumi config set — передача параметров развертывания в качестве значений конфигурации Pulumi
  4. pulumi up — запустите развертывание, чтобы создать новую или обновить существующую инфраструктуру в Azure

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

mkdir -p $ADE_STORAGE
export PULUMI_CONFIG_PASSPHRASE=
pulumi login file://$ADE_STORAGE

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

export PULUMI_ACCESS_TOKEN=YOUR_PULUMI_ACCESS_TOKEN
pulumi login

Все параметры, заданные для текущей среды, хранятся в переменной $ADE_OPERATION_PARAMETERS. Кроме того, выбранный регион Azure и имя группы ресурсов передаются ADE_ENVIRONMENT_LOCATION и ADE_RESOURCE_GROUP_NAME соответственно. Чтобы задать конфигурацию стека Pulumi, выполните следующие команды:

# Create or select the stack for the current environment
pulumi stack select $ADE_ENVIRONMENT_NAME --create

# Store configuration values in durable storage
export PULUMI_CONFIG_FILE=$ADE_STORAGE/Pulumi.$ADE_ENVIRONMENT_NAME.yaml

# Set the Pulumi stack config
pulumi config set azure-native:location $ADE_ENVIRONMENT_LOCATION --config-file $PULUMI_CONFIG_FILE
pulumi config set resource-group-name $ADE_RESOURCE_GROUP_NAME --config-file $PULUMI_CONFIG_FILE
echo "$ADE_OPERATION_PARAMETERS" | jq -r 'to_entries|.[]|[.key, .value] | @tsv' |
  while IFS=$'\t' read -r key value; do
    pulumi config set $key $value --config-file $PULUMI_CONFIG_FILE
  done

Кроме того, чтобы использовать привилегии ADE для развертывания инфраструктуры в подписке, скрипту необходимо использовать управляемое удостоверение службы ADE (MSI) при подготовке инфраструктуры с помощью поставщика Pulumi Azure Native или Azure Classic. Если в развертывании требуются специальные разрешения для завершения развертывания, например для определенных ролей, назначьте эти разрешения удостоверениям типа среды проекта, используемым для развертывания среды. ADE задает соответствующие переменные среды, такие как идентификаторы клиента, клиента и подписки в точке входа основного образа, поэтому выполните следующие команды, чтобы убедиться, что поставщик использует ADE MSI:

export ARM_USE_MSI=true
export ARM_CLIENT_ID=$ADE_CLIENT_ID
export ARM_TENANT_ID=$ADE_TENANT_ID
export ARM_SUBSCRIPTION_ID=$ADE_SUBSCRIPTION_ID

Теперь можно выполнить pulumi up команду для выполнения развертывания:

pulumi up --refresh --yes --config-file $PULUMI_CONFIG_FILE

Во время сценария удаления можно вместо этого выполнить destroy команду, как показано в следующем примере:

pulumi destroy --refresh --yes --config-file $PULUMI_CONFIG_FILE

Наконец, чтобы сделать выходные данные развертывания отправленными и доступными при доступе к среде через Azure CLI, преобразуйте выходной объект из Pulumi в указанный ADE формат через пакет JQ. Задайте значение переменной среды $ADE_OUTPUTS, как показано в следующем примере:

stackout=$(pulumi stack output --json | jq -r 'to_entries|.[]|{(.key): {type: "string", value: (.value)}}')
echo "{\"outputs\": ${stackout:-{\}}}" > $ADE_OUTPUTS

Создание пользовательского образа

Вы можете создать образ с помощью интерфейса командной строки Docker. Убедитесь, что подсистема Docker установлена на компьютере. Затем перейдите в каталог Dockerfile и выполните следующую команду:

docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}

Например, если вы хотите сохранить образ в репозитории в реестре с именем customImageи отправить с помощью версии тега 1.0.0, выполните следующие действия:

docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0

Сделать настраиваемый образ доступным для ADE

Чтобы использовать пользовательские образы, их необходимо хранить в реестре контейнеров. Вы можете использовать общедоступный реестр контейнеров или частный реестр контейнеров. Реестр контейнеров Azure (ACR) настоятельно рекомендуется из-за тесной интеграции с ADE, изображение может быть опубликовано без разрешения общедоступных анонимных доступ на вытягивание. Необходимо создать пользовательский образ контейнера и отправить его в реестр контейнеров, чтобы сделать его доступным для использования в ADE.

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

Внимание

Хранение образа контейнера в реестре с анонимным (неуправляемым) доступ на вытягивание делает его общедоступным. Не делайте этого, если изображение содержит конфиденциальную информацию. Вместо этого сохраните его в Реестр контейнеров Azure (ACR) с анонимным доступ на вытягивание отключен.

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

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

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

Использование частного реестра с защищенным доступом

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

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

Ограничение сетевого доступа

Чтобы защитить сетевой доступ к ACR, можно ограничить доступ к собственным сетям или полностью отключить доступ к общедоступной сети. Если ограничить доступ к сети, необходимо включить исключение брандмауэра allow trusted службы Майкрософт для доступа к этому реестру контейнеров.

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

  1. Создайте экземпляр ACR или используйте существующий.

  2. В портал Azure перейдите к ACR, который требуется настроить.

  3. В меню слева в разделе "Параметры" выберите "Сеть".

  4. На странице "Сеть" на вкладке "Общедоступный доступ" в разделе "Доступ к общедоступной сети" выберите "Отключено".

    Снимок экрана: портал Azure с параметрами сети ACR с выделенным общедоступным доступом и отключенным.

  5. В разделе "Исключение брандмауэра" установите флажок разрешить доверенным службы Майкрософт доступ к этому реестру контейнеров, а затем нажмите кнопку "Сохранить".

    Снимок экрана: параметры сети ACR с выделенным параметром

Назначение роли AcrPull

Создание сред с помощью образов контейнеров использует инфраструктуру ADE, включая проекты и типы сред. Каждый проект имеет один или несколько типов среды проекта, которые нуждаются в доступе на чтение к образу контейнера, определяющему среду для развертывания. Чтобы получить доступ к изображениям в ACR безопасно, назначьте роль AcrPull каждому типу среды проекта.

Чтобы назначить роль AcrPull типу среды проекта:

  1. В портал Azure перейдите к ACR, который требуется настроить.

  2. В меню слева выберите контроль доступа (IAM).

  3. Выберите Добавить>Добавить назначение ролей.

  4. Назначьте следующую роль. Подробные инструкции см. в статье Назначение ролей Azure с помощью портала Microsoft Azure.

    Параметр Значение
    Роль Выберите AcrPull.
    Назначение доступа Выберите "Пользователь", "Группа" или "Субъект-служба".
    Участники Введите имя типа среды проекта, который должен получить доступ к образу в контейнере.

    Тип среды проекта отображается следующим образом:

    Снимок экрана: область

В этой конфигурации ADE использует управляемое удостоверение для PET, назначаемое системой или назначаемое пользователем.

Совет

Это назначение роли должно быть сделано для каждого типа среды проекта. Его можно автоматизировать с помощью Azure CLI.

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

docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}

Подключение образа к определению среды

При создании определений среды для использования пользовательского образа в развертывании измените runner свойство в файле манифеста (environment.yaml или manifest.yaml).

runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"

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