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


Развертывание приложения Java с помощью Open Liberty или WebSphere Liberty в кластере Azure Kubernetes Service (AKS)

В этой статье демонстрируются следующие возможности.

  • Запустите приложение Java, Java EE, Jakarta EE или MicroProfile в среде выполнения Open Liberty или IBM WebSphere Liberty.
  • Создайте образ Docker приложения с az acr build помощью образов контейнеров Open Liberty или WebSphere Liberty.
  • Разверните контейнерное приложение в кластере Служба Azure Kubernetes (AKS) с помощью оператора Open Liberty или WebSphere Liberty Operator.

Open Liberty Operator упрощает развертывание приложений, работающих в кластерах Kubernetes, и управление ими. С помощью оператора Open Liberty или Оператора WebSphere Liberty вы также можете выполнять более сложные операции, такие как сбор трассировок и дампов.

В этой статье используется предложение Azure Marketplace для Open Liberty или WebSphere Liberty, чтобы ускорить переход к AKS. Предложение автоматически выделяет некоторые ресурсы Azure, включая:

  • Экземпляр реестра контейнеров Azure.
  • Кластер AKS.
  • Экземпляр Шлюза приложений контроллера входящего трафика (AGIC).
  • Оператор Open Liberty и Оператор WebSphere Liberty.
  • При необходимости, образ контейнера, включающий Liberty и ваше приложение.

Если вы предпочитаете пошаговое руководство вручную для запуска Liberty в AKS, ознакомьтесь с инструкциями по ручному развертыванию Java-приложения с использованием Open Liberty или WebSphere Liberty в кластере службы Azure Kubernetes (AKS).

Эта статья предназначена, чтобы помочь вам быстро приступить к развертыванию. Прежде чем перейти в рабочую среду, ознакомьтесь с документацией IBM по настройке Liberty.

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

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

Создайте развертывание Liberty на AKS с помощью портала

Следующие инструкции предназначены для создания среды выполнения Liberty в службе AKS. После выполнения этих действий у вас будет экземпляр реестра контейнеров и кластер AKS для развертывания контейнерного приложения.

  1. Переход на портал Azure. В поле поиска в верхней части страницы введите WebSphere Liberty/Open Liberty в Kubernetes. Когда появятся предложения, выберите единственное совпадение в разделе Marketplace.

    Если вы предпочитаете, вы можете перейти непосредственно к предложению.

  2. Нажмите кнопку создания.

  3. На панели "Основные сведения":

    1. Создание группы ресурсов Так как группы ресурсов должны быть уникальными в подписке, выберите уникальное имя. Простой способ использовать уникальные имена — использовать сочетание инициалогов, сегодняшней даты и некоторых идентификаторов (например, ejb0913-java-liberty-project-rg). Сохраните имя группы ресурсов для дальнейшего использования в этой статье.
    2. Для региона выберите регион, который находится рядом с вами. Например, выберите "Восточная часть США 2".
  4. Выберите Далее. На панели AKS можно по желанию выбрать существующий кластер AKS и экземпляр реестра контейнеров, вместо того чтобы создавать новые. Этот выбор позволяет использовать шаблон сайдкара, как показано в Центре архитектуры Azure. Вы также можете настроить параметры размера и количества виртуальных машин в пуле узлов AKS.

    В целях этой статьи просто сохраните все значения по умолчанию на этой панели.

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

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

    • Для TLS/SSL-сертификата можно указать TLS/SSL-сертификат из Шлюз приложений Azure. Оставьте значения по умолчанию, чтобы предложение сгенерировало самоподписанный сертификат.

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

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

  6. Выберите Далее. В области операторов и приложений эта статья использует все значения по умолчанию. Однако можно настроить следующие параметры развертывания:

    • Вы можете развернуть оператор WebSphere Liberty, выбрав "Да" для параметра Поддерживается IBM?. Если оставить по умолчанию Нет, развертывается оператор Open Liberty.
    • Вы можете развернуть приложение для выбранного оператора, нажав кнопку "Да " для параметра "Развернуть приложение?". Выход из значения по умолчанию No не развертывает ни одно приложение.
  7. Чтобы проверить параметры, выберите Просмотр и создание. На панели "Рецензирование и создание", когда Создать станет доступным после прохождения проверки, выберите его.

    Развертывание может занять до 20 минут. Пока вы ожидаете завершения развертывания, выполните действия, описанные в разделе "Создание экземпляра База данных SQL Azure". После завершения этого раздела вернитесь сюда и продолжайте работу.

