다음을 통해 공유


Open Liberty 또는 WebSphere Liberty를 사용하여 AKS(Azure Kubernetes Service) 클러스터에 Java 애플리케이션 배포

이 문서에서는 다음을 수행하는 방법을 보여줍니다.

  • Open Liberty 또는 IBM WebSphere Liberty 런타임에서 Java, Java EE, Jakarta EE 또는 MicroProfile 애플리케이션을 실행합니다.
  • Open Liberty 또는 WebSphere Liberty 컨테이너 이미지를 az acr build 사용하여 애플리케이션의 Docker 이미지를 빌드합니다.
  • Open Liberty Operator 또는 WebSphere Liberty Operator를 사용하여 AKS(Azure Kubernetes Service) 클러스터에 컨테이너화된 애플리케이션을 배포합니다.

Open Liberty Operator는 Kubernetes 클러스터에서 실행되는 애플리케이션의 배포 및 관리를 간소화합니다. Open Liberty Operator 또는 WebSphere Liberty Operator를 사용하여 추적 및 덤프 수집과 같은 고급 작업을 수행할 수도 있습니다.

이 문서에서는 AKS로의 과정을 가속화하기 위해 Open Liberty 또는 WebSphere Liberty용 Azure Marketplace 제안을 사용합니다. 이 제품은 다음을 포함하여 일부 Azure 리소스를 자동으로 프로비전합니다.

  • Azure Container Registry 인스턴스.
  • AKS 클러스터.
  • AGIC(Application Gateway 수신 컨트롤러) 인스턴스입니다.
  • Open Liberty Operator 및 WebSphere Liberty Operator.
  • 선택적으로 Liberty 및 애플리케이션을 포함하는 컨테이너 이미지.

AKS에서 Liberty를 실행하기 위한 수동 단계별 지침을 선호하는 경우 AKS(Azure Kubernetes Service) 클러스터에서 Open Liberty 또는 WebSphere Liberty를 사용하여 Java 애플리케이션 수동 배포를 참조하세요.

이 문서는 빠르게 배포할 수 있도록 지원하기 위한 것입니다. 프로덕션으로 이동하기 전에 Liberty 튜닝에 관한 IBM 설명서를 살펴봅니다.

피드백을 제공하거나 Azure 솔루션에서 WebSphere를 개발하는 엔지니어링 팀과 함께 마이그레이션 시나리오를 긴밀히 작업하려는 경우 WebSphere 마이그레이션 대한 이 간단한 설문 조사를 작성하고 연락처 정보를 포함합니다. 긴밀한 공동 작업을 시작할 수 있도록 프로그램 관리자, 설계자 및 엔지니어 팀이 즉시 연락드립니다.

필수 구성 요소

  • Azure 구독 Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
  • Unix와 유사한 운영 체제가 설치된 로컬 머신(예: Ubuntu, Azure Linux, macOS 또는 Linux용 Windows 하위 시스템)을 준비합니다.
  • Azure CLI설치하여 Azure CLI 명령을 실행합니다.
    • 명령을 사용하여 Azure CLI에 로그인합니다 az login . 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 로그인을 참조하세요.
    • 메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
    • az version을(를) 실행하여 설치된 버전 및 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다. 이 문서에는 Azure CLI 버전 2.61.0 이상이 필요합니다.
  • JAVA SE(Standard Edition) 구현 버전 17(예: Eclipse Open J9)을 설치합니다.
  • Maven 3.9.8 이상을 설치합니다.
  • Git이 설치되어 있는지 확인합니다.
  • 구독에서 Owner 역할이나 ContributorUser Access Administrator 역할이 할당되어 있는지 확인합니다. 사용자 또는 그룹에 대한 역할 할당 나열의 단계에 따라 이를 확인할 수 있습니다.

포털을 사용하여 AKS 배포에서 Liberty 만들기

