Контейнеризация приложений ASP.NET и их миграция в Службу Azure Kubernetes

В этой статье рассказывается, как создать контейнеры на основе приложений ASP.NET и перенести их в Службу контейнеров Azure (AKS) с помощью средства контейнеризации приложений службы "Миграция Azure". Процесс контейнеризации приложений не требует доступа к базе кода и легко применяется к любым доступным приложениям. Этот инструмент анализирует состояние выполнения приложений на сервере для определения компонентов этих приложений и позволяет упаковать их в образ контейнера. Готовый контейнер приложения можно развернуть в Службе Azure Kubernetes (AKS).

В настоящее время поддерживается средство миграции Azure:

  • Контейнеризация приложений ASP.NET и их развертывание в виде контейнеров Windows в Службе Azure Kubernetes.
  • Контейнеризация приложений ASP.NET и их развертывание в виде контейнеров Windows в Службе приложений Azure. Подробнее.
  • Контейнеризация веб-приложений Java в Apache Tomcat (на серверах Linux) и их развертывание на контейнерах Linux в AKS. Подробнее.
  • Контейнеризация веб-приложений Java на серверах Linux и развертывание их на контейнерах Linux на Служба приложений. Подробнее.

Средство миграции Azure: средство контейнеризации приложений помогает:

  • Обнаружение приложения. Это средство подключается к удаленным серверам, выполняющим приложения ASP.NET, и обнаруживает компоненты этих приложений. Инструмент создает Dockerfile, на основе которого можно создать образ контейнера для приложения.
  • Сборка образа контейнера. Вы можете проверить и дополнительно настроить Dockerfile в соответствии с требованиями к приложению и применить его для сборки образа контейнера этого приложения. Образ контейнера приложения передается в указанный вами Реестр контейнеров Azure.
  • Выполнить развертывание в службе Azure Kubernetes: затем средство создает YAML-файлы определения ресурсов Kubernetes, необходимые для развертывания контейнерного приложения в кластере службы Azure Kubernetes. Вы можете настроить эти YAML-файлы и использовать их для развертывания приложения в AKS.

Примечание.

Инструмент контейнеризации приложений службы "Миграция Azure" помогает обнаруживать приложения определенных типов (ASP.NET и веб-приложения Java в Apache Tomcat) и их компоненты на сервере приложений. Чтобы обнаружить серверы и составить список приложений, ролей и функций, выполняемых на локальных компьютерах, используйте возможность обнаружения и оценки службы "Миграция Azure". Подробнее

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

  • Улучшенное использование инфраструктуры. При использовании контейнеров несколько приложений могут совместно использовать ресурсы и размещаться в одной инфраструктуре. Это способствует консолидации инфраструктуры и улучшению ее использования.
  • Упрощенное управление. Размещение приложений на современной управляемой платформе, такой как AKS и Служба приложений, позволяет упростить методики управления. Вы сможете полностью или частично отказаться от тех процессов обслуживания инфраструктуры и управления ею, которые вы бы раньше выполняли для собственной инфраструктуры.
  • Переносимость приложений . При увеличении внедрения и стандартизации форматов спецификаций контейнеров и платформ переносимость приложений больше не является проблемой.
  • Внедрение современного управления с помощью DevOps — помогает внедрять и стандартизировать современные методики управления и безопасности и перехода на DevOps.

Из этого руководства вы узнаете, как выполнять следующие задачи:

  • Настройка учетной записи Azure.
  • Установка инструмента контейнеризации приложений службы "Миграция Azure".
  • Выполнить обнаружение нужного приложения ASP.NET.
  • Создание образа контейнера.
  • Развертывание контейнерного приложения в AKS.

Примечание.

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

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

Для работы с этим руководством вам потребуется:

Требование Сведения
Выбор компьютера для установки инструмента Компьютер с Windows для установки и запуска инструмента контейнеризации приложений службы "Миграция Azure". Можно использовать компьютер с серверной (Windows Server 2016 или более поздней версии) или клиентской (Windows 10) операционной системой, то есть этот инструмент можно запустить даже на обычном компьютере.

Компьютер с Windows, на котором будет выполняться данный инструмент, должен иметь сетевое подключение к серверам или виртуальным машинам, где размещены приложения ASP.NET, для которых создаются контейнеры.

