Dela via


Distribuera ett Java-program med Open Liberty eller WebSphere Liberty i ett AKS-kluster (Azure Kubernetes Service)

Den här artikeln visar hur du:

  • Kör ditt Java-, Java EE-, Jakarta EE- eller MicroProfile-program på Open Liberty - eller IBM WebSphere Liberty-körningen .
  • Skapa programmets Docker-avbildning med az acr build hjälp av Open Liberty- eller WebSphere Liberty-containeravbildningar.
  • Distribuera det containerbaserade programmet till ett AKS-kluster (Azure Kubernetes Service) med hjälp av Open Liberty Operator eller WebSphere Liberty Operator.

Open Liberty Operator förenklar distributionen och hanteringen av program som körs i Kubernetes-kluster. Med Open Liberty Operator eller WebSphere Liberty Operator kan du också utföra mer avancerade åtgärder, till exempel att samla in spårningar och dumpar.

Den här artikeln använder Azure Marketplace-erbjudandet för Open Liberty eller WebSphere Liberty för att påskynda din resa till AKS. Erbjudandet etablerar automatiskt vissa Azure-resurser, inklusive:

  • En Azure Container Registry-instans.
  • Ett AKS-kluster.
  • En Ingresskontrollant för Application Gateway (AGIC).
  • Open Liberty Operator och WebSphere Liberty Operator.
  • Du kan också använda en containeravbildning som innehåller Liberty och ditt program.

Om du föredrar manuell stegvis vägledning för att köra Liberty på AKS kan du läsa Distribuera ett Java-program manuellt med Open Liberty eller WebSphere Liberty i ett AKS-kluster (Azure Kubernetes Service).

Den här artikeln är avsedd att hjälpa dig att snabbt komma till distributionen. Innan du går till produktion bör du utforska IBM-dokumentationen om justering av Liberty.

Om du är intresserad av att ge feedback eller arbeta nära dina migreringsscenarier med teknikteamet som utvecklar WebSphere på Azure-lösningar kan du fylla i den här korta undersökningen om WebSphere-migrering och inkludera din kontaktinformation. Teamet med programchefer, arkitekter och ingenjörer kommer snabbt att kontakta dig för att initiera ett nära samarbete.

Förutsättningar

  • En Azure-prenumeration. Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
  • Förbered en lokal dator med Unix-liknande operativsystem installerat – till exempel Ubuntu, Azure Linux, macOS eller Windows-undersystem för Linux.
  • Installera Azure CLI för att köra Azure CLI-kommandon.
    • Logga in på Azure CLI med hjälp az login av kommandot . Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in på Azure med Azure CLI.
    • När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
    • Kör az version för att hitta den version och beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade. Den här artikeln kräver minst version 2.61.0 av Azure CLI.
  • Installera en Java Standard Edition-implementering (SE), version 17 (till exempel Eclipse Open J9).
  • Installera Maven 3.9.8 eller senare.
  • Kontrollera att Git är installerat.
  • Kontrollera att du har tilldelats rollen Owner eller rollerna Contributor och User Access Administrator i prenumerationen. Du kan verifiera det genom att följa stegen i Lista rolltilldelningar för en användare eller grupp.

Skapa en Liberty på AKS-distribution med hjälp av portalen