다음 단계는 AKS에서 Liberty 런타임을 작성하도록 안내합니다. 이러한 단계를 완료하면 컨테이너화된 애플리케이션을 배포하기 위한 Container Registry 인스턴스와 AKS 클러스터가 준비됩니다.

  1. Azure Portal로 이동합니다. 페이지 위쪽의 검색 상자에 Kubernetes에서 WebSphere Liberty/Open Liberty를 입력 합니다. 제안이 나타나면 Marketplace 섹션에서 유일하게 일치하는 항목을 선택합니다.

    원하는 경우 제안으로 직접 이동할 수 있습니다.

  2. 만들기를 실행합니다.

  3. 기본 창에서 다음을 수행합니다.

    1. 새 리소스 그룹 만들기 리소스 그룹은 구독 내에서 고유해야 하므로 고유한 이름을 선택합니다. 이름이 고유하도록 하는 쉬운 방법은 이니셜, 오늘 날짜, 일부 식별자의 조합을 사용하는 것입니다(예: ejb0913-java-liberty-project-rg). 이 문서에서 나중에 사용할 수 있는 리소스 그룹 이름을 따로 저장합니다.
    2. 지역의 경우 가까운 지역을 선택합니다. 예를 들어 미국 동부 2를 선택합니다.
  4. 다음을 선택합니다. 배포 시 새 인스턴스를 만드는 대신 AKS 창에서 선택적으로 기존 AKS 클러스터 및 Container Registry 인스턴스를 선택할 수 있습니다. 이 선택을 통해 Azure 아키텍처 센터에 표시된 대로 사이드카 패턴을 사용할 수 있습니다. AKS 노드 풀에 있는 가상 머신의 크기 및 수에 대한 설정을 조정할 수도 있습니다.

    이 문서의 목적에 따라 이 창의 모든 기본값을 유지합니다.

  5. 다음을 선택합니다. 부하 분산 창에서 Azure Application Gateway에 연결하려고 하나요? 옆에 있는 를 선택합니다. 이 섹션에서는 다음 배포 옵션을 사용자 지정할 수 있습니다.

    • 가상 네트워크서브넷의 경우 배포 시 리소스가 배치되는 가상 네트워크와 서브넷을 선택적으로 사용자 지정할 수 있습니다. 기본값에서 나머지 값을 변경할 필요가 없습니다.

    • TLS/SSL 인증서의 경우 Azure Application Gateway에서 TLS/SSL 인증서를 제공할 수 있습니다. 제품이 자체 서명된 인증서를 생성하도록 하려면 이러한 값을 기본값으로 둡니다.

      자체 서명된 인증서를 사용하여 프로덕션으로 이동하지 마세요. 자체 서명된 인증서에 대한 자세한 내용은 애플리케이션 인증을 위한 자체 서명된 공용 인증서 만들기를 참조하세요.

    • 고정 세션이라고도 하는 쿠키 기반 선호도 사용을 선택할 수 있습니다. 이 문서에서는 고정 세션을 사용하므로 이 옵션을 선택해야 합니다.

  6. 다음을 선택합니다. 이 문서에서는 연산자 및 애플리케이션 창에서 모든 기본값을 사용합니다. 그러나 다음 배포 옵션을 사용자 지정할 수 있습니다.

    • IBM에서 지원 옵션에 를 선택하여 WebSphere Liberty Operator를 배포할 수 있습니다. 기본값을 그대로 두면 Open Liberty Operator가 배포되지 않습니다.
    • 애플리케이션 배포 옵션에 를 선택하여 선택한 연산자의 애플리케이션을 배포할 수 있습니다. 기본값을 그대로 두면 애플리케이션이 배포되지 않습니다.
  7. 검토 + 만들기를 선택하여 선택한 옵션의 유효성을 검사합니다. 검토 + 만들기 창에서 유효성 검사를 통과한 후 만들기를 사용할 수 있게 되면 이를 선택합니다.

    배포는 최대 20분까지 걸릴 수 있습니다. 배포가 완료될 때까지 기다리는 동안 Azure SQL Database 인스턴스 만들기 섹션의 단계를 따를 수 있습니다. 해당 섹션을 완료한 후 여기로 돌아와 계속합니다.

배포에서 선택한 정보 캡처