Извлечение выбранной информации из развертывания

Если вы отошли от экрана 'Развертывание в процессе', в следующих шагах показано, как вернуться на этот экран. Если вы все еще находитесь на панели, где показано , что развертывание завершено, перейдите в только что созданную группу ресурсов и перейдите к третьему шагу.

  1. В углу любой страницы портала нажмите кнопку меню и выберите группы ресурсов.

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

  3. В списке ресурсов в группе ресурсов выберите ресурс со значением типа реестра контейнеров.

  4. В области навигации в разделе "Параметры" выберите ключи доступа.

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

    Примечание.

    В этой статье используется команда az acr build для создания и отправки образа Docker в реестр контейнеров без использования username и password из реестра контейнеров. Имя пользователя и пароль по-прежнему можно использовать с docker login и docker push. Использование имени пользователя и пароля менее безопасно, чем проверка подлинности без пароля.

  6. Вернитесь к группе ресурсов, в которой развернуты ресурсы.

  7. В разделе Параметры выберите Развертывания.

  8. Выберите самое нижнее развертывание в списке. Значение имени развертывания соответствует идентификатору издателя предложения. Он содержит строку ibm.

  9. На панели навигации выберите выходные данные.

  10. Используя тот же метод копирования, что и с предыдущими значениями, сохраните значения для следующих выходных данных:

    • cmdToConnectToCluster

    • appDeploymentTemplateYaml Если развертывание не включает приложение. То есть вы выбрали "Нет " для развертывания приложения? При развертывании предложения Marketplace. В этой статье выбрано No. Однако если выбрано "Да", сохраните значение appDeploymentYaml, которое включает развертывание приложения.

      Вставьте значение appDeploymentTemplateYaml или appDeploymentYaml в оболочку Bash и выполните команду.

      Вывод этой команды — YAML-файл развертывания приложения. Найдите секрет TLS для входа с ключевым словом secretName, например - secretName: secret785e2c. Отложите в сторону значение secretName.

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

export RESOURCE_GROUP_NAME=<your-resource-group-name>
export REGISTRY_NAME=<your-registry-nam-of-container-registry>
export LOGIN_SERVER=<your-login-server-of-container-registry>
export INGRESS_TLS_SECRET=<your-ingress-tls-secret-name>

Создание экземпляра Базы данных SQL Azure

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

Сначала задайте переменные среды, связанные с базой данных. Замените <your-unique-sql-server-name> уникальным именем сервера База данных SQL Azure.

export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb

Выполните следующую команду в терминале, чтобы создать одну базу данных в Azure SQL Database и назначить текущего вошедшего в систему пользователя администратором Microsoft Entra. Дополнительные сведения см. в Кратком руководстве: Создание одной базы данных — Azure SQL Database.

export ENTRA_ADMIN_NAME=$(az account show --query user.name --output tsv)

az sql server create \
    --name $SQL_SERVER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --enable-ad-only-auth \
    --external-admin-principal-type User \
    --external-admin-name $ENTRA_ADMIN_NAME \
    --external-admin-sid $(az ad signed-in-user show --query id --output tsv)
az sql db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name $DB_NAME \
    --edition GeneralPurpose \
    --compute-model Serverless \
    --family Gen5 \
    --capacity 2

Затем добавьте локальный IP-адрес в правила брандмауэра сервера База данных SQL Azure, чтобы разрешить локальному компьютеру подключаться к базе данных для локального тестирования позже.

