Развертывание приложения с помощью пользовательского образа контейнера

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию конца жизни (EOL). Обратите внимание на использование и план соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

Примечание.

Azure Spring Apps — это новое название службы Azure Spring Cloud. Старое название будет еще некоторое время встречаться в наших материалах, пока мы не обновим ресурсы, такие как снимки экрана, видео и схемы.

Эта статья относится к: ✔️ Standard ✔️ Enterprise

В этой статье объясняется, как развернуть приложения Spring Boot в Azure Spring Apps с помощью пользовательского образа контейнера. Развертывание приложения с пользовательским контейнером поддерживает большинство функций, доступных при развертывании JAR-приложения. Другие приложения на Java и других языках также можно развернуть с помощью образа контейнера.

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

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

Примечание.

Веб-приложение должно прослушивать порт 1025 для стандартного плана и порта 8080 для плана Enterprise. Способ изменения порта зависит от платформы приложения. Например, укажите SERVER_PORT=1025 для приложений Spring Boot или ASPNETCORE_URLS=http://+:1025/ для приложений ASP.NET Core. Вы можете отключить пробу для приложений, которые не прослушивают порт. Дополнительные сведения см. в статье "Настройка проб работоспособности и льготных периодов завершения для приложений, размещенных в Azure Spring Apps".

Развертывание приложения

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

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

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

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Чтобы развернуть образ контейнера из ACR в приложении или из другого частного реестра в приложении, используйте следующую команду:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
       --container-registry <your-container-registry> \
       --registry-password <your-password> |
       --registry-username <your-username>
    

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

    --container-command "java" \
    --container-args "-jar /app.jar -Dkey=value"

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

    --disable-probe true

Таблица поддержки функций

В следующей матрице показано, какие функции поддерживаются в каждом типе приложения.

Функция Приложения Spring Boot — развертывание контейнера Приложения Polyglot — развертывание контейнера Примечания.
Управление жизненным циклом приложений ✔️ ✔️
Поддержка реестров контейнеров ✔️ ✔️
Назначение конечной точки ✔️ ✔️
Azure Monitor ✔️ ✔️
Интеграция APM ✔️ ✔️ Поддерживается ручной установкой.
Развертывание "синий/зеленый" ✔️ ✔️
Личный домен ✔️ ✔️
Масштабирование — автоматическое масштабирование ✔️ ✔️
Масштабирование — масштабирование вручную (вертикальное увеличение/уменьшение, горизонтальное увеличение/уменьшение) ✔️ ✔️
Управляемое удостоверение ✔️ ✔️
Spring Cloud Eureka & Config Server ✔️
Портал API для VMware Tanzu ✔️ ✔️ Только корпоративный план.
Spring Cloud Gateway для VMware Tanzu ✔️ ✔️ Только корпоративный план.
Служба конфигурации приложений для VMware Tanzu ✔️ Только корпоративный план.
Динамическое представление приложения для VMware Tanzu ✔️ Только корпоративный план.
Реестр служб VMware Tanzu ✔️ Только корпоративный план.
Виртуальная сеть ✔️ ✔️ Добавьте реестр в список разрешений в NSG или Брандмауэр Azure.
Исходящий IP-адрес ✔️ ✔️
Сквозной протокол TLS ✔️ ✔️ Доверяйте самозаверяющей ЦС.
Параметры активности и готовности ✔️ ✔️
Расширенное устранение неполадок — дамп потока, кучи или JFR ✔️ Изображение должно содержать Bash и JDK с PATH указанным.
Использование собственного хранилища ✔️ ✔️
Интеграция привязки службы с соединителем ресурсов ✔️
Зона доступности 1 ✔️ ✔️
События жизненного цикла приложения ✔️ ✔️
Уменьшенный размер приложения — 0,5 виртуальных ЦП и 512 МБ ✔️ ✔️
Автоматизация развертываний приложений с помощью Terraform ✔️ ✔️
Обратимое удаление ✔️ ✔️
Интерактивный процесс диагностики (на основе AppLens) ✔️ ✔️
SLA ✔️ ✔️

Примечание.

К приложениям Polyglot относятся приложения Java, NodeJS, AngularJS, Python и .NET, отличные от Spring Boot.

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

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

Доверие к центру сертификации

Существует два варианта доверия к центру сертификации:

Вариант 1. Отправка с помощью Azure Spring Apps

Сведения о загрузке сертификатов ЦС в приложения см. в статье "Использование TLS/SSL-сертификатов в приложении в Azure Spring Apps". Затем сертификаты будут подключены в расположение /etc/azure-spring-cloud/certs/public/.

Вариант 2. Установка вручную в образе

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

  • Вам необходимо импортировать приложения Java в хранилище доверия, добавив следующие строки в Dockerfile:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • Для приложений Node.js задайте переменную среды NODE_EXTRA_CA_CERTS:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • Для Python или других языков, зависящих от хранилища системного ЦС, в образах Debian или Ubuntu добавьте следующие переменные среды:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • Для Python или других языков, зависящих от хранилища системного ЦС, в образах CentOS or Fedora добавьте следующие переменные среды:

    ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/
    RUN /usr/bin/update-ca-trust
    

Как избежать непредвиденного поведения при изменении образов

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

Примечание.

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

Как избежать невозможности подключения к реестру контейнеров в виртуальной сети

Если вы развернули экземпляр в виртуальной сети, убедитесь, что вы разрешили сетевой трафик в реестр контейнеров в группе безопасности сети или Брандмауэре Azure (если используется). Дополнительные сведения см. в статье Обязательства клиента в отношении запуска в виртуальной сети, где описано добавление необходимых правил безопасности.

Установка APM в образ вручную

Этапы установки зависят от различных мониторов производительности приложений (APM) и языков. Ниже приведены шаги для New Relic с приложениями Java. Измените файл Dockerfile, выполнив следующие действия:

  1. Скачайте и установите файл агента в образ, добавив следующий код в Dockerfile:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Добавьте переменные среды, необходимые для APM:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Измените точку входа образа, добавив: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Чтобы установить агенты для других языков, см. официальную документацию для других агентов:

New Relic:

Dynatrace:

AppDynamics:

Просмотр журналов контейнера

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

az spring app logs \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --service <your-service-name> \
    --instance <your-instance-name>

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

AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"

Снимок экрана: Azure Monitor, на котором показан журнал событий контейнера.

Проверка образов на наличие уязвимостей

Мы рекомендуем использовать Microsoft Defender для облака с ACR, чтобы предотвратить уязвимость изображений. Дополнительные сведения см. в Microsoft Defender для облака

Переключение между развертыванием JAR и развертыванием контейнера

Вы можете переключить тип развертывания из JAR-развертывания в развертывание контейнера напрямую, повторно разверните его с помощью следующей команды:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

Или наоборот:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --artifact-path <your-jar-file> \
    --service <your-service-name>

Создание другого развертывания с существующим развертыванием JAR

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

az spring app deployment create \
    --resource-group <your-resource-group> \
    --name <your-deployment-name> \
    --app <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

CI/CD

Теперь поддерживаются автоматизация развертываний с помощью задач Azure Pipelines или GitHub Actions. Дополнительные сведения см. в статье "Автоматизация развертываний приложений в Azure Spring Apps" и использование CI/CD Azure Spring Apps с помощью GitHub Actions

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