배포 진행 중 창에서 다른 곳으로 이동한 경우 다음 단계에 따라 해당 창으로 돌아가는 방법이 표시됩니다. 여전히 배포가 완료되었습니다라고 표시된 창에 있는 경우 새로 만들어진 리소스 그룹으로 이동하여 세 번째 단계로 건너뜁니다.

  1. 포털 페이지 모서리에서 메뉴 단추를 선택한 다음 리소스 그룹을 선택합니다.

  2. 모든 필드에 대해 필터링 텍스트가 있는 상자에 이전에 만든 리소스 그룹의 처음 몇 글자를 입력합니다. 권장 규칙을 따른 경우 이니셜을 입력한 다음 적절한 리소스 그룹을 선택합니다.

  3. 리소스 그룹의 리소스 목록에서 유형 값이 컨테이너 레지스트리인 리소스를 선택합니다.

  4. 탐색 창의 설정에서 액세스 키를 선택합니다.

  5. 레지스트리 이름로그인 서버에 대한 값을 따로 저장합니다. 각 필드 옆에 있는 복사 아이콘을 사용하여 값을 시스템 클립보드에 복사할 수 있습니다.

    참고 항목

    이 문서에서는 az acr build 이 명령을 사용하여 Container Registry를 사용하지 username 않고 Docker 이미지를 빌드하고 password Container Registry에 푸시합니다. 사용자 이름 및 암호를 docker login 사용할 수 있습니다 docker push. 사용자 이름 및 암호를 사용하는 것은 암호 없는 인증보다 안전하지 않습니다.

  6. 리소스를 배포한 리소스 그룹으로 돌아갑니다.

  7. 설정 섹션에서 배포를 선택합니다.

  8. 목록에서 맨 아래에 있는 배포를 선택합니다. 배포 이름 값은 제품의 게시자 ID와 일치합니다. 여기에는 ibm 문자열이 포함되어 있습니다.

  9. 탐색 창에서 출력을 선택합니다.

  10. 이전 값과 동일한 복사 기술을 사용하여 다음 출력에 대한 값을 따로 저장합니다.

    • cmdToConnectToCluster

    • 배포에 애플리케이션이 포함되지 않은 경우 appDeploymentTemplateYaml입니다. 즉, Marketplace 제품을 배포할 때 애플리케이션을 배포하려고 하나요?에 대해 아니요를 선택했습니다. 이 문서에서는 아니요를 선택했습니다. 그러나 예를 선택한 경우 애플리케이션 배포를 포함하는 값을 appDeploymentYaml따로 저장합니다.

      Bash 셸의 appDeploymentTemplateYaml appDeploymentYaml 값을 붙여넣고 명령을 실행합니다.

      이 명령의 출력은 애플리케이션 배포 YAML입니다. 와 같은 - secretName: secret785e2c키워드secretName를 사용하여 수신 TLS 비밀을 찾습니다. 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>

Azure SQL Database 관리형 인스턴스 생성

이 섹션에서는 앱에 사용할 Azure SQL Database 단일 데이터베이스를 만듭니다.

먼저 데이터베이스 관련 환경 변수를 설정합니다. Azure SQL Database 서버의 고유한 이름으로 대체 <your-unique-sql-server-name> 합니다.

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

그런 다음 로컬 컴퓨터가 나중에 로컬 테스트를 위해 데이터베이스에 연결할 수 있도록 Azure SQL Database 서버 방화벽 규칙에 로컬 IP 주소를 추가합니다.

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 ID는 서버에 대한 연결을 인증하는 데 사용됩니다. SQL 인증을 사용하도록 설정해야 하는 경우 를 참조하세요 az sql server create.

서비스 커넥터를 사용하여 AKS에서 서비스 연결 만들기

이 섹션에서는 서비스 커넥터와 함께 Microsoft Entra 워크로드 ID 사용하여 AKS 클러스터와 Azure SQL Database 간에 서비스 연결을 만듭니다. 이 연결을 사용하면 AKS 클러스터가 SQL 인증을 사용하지 않고 Azure SQL Database에 액세스할 수 있습니다.