export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az sql server firewall-rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS

Примечание.

В этой статье отключается проверка подлинности SQL для демонстрации рекомендаций по обеспечению безопасности. Идентификатор Microsoft Entra используется для проверки подлинности подключения к серверу. Если необходимо включить проверку подлинности SQL, см. раздел az sql server create.

Создание подключения к службе в AKS через Service Connector

В этом разделе вы создаете подключение службы между кластером AKS и базой данных SQL Azure с использованием Идентификатора рабочей нагрузки Microsoft Entra и Service Connector. Это подключение позволяет кластеру AKS получить доступ к База данных SQL Azure без использования проверки подлинности SQL.

Сначала предоставьте приложению Azure Service Connector Resource Provider разрешения на уже развернутый шлюз приложений. Этот шаг необходим для успешного создания подключения к службе между кластером AKS и База данных SQL Azure.

  1. Перейдите к портал Azure и перейдите к созданной ранее группе ресурсов.
  2. В списке ресурсов в группе ресурсов выберите ресурс со значением типа шлюза приложений.
  3. Выберите Управление доступом (IAM). Затем разверните «Добавить» и выберите «Добавить назначение ролей».
  4. На вкладке "Роль" выберите роли привилегированного администратора. Затем выберите "Участник". Выберите Далее.
  5. На вкладке "Участники" выберите "Выбрать участников". Затем найдите приложение Azure Service Connector Resource Provider. Выберите приложение и нажмите кнопку "Выбрать". Выберите Далее.
  6. Выберите Проверить и присвоить. Подождите несколько секунд, пока назначение роли завершится.

Затем выполните следующие команды, чтобы создать соединение между кластером AKS и базой данных SQL, используя Workload ID Microsoft Entra с коннектором службы. Дополнительные сведения см. в статье Создание подключения к службе в AKS с использованием Service Connector (предварительная версия).

# Register the Service Connector and Kubernetes Configuration resource providers
az provider register --namespace Microsoft.ServiceLinker --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait

# Install the Service Connector passwordless extension
az extension add --name serviceconnector-passwordless

# Retrieve the AKS cluster and Azure SQL Server resource IDs
export AKS_CLUSTER_RESOURCE_ID=$(az aks show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --query id \
    --output tsv)
export AZURE_SQL_SERVER_RESOURCE_ID=$(az sql server show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $SQL_SERVER_NAME \
    --query id \
    --output tsv)

# Create a user-assigned managed identity used for workload identity
export USER_ASSIGNED_IDENTITY_NAME=workload-identity-uami
az identity create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name ${USER_ASSIGNED_IDENTITY_NAME}

# Retrieve the user-assigned managed identity resource ID
export UAMI_RESOURCE_ID=$(az identity show \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name ${USER_ASSIGNED_IDENTITY_NAME} \
    --query id \
    --output tsv)

# Create a service connection between your AKS cluster and your SQL database using Microsoft Entra Workload ID
az aks connection create sql \
    --connection akssqlconn \
    --client-type java \
    --source-id $AKS_CLUSTER_RESOURCE_ID \
    --target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \
    --workload-identity $UAMI_RESOURCE_ID

Примечание.

Мы рекомендуем использовать Microsoft Entra Workload ID для безопасного доступа к базе данных Azure SQL без использования SQL-аутентификации. Если необходимо использовать проверку подлинности SQL, пропустить предыдущие шаги в этом разделе и использовать имя пользователя и пароль для подключения к База данных SQL Azure.

Получите учетную запись и секрет, созданные коннектором сервисов.