Följande steg hjälper dig att skapa en Liberty-körning på AKS. När du har slutfört de här stegen har du en Container Registry-instans och ett AKS-kluster för att distribuera ditt containerbaserade program.

  1. Gå till Azure-portalen. I sökrutan överst på sidan anger du WebSphere Liberty/Open Liberty på Kubernetes. När förslagen visas väljer du den och matchar bara i avsnittet Marketplace .

    Om du vill kan du gå direkt till erbjudandet.

  2. Välj Skapa.

  3. I fönstret Grundläggande :

    1. Skapa en ny resursgrupp. Eftersom resursgrupper måste vara unika i en prenumeration väljer du ett unikt namn. Ett enkelt sätt att få unika namn är att använda en kombination av dina initialer, dagens datum och någon identifierare (till exempel ejb0913-java-liberty-project-rg). Spara resursgruppens namn för senare användning i den här artikeln.
    2. För Region väljer du en region som är nära dig. Välj till exempel USA, östra 2.
  4. Välj Nästa. I AKS-fönstret kan du välja ett befintligt AKS-kluster och containerregisterinstans i stället för att orsaka att distributionen skapar nya. Med det här valet kan du använda sidovagnsmönstret, som du ser i Azure Architecture Center. Du kan också justera inställningarna för storleken och antalet virtuella datorer i AKS-nodpoolen.

    I den här artikeln behåller du bara alla standardvärden i det här fönstret.

  5. Välj Nästa. Välj Ja bredvid Anslut till Azure Application Gateway i fönstret Belastningsutjämning. I det här avsnittet kan du anpassa följande distributionsalternativ:

    • För Virtuellt nätverk och undernät kan du välja att anpassa det virtuella nätverket och undernätet som distributionen placerar resurserna i. Du behöver inte ändra de återstående värdena från deras standardvärden.

    • För TLS/SSL-certifikat kan du ange TLS/SSL-certifikatet från Azure Application Gateway. Lämna värdena som standard så att erbjudandet genererar ett självsignerat certifikat.

      Gå inte till produktion med ett självsignerat certifikat. Mer information om självsignerade certifikat finns i Skapa ett självsignerat offentligt certifikat för att autentisera ditt program.

    • Du kan välja Aktivera cookiebaserad tillhörighet, även kallat sticky-sessioner. Den här artikeln använder klibbiga sessioner, så se till att välja det här alternativet.

  6. Välj Nästa. I fönstret Operator och program använder den här artikeln alla standardvärden. Du kan dock anpassa följande distributionsalternativ:

    • Du kan distribuera WebSphere Liberty Operator genom att välja Ja för alternativet IBM stöds?. Om du lämnar standardvärdet Nej distribueras Open Liberty Operator.
    • Du kan distribuera ett program för den valda operatorn genom att välja Ja för alternativet Distribuera ett program?. Om du lämnar standardvärdet Nej distribueras inget program.
  7. Välj Granska + skapa för att verifiera de valda alternativen. I fönstret Granska + skapa väljer du när du ser Skapa bli tillgängligt när valideringen har godkänts.

    Distributionen kan ta upp till 20 minuter. Medan du väntar på att distributionen ska slutföras kan du följa stegen i avsnittet Skapa en Azure SQL Database-instans. När du har slutfört avsnittet kommer du tillbaka hit och fortsätter.

Samla in vald information från distributionen

Om du har flyttat från fönstret Distribution pågår visar följande steg hur du kommer tillbaka till fönstret. Om du fortfarande är i fönstret som visar Att distributionen är klar går du till den nyligen skapade resursgruppen och går vidare till det tredje steget.

  1. I hörnet på en portalsida väljer du menyknappen och sedan Resursgrupper.

  2. I rutan med texten Filtrera för ett fält anger du de första tecknen i resursgruppen som du skapade tidigare. Om du följde den rekommenderade konventionen anger du dina initialer och väljer sedan lämplig resursgrupp.

  3. I listan över resurser i resursgruppen väljer du resursen med typvärdet containerregister.

  4. I navigeringsfönstret går du till Inställningar och väljer Åtkomstnycklar.

  5. Spara åt sidan värdena för Registernamn och Inloggningsserver. Du kan använda kopieringsikonen bredvid varje fält för att kopiera värdet till systemets Urklipp.

    Kommentar

    Den här artikeln använder az acr build kommandot för att skapa och push-överföra Docker-avbildningen till Container Registry, utan att använda username och password containerregistret. Det går fortfarande att använda användarnamn och lösenord med docker login och docker push. Användning av användarnamn och lösenord är mindre säkert än lösenordsfri autentisering.

  6. Gå tillbaka till resursgruppen som du distribuerade resurserna till.

  7. I avsnittet Inställningar väljer du Distributioner.

  8. Välj den längst nedersta distributionen i listan. Värdet Distributionsnamn matchar utgivar-ID:t för erbjudandet. Den innehåller strängen ibm.

  9. I navigeringsfönstret väljer du Utdata.

  10. Genom att använda samma kopieringsteknik som med föregående värden sparar du värdena åt sidan för följande utdata:

    • cmdToConnectToCluster

    • appDeploymentTemplateYaml om distributionen inte innehåller något program. Du har alltså valt Nej för Distribuera ett program när du distribuerade Marketplace-erbjudandet. Den här artikeln har valt Nej. Men om du har valt Ja sparar du värdet appDeploymentYamlför , som innehåller programdistributionen.

      Klistra in värdet appDeploymentTemplateYaml för eller appDeploymentYaml i ett Bash-gränssnitt och kör kommandot.

      Utdata från det här kommandot är YAML för programdistribution. Leta efter den inkommande TLS-hemligheten med nyckelordet secretName, till exempel - secretName: secret785e2c. Spara åt sidan värdet secretName .

Kör följande kommandon för att ange de miljövariabler som du hämtade i föregående steg. Dessa miljövariabler används senare i den här artikeln.

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>

Skapa en Azure SQL Database-instans

I det här avsnittet skapar du en enkel Azure SQL Database-databas för användning med din app.

Ange först databasrelaterade miljövariabler. Ersätt <your-unique-sql-server-name> med ett unikt namn för Azure SQL Database-servern.

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

Kör följande kommando i terminalen för att skapa en enkel databas i Azure SQL Database och ange den aktuella inloggade användaren som Microsoft Entra-administratör. Mer information finns i Snabbstart: Skapa en enkel databas – 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