먼저 이전에 배포된 Application Gateway에 앱 Azure Service Connector 리소스 공급자 권한을 부여합니다. AKS 클러스터와 Azure SQL Database 간에 서비스 연결을 성공적으로 만들려면 이 단계가 필요합니다.

  1. Azure Portal로 이동하여 이전에 만든 리소스 그룹으로 이동합니다.
  2. 리소스 그룹의 리소스 목록에서 Application Gateway형식 값이 있는 리소스를 선택합니다.
  3. 액세스 제어(IAM) 를 선택합니다. 그런 다음, 추가를 확장하고 역할 할당 추가를 선택합니다.
  4. 역할 탭에서 권한 있는 관리자 역할을 선택합니다. 그런 다음, 참가자를 선택합니다. 다음을 선택합니다.
  5. 구성원 탭에서 구성원 선택을 선택합니다. 그런 다음, Azure Service Connector 리소스 공급자 앱을 검색합니다. 앱을 선택하고 선택을 선택합니다. 다음을 선택합니다.
  6. 검토 + 할당을 선택합니다. 역할 할당이 완료되기까지 몇 초 정도 기다립니다.

그런 다음, 다음 명령을 실행하여 서비스 커넥터에서 Microsoft Entra 워크로드 ID 사용하여 AKS 클러스터와 SQL 데이터베이스 간에 연결을 만듭니다. 자세한 내용은 서비스 커넥터를 사용하여 AKS에서 서비스 연결 만들기(미리 보기)를 참조하세요.

# 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 --upgrade --allow-preview true

# 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

참고 항목

SQL 인증을 사용하지 않고 Azure SQL Database에 대한 보안 액세스를 위해 Microsoft Entra 워크로드 ID 사용하는 것이 좋습니다. SQL 인증을 사용해야 하는 경우 이 섹션의 이전 단계를 무시하고 사용자 이름과 암호를 사용하여 Azure SQL Database에 연결합니다.

서비스 커넥터에서 만든 서비스 계정 및 비밀 가져오기

Azure SQL Database에 인증하려면 Service Connector에서 만든 서비스 계정 및 비밀을 가져와야 합니다. 자습서의 컨테이너 업데이트 섹션에 있는 지침을 따릅니다. AKS 앱을 Azure SQL Database에 연결합니다. 제공된 YAML 샘플 코드 조각을 사용하여 배포를 직접 만들고 다음 단계를 사용합니다.

  1. 샘플 Kubernetes 배포 YAML의 강조 표시된 섹션에서 다음 예제와 같이 값과 secretRef.name 값을 복사 serviceAccountName 합니다.

    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 클러스터에 배포하는 데 사용됩니다.

참고 항목

Service Connector에서 만든 비밀에는 Azure SQL Database에 대한 암호 없는 연결 문자열 포함AZURE_SQL_CONNECTIONSTRING됩니다. 자세한 내용은 Azure SQL Database와 Service Connector 통합의 사용자 할당 관리 ID 인증 섹션에 있는 샘플 값을 참조하세요.

이제 데이터베이스 및 AKS 클러스터를 설정했으므로 Open Liberty 애플리케이션을 호스트하도록 AKS를 준비할 수 있습니다.

응용 프로그램 예제 구성 및 배포

이 섹션의 단계에 따라 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

"분리된 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, 리소스웹앱 디렉터리에는 응용 프로그램 예제의 소스 코드가 포함됩니다. 이 코드는 jdbc/JavaEECafeDB(이)라는 데이터 원본을 선언하고 사용합니다.

aks 디렉터리에서 openlibertyapplication-agic-passwordless-db.yaml 파일은 AZURE SQL Database에 AGIC 및 암호 없는 연결을 사용하여 애플리케이션 이미지를 배포하는 데 사용됩니다. 이 문서에서는 이 파일을 사용한다고 가정합니다.

docker 디렉터리에는 Open Liberty 또는 WebSphere Liberty를 사용하여 애플리케이션 이미지를 만들기 위한 두 개의 파일이 있습니다.

디렉터리 liberty/config에서 server.xml 파일은 Open Liberty 및 WebSphere Liberty 클러스터에 대한 데이터베이스 연결을 구성하는 데 사용됩니다. Azure SQL Database에 연결하는 데 사용되는 변수 azure.sql.connectionstring 를 정의합니다.