Убедитесь, что на компьютере с Windows, на котором будет выполняться инструмент контейнеризации приложений службы "Миграция Azure", доступно не менее 6 ГБ свободного пространства для хранения артефактов приложений.

Этот компьютер с Windows должен иметь доступ к Интернету (напрямую или через прокси-сервер).

Установите инструмент веб-развертывания (Майкрософт) на компьютере, на котором выполняется вспомогательный инструмент контейнеризации приложений, а также на сервере приложений, если этот инструмент еще не установлен. Скачать это средство можно отсюда.
Серверы приложений Включите удаленное взаимодействие PowerShell на серверах приложений: войдите на сервер приложений и выполните следующие инструкции, чтобы включить удаленное взаимодействие PowerShell.

Убедитесь, что на сервере приложений установлено ПО PowerShell 5.1. Следуйте инструкциям в разделе "Установка и настройка WMF 5.1 ", чтобы скачать и установить PowerShell 5.1 на сервере приложений.

Установите инструмент веб-развертывания (Майкрософт) на компьютере, на котором выполняется вспомогательный инструмент контейнеризации приложений, а также на сервере приложений, если этот инструмент еще не установлен. Скачать это средство можно отсюда.
Приложение ASP.NET В настоящее время это средство поддерживает:
— приложения ASP.NET, использующие Microsoft .NET Framework версии 3.5 или более поздней;
— Серверы приложений под управлением Windows Server 2012 R2 или более поздней версии (серверы приложений должны работать под управлением PowerShell версии 5.1).
— приложения, работающие под управлением служб IIS версии 7.5 или более поздней.

В настоящее время средство не поддерживает:
— Приложения, требующие проверки подлинности Windows (в настоящее время средство контейнеризации приложений не поддерживает gMSA).
— приложения, которые зависят от других служб Windows, размещенных за пределами IIS.

Подготовка учетной записи пользователя Azure

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

После настройки подписки вам потребуется учетная запись пользователя Azure:

  • Разрешения владельца для подписки Azure.
  • Разрешения на регистрацию приложений Microsoft Entra.

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

  1. На портале Azure выполните поиск по фразе "подписки" и в разделе Службы выберите Подписки.

    Screenshot of search box to search for the Azure subscription.

  2. На странице Подписки выберите подписку, в которой нужно создать проект службы "Миграция Azure".

  3. Выберите Управление доступом (IAM) .

  4. Выберите Добавить>Добавить назначение ролей, чтобы открыть страницу Добавление назначения ролей.

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

    Параметр Value
    Роль Ответственный
    Назначить доступ для User
    Участники azmigrateuser (в этом примере)

    Screenshot of add role assignment page in Azure portal.

  6. Вашей учетной записи Azure также требуются разрешения для регистрации приложений Microsoft Entra.

  7. В портал Azure перейдите к Параметры пользователей>идентификатора Microsoft Entra ID>User Параметры.

  8. В параметрах пользователей убедитесь, что пользователи Microsoft Entra могут регистрировать приложения (по умолчанию задано значение "Да ").

    Screenshot of verification in User Settings if users can register Active Directory apps.

  9. Если для параметра "Регистрация приложений" задано значение "Нет", попросите администратора арендатора или глобального администратора назначить необходимое разрешение. Кроме того, администратор клиента или глобального администратора может назначить роль разработчика приложений учетной записи, чтобы разрешить регистрацию приложения Microsoft Entra. Подробнее.

Скачивание и установка инструмента контейнеризации приложений службы "Миграция Azure"

  1. Скачайте на компьютер с Windows установщик инструмента контейнеризации приложений службы "Миграция Azure".

  2. Запустите PowerShell в режиме администратора и перейдите в сеансе PowerShell к папке, содержащей установщик.

  3. Выполните сценарий установки с помощью такой команды:

    .\AppContainerizationInstaller.ps1
    

Примечание.

Для Windows Server 2022 измените строку 135 и удалите PowerShell-ISE ее из списка компонентов, так как она больше не поддерживается.