Чтобы выполнить проверку подлинности в базе данных Azure SQL, необходимо получить учетную запись службы и секрет, созданный служебным соединителем. Следуйте инструкциям в разделе "Обновление контейнера" руководства. Подключение приложения AKS к База данных SQL Azure. Выполните параметр "Напрямую создать развертывание" с помощью предоставленного фрагмента кода YAML и выполните следующие действия.

  1. Из выделенных разделов в примере YAML развертывания Kubernetes значения serviceAccountName и secretRef.name скопируйте, как показано в следующем примере.

    serviceAccountName: <service-account-name>
    containers:
    - name: raw-linux
       envFrom:
          - secretRef:
             name: <secret-name>
    
  2. Используйте следующие команды для определения переменных среды. Замените <service-account-name> и <secret-name> значениями, скопированными на предыдущем шаге.

    export SERVICE_ACCOUNT_NAME=<service-account-name>
    export SECRET_NAME=<secret-name>
    

    Эти значения используются в следующем разделе для развертывания приложения Liberty в кластере AKS.

Примечание.

Секрет, созданный соединителем службы, содержит AZURE_SQL_CONNECTIONSTRING, который представляет собой строку подключения без пароля к базе данных SQL Azure. Дополнительные сведения см. в примере значения в разделе Аутентификация управляемым удостоверением, назначаемым пользователем документа 'Интеграция базы данных Azure SQL с соединителем службы'.

Теперь, когда вы настроили базу данных и кластер AKS, можно перейти к подготовке AKS к размещению приложения Open Liberty.

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

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

Ознакомьтесь с приложением

Клонируйте пример кода для этой статьи. Пример размещен на сайте GitHub.

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

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20241107

Если вы увидите сообщение о нахождении в режиме "detached HEAD", вы можете его спокойно игнорировать. Сообщение просто означает, что вы проверили тег.

Ниже приведена структура файлов приложения с важными файлами и каталогами:

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ openlibertyapplication-agic-passwordless-db.yaml
│  ├─ docker/
│  │  ├─ Dockerfile
│  │  ├─ Dockerfile-wlp
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ pom.xml
├─ pom-azure-identity.xml

Каталоги java, java и webapp содержат исходный код примера приложения. В коде объявлен и используется источник данных с именем jdbc/JavaEECafeDB.

В каталоге aks файл openlibertyapplication-agic-passwordless-db.yaml используется для развертывания образа приложения с помощью AGIC и без пароля подключения к База данных SQL Azure. В этой статье предполагается, что вы используете этот файл.

В каталоге Docker есть два файла для создания образа приложения с помощью Open Liberty или WebSphere Liberty.

В каталоге liberty/config файл server.xml используется для настройки подключения к базе данных для кластера Open Liberty и WebSphere Liberty. Он определяет переменнуюazure.sql.connectionstring, используемую для подключения к База данных SQL Azure.

Файл pom.xml — это файл объектной модели проекта Maven, содержащий сведения о конфигурации проекта. Файл pom-azure-identity.xml объявляет зависимость от azure-identity. Этот файл используется для проверки подлинности в службах Azure с помощью идентификатора Microsoft Entra.

Примечание.

В этом примере используется библиотека azure-identity для аутентификации в базу данных Azure SQL с помощью аутентификации Microsoft Entra. Если вам нужно использовать аутентификацию SQL в приложении Liberty, см. Реляционные подключения к базе данных с JDBC.

Сборка проекта

Теперь, когда вы собрали необходимые свойства, создайте приложение. Файл POM для проекта считывает множество переменных из среды. В рамках сборки Maven эти переменные используются для заполнения значений в файлах YAML, расположенных в src/main/aks. Вы можете сделать что-то подобное для приложения за пределами Maven, если вы предпочитаете.

cd $BASE_DIR/java-app
# The following variables are used for deployment file generation into the target.
export LOGIN_SERVER=${LOGIN_SERVER}
export SC_SERVICE_ACCOUNT_NAME=${SERVICE_ACCOUNT_NAME}
export SC_SECRET_NAME=${SECRET_NAME}
export INGRESS_TLS_SECRET=${INGRESS_TLS_SECRET}

mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources

Тестирование проекта локально

Запустите и протестируйте проект локально перед развертыванием в Azure. Для удобства в этой статье используется liberty-maven-plugin. Дополнительные сведения см. в статье Open Liberty «Создание веб-приложения с помощью Maven».