Lägg sedan till den lokala IP-adressen i Azure SQL Database-serverns brandväggsregler så att den lokala datorn kan ansluta till databasen för lokal testning senare.

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

Kommentar

Den här artikeln inaktiverar SQL-autentisering för att illustrera metodtips för säkerhet. Microsoft Entra-ID används för att autentisera anslutningen till servern. Om du behöver aktivera SQL-autentisering läser du az sql server create.

Skapa en tjänstanslutning i AKS med Service Connector

I det här avsnittet skapar du en tjänstanslutning mellan AKS-klustret och Azure SQL Database med microsoft entra-arbetsbelastnings-ID med Service Connector. Med den här anslutningen kan AKS-klustret komma åt Azure SQL Database utan att använda SQL-autentisering.

Först beviljar du behörigheter för App Azure Service Connector-resursprovidern till den Application Gateway som distribuerades tidigare. Det här steget krävs för att skapa en tjänstanslutning mellan AKS-klustret och Azure SQL Database.

  1. Gå till Azure Portal och gå till resursgruppen som du skapade tidigare.
  2. I listan över resurser i resursgruppen väljer du resursen med värdet Typ för Application Gateway.
  3. Välj Åtkomstkontroll (IAM) . Expandera sedan Lägg till och välj Lägg till rolltilldelning.
  4. fliken Roll väljer du Privilegierade administratörsroller. Välj sedan Deltagare. Välj Nästa.
  5. fliken Medlemmar väljer du Välj medlemmar. Sök sedan efter resursproviderappen för Azure Service Connector. Välj appen och välj Välj. Välj Nästa.
  6. Välj Granska + tilldela. Vänta några sekunder tills rolltilldelningen har slutförts.

Kör sedan följande kommandon för att skapa en anslutning mellan AKS-klustret och SQL-databasen med microsoft entra-arbetsbelastnings-ID med Service Connector. Mer information finns i Skapa en tjänstanslutning i AKS med Service Connector (förhandsversion).

# 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

Kommentar

Vi rekommenderar att du använder Microsoft Entra-arbetsbelastnings-ID för säker åtkomst till din Azure SQL Database utan att använda SQL-autentisering. Om du behöver använda SQL-autentisering ignorerar du föregående steg i det här avsnittet och använder användarnamnet och lösenordet för att ansluta till Azure SQL Database.

Hämta tjänstkonto och hemlighet som skapats av Service Connector

Om du vill autentisera till Azure SQL Database måste du hämta tjänstkontot och hemligheten som skapats av Service Connector. Följ anvisningarna i avsnittet Uppdatera containern i Självstudie: Ansluta en AKS-app till Azure SQL Database. Välj alternativet Skapa en distribution direkt med hjälp av YAML-exempelkodfragmentet och använd följande steg:

  1. Från de markerade avsnitten i kubernetes-exempeldistributionens serviceAccountName YAML kopierar du värdena och secretRef.name , som du ser i följande exempel:

    serviceAccountName: <service-account-name>
    containers:
    - name: raw-linux
       envFrom:
          - secretRef:
             name: <secret-name>
    
  2. Använd följande kommandon för att definiera miljövariabler. Ersätt <service-account-name> och <secret-name> med de värden som du kopierade i föregående steg.

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

    Dessa värden används i nästa avsnitt för att distribuera Liberty-programmet till AKS-klustret.

Kommentar

Hemligheten som skapas av Service Connector innehåller AZURE_SQL_CONNECTIONSTRING, vilket är ett kostnadsfritt lösenord anslutningssträng till Azure SQL Database. Mer information finns i exempelvärdet i avsnittet Användartilldelad hanterad identitetsautentisering i Integrera Azure SQL Database med Service Connector.

Nu när du har konfigurerat databasen och AKS-klustret kan du fortsätta med att förbereda AKS som värd för ditt Open Liberty-program.

Konfigurera och distribuera exempelprogrammet

Följ stegen i det här avsnittet för att distribuera exempelprogrammet på Liberty-körningen. De här stegen använder Maven.

Kolla in programmet

Klona exempelkoden för den här artikeln. Exemplet finns på GitHub.

Det finns några exempel på lagringsplatsen. Den här artikeln använder java-app. Kör följande kommandon för att hämta exemplet:

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

Om du ser ett meddelande om att vara i "frånkopplat HEAD"-tillstånd kan du ignorera det på ett säkert sätt. Meddelandet innebär bara att du checkade ut en tagg.

Här är programmets filstruktur med viktiga filer och kataloger:

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

Katalogerna java, resources och webapp innehåller källkoden för exempelprogrammet. Koden deklarerar och använder en datakälla med namnet jdbc/JavaEECafeDB.