Запуск инструмента контейнеризации приложений

  1. Откройте браузер на любом компьютере, который может подключиться к компьютеру с Windows, на котором запущен инструмент контейнеризации приложений, и откройте URL-адрес этого инструмента: https://имя или IP-адрес компьютера:44369.

    Вы можете также открыть приложение на рабочем столе, щелкнув его ярлык.

  2. Если появится предупреждение о том, что ваше подключение не закрыто, выберите "Дополнительно " и перейдите к веб-сайту. Такое предупреждение появляется в том случае, если веб-интерфейс использует самозаверяющий сертификат TLS/SSL.

  3. На экране входа используйте учетную запись локального администратора на компьютере для входа.

  4. В качестве типа приложения, которое требуется контейнеризовать, выберите веб-приложения ASP.NET.

  5. Чтобы указать целевую службу Azure, щелкните Containers on Azure App Service (Контейнеры в Службе Azure Kubernetes).

    Screenshot of default load-up for App Containerization tool.

Предварительные требования к средству

  1. Примите условия лицензии и прочитайте информацию от сторонних производителей.
  2. В веб-приложении >средства настройте необходимые компоненты, выполните следующие действия.
    • Connectivity (Подключение). Инструмент убедится, что у компьютера с Windows есть доступ к Интернету. Если компьютер использует прокси-сервер:
      • Выберите Настроить прокси-сервер, чтобы указать адрес прокси-сервера (в форме IP-адреса или полное доменное имя) и порт прослушивания.
      • Укажите учетные данные, если для прокси-сервера требуется аутентификация.
      • Поддерживается только прокси-сервер HTTP.
      • Если вы добавили сведения о прокси-сервере или отключили прокси-сервер или проверку подлинности, нажмите кнопку "Сохранить", чтобы активировать подключение проверка снова.
    • Install updates (Установить обновления). Инструмент автоматически проверит наличие обновлений и установит их. Вы также можете вручную установить последнюю версию средства, которая доступна здесь.
    • Install Microsoft Web Deploy tool (Установка средства веб-развертывания корпорации Майкрософт). Средство убедится, что на компьютере под управлением Windows, на котором работает средство контейнеризации приложений службы "Миграция Azure", установлено средство веб-развертывания корпорации Майкрософт.
    • Enable PowerShell remoting (Включение удаленного взаимодействия PowerShell). Средство напомнит вам, что нужно включить удаленное взаимодействие PowerShell на серверах приложений, которые выполняют контейнеризуемые приложения ASP.NET.

Вход в Azure

  1. Выберите Войти, чтобы войти в учетную запись Azure.

  2. Для аутентификации в Azure вам потребуется код устройства. При нажатии кнопки входа откроется модальный код устройства.

  3. Выберите "Копировать код" и войдите, чтобы скопировать код устройства и открыть запрос на вход Azure на новой вкладке браузера. Если он не отображается, убедитесь, что вы отключили блокировщик всплывающих окон в браузере.

    Screenshot of modal showing device code.

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

  5. Выберите арендатор Azure AD, который вы хотите использовать.

  6. Укажите подписку Azure, которую нужно использовать.

Обнаружение приложений ASP.NET

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

  1. Укажите IP-адрес или полное доменное имя и учетные данные для сервера, на котором работает приложение ASP.NET и к которому вы намерены удаленно подключиться для обнаружения приложений.

    • Необходимо предоставить учетные данные для локального администратора Windows на сервере приложений.
    • Для учетных записей домена (пользователь должен быть администратором на сервере приложений), префикс имени пользователя с доменным именем в формате <domain\username>.
    • Обнаружение приложений можно запустить не более чем для пяти серверов за раз.
  2. Выберите Проверить, чтобы убедиться, что сервер приложений доступен с того компьютера, на котором запущено средство, и что предоставлены допустимые учетные данные. После успешной проверки в столбце состояния отобразится состояние Mapped (Сопоставлено).

    Screenshot for server IP and credentials.

  3. Выберите Продолжить, чтобы запустить обнаружение приложений на выбранных серверах приложений.

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

    Screenshot for discovered ASP.NET application.

  5. Установите флажки для тех приложений, которые нужно контейнеризовать.

  6. Specify container name (Укажите имя контейнера). Введите имя целевого контейнера для каждого выбранного приложения. Имя контейнера должно иметь формат <name:tag>, где тег используется для образа контейнера. Например, можно указать имя приложения appname:v1.