pom.xml 파일은 프로젝트에 대한 구성 정보를 포함하는 Maven POM(프로젝트 개체 모델) 파일입니다. pom-azure-identity.xml 파일은 종속성을 azure-identity선언합니다. 이 파일은 Microsoft Entra ID를 사용하여 Azure 서비스에 인증하는 데 사용됩니다.

참고 항목

이 샘플에서는 라이브러리를 azure-identity 사용하여 Microsoft Entra 인증을 사용하여 Azure SQL Database에 인증합니다. Liberty 애플리케이션에서 SQL 인증을 사용해야 하는 경우 JDBC를 사용한 관계형 데이터베이스 연결 참조하세요.

프로젝트 빌드

이제 필요한 속성을 수집했으므로 애플리케이션을 빌드합니다. 프로젝트의 POM 파일은 환경에서 많은 변수를 읽습니다. Maven 빌드의 일부로 이러한 변수는 src/main/aks에 있는 YAML 파일의 값을 채우는 데 사용됩니다. 원하는 경우 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을 사용합니다. liberty-maven-plugin에 대해 자세히 알아보려면 Open Liberty 문서 Maven을 사용하여 웹 애플리케이션 빌드을 참조하세요.

참고 항목

"서버리스" 데이터베이스 배포를 선택한 경우 SQL 데이터베이스가 일시 중지 모드로 전환되지 않은지 확인합니다. 이 작업을 수행하는 한 가지 방법은 빠른 시작에서 설명한 대로 데이터베이스 쿼리 편집기로 로그인하는 것입니다. Azure Portal 쿼리 편집기(미리 보기)를 사용하여 Azure SQL Database를 쿼리합니다.

  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 주소가 Azure SQL Database에 액세스할 수 있도록 하는 방화벽 규칙을 삭제합니다.

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에 지정된 아티팩트들을 Container Registry 인스턴스에 업로드하고, 이미지를 빌드하고, Container Registry 인스턴스에 저장합니다.

AKS 클러스터에 애플리케이션 배포

다음 단계를 사용하여 AKS 클러스터에 Liberty 애플리케이션을 배포합니다.

  1. AKS 클러스터에 연결합니다.

    cmdToConnectToCluster 값을 셸에 붙여넣고 명령을 실행합니다.

  2. 다음 명령을 실행하여 배포 파일을 적용합니다.

    cd $BASE_DIR/java-app/target
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication-agic-passwordless-db.yaml
    
  3. 다음 명령을 사용하여 모든 Pod가 성공적으로 다시 시작될 때까지 기다립니다.

    kubectl get pods --watch
    

    다음 예와 유사한 출력은 모든 Pod가 실행 중임을 나타냅니다.

    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
    

애플리케이션 테스트

Pod가 실행 중인 경우 Application Gateway 인스턴스의 공용 IP 주소를 사용하여 애플리케이션을 테스트할 수 있습니다.

다음 명령을 실행하여 AGIC에서 만든 수신 리소스에 의해 노출되는 Application Gateway 인스턴스의 공용 IP 주소를 가져와 표시합니다.

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

URL을 복사하고 브라우저에서 열어 애플리케이션 홈페이지를 확인합니다. 웹 페이지가 올바르게 렌더링되지 않거나 502 Bad Gateway 오류를 반환하는 경우 앱이 여전히 백그라운드에서 시작되는 것입니다. 몇 분간 기다린 다음 작업을 다시 시도하세요.

AKS에 성공적으로 배포된 Java liberty 애플리케이션의 스크린샷

리소스 정리

Azure 요금을 방지하려면 불필요한 리소스를 정리해야 합니다. 클러스터가 더 이상 필요하지 않은 경우 명령을 사용하여 az group delete 리소스 그룹, 컨테이너 서비스, 컨테이너 레지스트리, 데이터베이스 및 모든 관련 리소스를 제거합니다.

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

다음 단계

다음 참조에서 자세히 알아볼 수 있습니다.

Azure에 IBM WebSphere 제품군을 배포하는 방법에 대한 자세한 내용은 Azure에서 WebSphere 제품군을 실행하는 솔루션은 무엇인가요?를 참조하세요.