Примечание.

Если выбрано развертывание базы данных без сервера, убедитесь, что база данных SQL не вошла в режим приостановки. Одним из способов сделать это является вход в систему через редактор запросов базы данных, как описано в руководстве "Quickstart: Используйте редактор запросов портала Azure (предварительная версия) для запроса базы данных SQL Azure".

  1. Запустите приложение с помощью liberty:run.

    cd $BASE_DIR/java-app
    
    # The value of environment variable AZURE_SQL_CONNECTIONSTRING is read by configuration variable `azure.sql.connectionstring` in server.xml
    export AZURE_SQL_CONNECTIONSTRING="jdbc:sqlserver://$SQL_SERVER_NAME.database.windows.net:1433;databaseName=$DB_NAME;authentication=ActiveDirectoryDefault"
    mvn liberty:run
    
  2. Убедитесь, что приложение работает правильно. Вы должны увидеть сообщение, аналогичное [INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 18.235 seconds., в выводе команды. http://localhost:9080/ Перейдите в браузер и убедитесь, что приложение доступно и все функции работают.

  3. Нажмите клавиши CTRL+C, чтобы остановиться. Нажмите клавишу Y , если вам будет предложено завершить пакетное задание.

По завершении удалите правило брандмауэра, позволяющее локальному IP-адресу получить доступ к База данных SQL Azure с помощью следующей команды:

az sql server firewall-rule delete \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP

Создание образа для развертывания AKS

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

cd $BASE_DIR/java-app/target

az acr build \
    --registry ${REGISTRY_NAME} \
    --image javaee-cafe:v1 \
    .

Команда az acr build отправляет артефакты, указанные в Dockerfile, в экземпляр реестра контейнеров, создает образ и сохраняет его в экземпляре реестра контейнеров.

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

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

  1. Подключитесь к кластеру AKS.

    Вставьте значение cmdToConnectToCluster в оболочку и выполните команду.

  2. Примените файл развертывания, выполнив следующие команды:

    cd $BASE_DIR/java-app/target
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication-agic-passwordless-db.yaml
    
  3. Дождитесь успешного перезапуска всех подов, используя следующую команду:

    kubectl get pods --watch
    

    Похожие на следующий пример выходные данные указывают, что все pods запущены:

    NAME                                       READY   STATUS    RESTARTS   AGE
    javaee-cafe-cluster-agic-67cdc95bc-2j2gr   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-fgtt8   1/1     Running   0          29s
    javaee-cafe-cluster-agic-67cdc95bc-h47qm   1/1     Running   0          29s
    

Тестирование приложения

При запуске pods можно протестировать приложение, используя общедоступный IP-адрес экземпляра Application Gateway.

Выполните следующую команду, чтобы получить и отобразить общедоступный IP-адрес экземпляра Шлюза приложений, предоставляемый ресурсом ingress, созданным AGIC.

export APP_URL=https://$(kubectl get ingress | grep javaee-cafe-cluster-agic-ingress | cut -d " " -f14)/
echo $APP_URL

Скопируйте URL-адрес и откройте его в браузере, чтобы просмотреть домашнюю страницу приложения. Если веб-страница не отображается правильно или возвращает ошибку 502 Bad Gateway , приложение по-прежнему начинается в фоновом режиме. Подождите несколько минут и повторите попытку.

Снимок экрана: приложение java liberty успешно развернуто в AKS.

Очистка ресурсов

Чтобы избежать расходов за использование Azure, необходимо удалить ненужные ресурсы. Если кластер больше не нужен, используйте az group delete команду для удаления группы ресурсов, службы контейнеров, реестра контейнеров, базы данных и всех связанных ресурсов:

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

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

Дополнительные сведения см. в следующих ссылках:

Дополнительные сведения о развертывании семейства IBM WebSphere в Azure см. в статье "Что такое решения для запуска семейства продуктов WebSphere в Azure?".