Параметризация конфигурации приложений

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

  1. Выберите конфигурации приложений, чтобы просмотреть обнаруженные конфигурации.

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

  3. Завершив выбор конфигураций для параметризации, щелкните Применить.

    Screenshot for app configuration parameterization ASP.NET application.

Настройка внешних зависимостей файловой системы

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

  1. Щелкните Правка в разделе "Папки приложения", чтобы проверить обнаруженные папки приложения. Обнаруженные папки приложений определяются как обязательные для приложения артефакты и будут скопированы в образ контейнера.

  2. Щелкните Добавить папки и укажите пути к папкам, которые вам нужно добавить.

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

  4. Выберите вариант хранилища Persistent Volume (Постоянный том), если вам нужно хранить эти папки на постоянном томе за пределами контейнера.

  5. Нажмите кнопку "Сохранить " после просмотра папок приложения. Screenshot for app volumes storage selection.

  6. Выберите Продолжить, чтобы перейти к этапу сборки образа контейнера.

Создание образа контейнера

Внимание

Если вы используете AKS 1.23+, измените скрипты, как показано ниже перед созданием образа Docker, чтобы обеспечить простую миграцию.

Измените приведенный ниже скрипт

# Run entrypoint script.
COPY ./Entryscript.ps1 c:/Entryscript.ps1
ENTRYPOINT powershell c:/Entryscript.ps1

до

# Run entrypoint script.
COPY ["./Entryscript.ps1", "c:/Entryscript.ps1"]
ENTRYPOINT ["powershell", "c:/Entryscript.ps1"]

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

  1. Выберите реестр контейнеров Azure. Из раскрывающегося списка выберите Реестр контейнеров Azure, который нужно использовать для сборки и хранения образов контейнеров приложений. Вы можете выбрать уже существующий Реестр контейнеров Azure или создать новый прямо сейчас, выбрав параметр "Create new registry" (Создать реестр).

    Screenshot for app ACR selection.

  2. Просмотрите Dockerfile: Dockerfile, необходимый для создания образов контейнеров для каждого выбранного приложения, создается в начале шага сборки. Выберите Проверить для просмотра Dockerfile. На этапе проверки вы можете внести в Dockerfile любые требуемые изменения и сохранить их до начала сборки.

  3. Процесс сборки триггера: выберите приложения для создания образов и выберите " Сборка". При выборе сборки будет запущена сборка образа контейнера для каждого приложения. Инструмент постоянно отслеживает состояние сборки и позволяет перейти к следующему шагу только после успешного завершения сборки.

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

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

    Screenshot for app container image build completion.

Развертывание контейнерного приложения в AKS