I aks-katalogen används filen openlibertyapplication-agic-passwordless-db.yaml för att distribuera programbilden med AGIC och lösenordslös anslutning till Azure SQL Database. Den här artikeln förutsätter att du använder den här filen.

I docker-katalogen finns det två filer för att skapa programbilden med antingen Open Liberty eller WebSphere Liberty.

I katalogen liberty/config används server.xml-filen för att konfigurera databasanslutningen för Open Liberty- och WebSphere Liberty-klustret. Den definierar en variabel azure.sql.connectionstring som används för att ansluta till Azure SQL Database.

Filen pom.xml är Maven-projektobjektmodellen (POM) som innehåller konfigurationsinformationen för projektet. Filen pom-azure-identity.xml deklarerar ett beroende av azure-identity. Den här filen används för att autentisera till Azure-tjänster med hjälp av Microsoft Entra-ID.

Kommentar

Det här exemplet använder biblioteket för att autentisera azure-identity till Azure SQL Database med Hjälp av Microsoft Entra-autentisering. Om du behöver använda SQL-autentisering i ditt Liberty-program kan du läsa Relationsdatabasanslutningar med JDBC.

Bygga projektet

Nu när du har samlat in de nödvändiga egenskaperna skapar du programmet. POM-filen för projektet läser många variabler från miljön. Som en del av Maven-versionen används dessa variabler för att fylla i värden i YAML-filerna som finns i src/main/aks. Du kan göra något liknande för ditt program utanför Maven om du vill.

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

Testa projektet lokalt

Kör och testa projektet lokalt innan du distribuerar till Azure. För enkelhetens skull använder liberty-maven-pluginden här artikeln . Mer information om liberty-maven-pluginfinns i open liberty-artikeln Skapa ett webbprogram med Maven.

Kommentar

Om du har valt en "serverlös" databasdistribution kontrollerar du att SQL-databasen inte har angett pausläge. Ett sätt att göra detta är att logga in på databasfrågeredigeraren enligt beskrivningen i Snabbstart: Använd Azure Portal frågeredigeraren (förhandsversion) för att fråga Azure SQL Database.

  1. Starta programmet med hjälp liberty:runav .

    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. Kontrollera att programmet fungerar som förväntat. Du bör se ett meddelande som liknar [INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 18.235 seconds. i kommandoutdata. Gå till http://localhost:9080/ i webbläsaren och kontrollera att programmet är tillgängligt och att alla funktioner fungerar.

  3. Tryck på Ctrl+C för att stoppa. Tryck på Y om du uppmanas att avsluta batchjobbet.

När du är klar tar du bort brandväggsregeln som gör att din lokala IP-adress kan komma åt Azure SQL Database med hjälp av följande kommando:

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

Skapa avbildningen för AKS-distribution

Du kan nu köra az acr build kommandot för att skapa avbildningen, som du ser i följande exempel:

cd $BASE_DIR/java-app/target

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

Kommandot az acr build laddar upp artefakterna som anges i Dockerfile till Container Registry-instansen, skapar avbildningen och lagrar den i Container Registry-instansen.

Distribuera programmet till AKS-klustret

Använd följande steg för att distribuera Liberty-programmet i AKS-klustret:

  1. Anslut till AKS-klustret.

    Klistra in värdet cmdToConnectToCluster för i ett gränssnitt och kör kommandot.

  2. Använd distributionsfilen genom att köra följande kommandon:

    cd $BASE_DIR/java-app/target
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication-agic-passwordless-db.yaml
    
  3. Vänta tills alla poddar har startats om med hjälp av följande kommando:

    kubectl get pods --watch
    

    Utdata som liknar följande exempel anger att alla poddar körs:

    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
    

Testa programmet

När poddarna körs kan du testa programmet med hjälp av den offentliga IP-adressen för Application Gateway-instansen.

Kör följande kommando för att hämta och visa den offentliga IP-adressen för Application Gateway-instansen, som exponeras av den ingressresurs som skapats av AGIC:

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

Kopiera URL:en och öppna den i webbläsaren för att se programmets startsida. Om webbsidan inte renderas korrekt eller returnerar ett 502 Bad Gateway fel startar appen fortfarande i bakgrunden. Vänta några minuter och försök sedan igen.

Skärmbild av Java Liberty-programmet som har distribuerats på AKS.

Rensa resurser

För att undvika Azure-avgifter bör du rensa onödiga resurser. När du inte längre behöver klustret använder du az group delete kommandot för att ta bort resursgruppen, containertjänsten, containerregistret, databasen och alla relaterade resurser:

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

Nästa steg

Du kan lära dig mer från följande referenser:

Mer information om hur du distribuerar IBM WebSphere-familjen i Azure finns i Vad är lösningar för att köra WebSphere-serien med produkter i Azure?.