Следующим этапом после сборки образа является развертывание приложения в виде контейнера в Службе Azure Kubernetes (AKS).

  1. Выберите кластер Службы Azure Kubernetes. Укажите кластер AKS, в котором нужно развернуть это приложение.

    • Выбранный кластер AKS должен иметь пул узлов Windows.
    • В этом кластере необходимо настроить извлечение образов из Реестра контейнеров Azure, который вы ранее выбрали для хранения образов.
      • Чтобы подключить кластер AKS к Реестру контейнеров Azure, выполните приведенную ниже команду в интерфейсе командной строки Azure.
        az aks update -n <cluster-name> -g <cluster-resource-group> --attach-acr <acr-name>
        
    • Если у вас нет кластера AKS или вы хотите создать новый кластер AKS для развертывания приложения, вы можете создать его из средства, нажав кнопку "Создать новый кластер AKS".
      • Созданный с помощью средства кластер AKS будет автоматически дополнен пулом узлов Windows. Также для этого кластера будет настроено извлечение образов из ранее созданного Реестра контейнеров Azure, если вы выбрали такой вариант.
    • Нажмите кнопку "Продолжить " после выбора кластера AKS.
  2. Укажите хранилище секретов. Если вы выбрали вариант параметризации конфигурации приложений, укажите хранилище секретов, которое необходимо использовать для приложения. Для управления секретами приложения можно выбрать Azure Key Vault или параметры приложения Службы приложений. Подробнее

    • Если вы выбрали Служба приложений параметры приложения для управления секретами, нажмите кнопку "Продолжить".
    • Если для управления секретами приложения вы хотите использовать Azure Key Vault, укажите хранилище Azure Key Vault, которое нужно использовать.
      • Если у вас нет Azure Key Vault или вы хотите создать новое хранилище ключей, вы можете создать его из средства, нажав кнопку "Создать azure Key Vault".
      • Средство автоматически назначит необходимые разрешения для управления секретами с помощью Key Vault.
  3. Укажите общую папку Azure. Если вы ранее добавили дополнительные папки и выбрали хранение данных на постоянном томе, здесь нужно выбрать общую папку Azure, которую инструмент контейнеризации приложений службы "Миграция Azure" будет использовать в процессе развертывания. В этой общей папке Azure инструмент создаст каталоги для копирования всех папок приложений, для которых было выбрано хранение на постоянном томе. Когда развертывание приложения завершится, инструмент очистит общую папку Azure, то есть удалит все созданные ранее каталоги.

    • Если у вас нет общей папки Azure или вы хотите создать новую общую папку Azure, вы можете создать ее из средства, выбрав "Создать новую служба хранилища учетную запись и общую папку".
  4. Конфигурация развертывания приложения. После завершения всех описанных выше шагов вам нужно лишь указать конфигурацию развертывания для приложения. Выберите Настроить, чтобы изменить развертывание для приложения. На этапе настройки вы можете изменить следующие параметры:

    • Prefix string (Строка префикса): эта строка будет использоваться как префикс имени для всех ресурсов, которые создаются для контейнерного приложения в кластере AKS.
    • SSL certificate (SSL-сертификат): если приложению требуется привязка к сайту http, укажите здесь PFX-файл с сертификатом, который будет использоваться для этой привязки. Этот PFX-файл не должен быть защищен паролем, а исходный сайт не должен использовать несколько привязок.
    • Replica Sets (Наборы реплик): укажите количество экземпляров (pod) приложения, которые должны выполняться внутри контейнеров.
    • Load balancer type (Тип подсистемы балансировки нагрузки): выберите параметр External (Внешняя), если контейнерное приложение должно быть доступно из публичных сетей.
    • Application Configuration (Конфигурация приложения): для всех параметризованных конфигураций приложения здесь нужно указать конкретные значения для текущего развертывания.
    • Storage (Хранилище): для всех папок приложения, для которых настроено хранение в постоянном томе, нужно указать, будут ли все экземпляры приложения использовать один том или следует инициализировать отдельный том для каждого экземпляра в контейнере. По умолчанию все папки приложений на постоянных томах настраиваются как совместно используемые.
    • Нажмите кнопку "Применить" , чтобы сохранить конфигурацию развертывания.
    • Нажмите кнопку "Продолжить", чтобы развернуть приложение.

    Screenshot for deployment app configuration.

  5. Разверните приложение. Как только вы сохраните конфигурацию развертывания для приложения, инструмент создаст для этого приложения YAML-файл для развертывания в Kubernetes.

    • Выберите "Рецензирование ", чтобы просмотреть и настроить YAML развертывания Kubernetes для приложений.

    • Выберите приложение для развертывания.

    • Выберите "Развернуть", чтобы начать развертывания для выбранных приложений

      Screenshot for app deployment configuration.

    • После развертывания приложения можно выбрать столбец состояния развертывания, чтобы отслеживать ресурсы, развернутые для приложения.

Скачивание созданных артефактов

Все артефакты, которые используются для сборки и развертывания приложения в AKS, включая Dockerfile и YAML-файлы спецификации Kubernetes, сохраняются на том компьютере, где был запущен инструмент. Эти артефакты находятся в папке C:\ProgramData\Microsoft Azure Migrate App Containerization.

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

Устранение неполадок

Для устранения неполадок, которые могут возникнуть при работе с этим инструментом, изучите файлы журнала на компьютере с Windows, на котором выполняется инструмент контейнеризации приложений. Файлы журнала инструмента расположены в папке C:\ProgramData\Microsoft Azure Migrate App Containerization\Logs.

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

  • Контейнеризация веб-приложений ASP.NET и их развертывание в контейнерах Windows в Службе приложений. Подробнее.
  • Контейнеризация веб-приложений Java в Apache Tomcat (на серверах Linux) и их развертывание в виде контейнеров Linux в службе AKS. Подробнее.
  • Контейнеризация веб-приложений Java в Apache Tomcat (на серверах Linux) и их развертывание в виде контейнеров Linux в Службе приложений. Подробнее.