Share via


Distribuire un'applicazione con un'immagine del contenitore personalizzata

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux prossima allo stato di EOL (End of Life, fine del ciclo di vita). Prendere in considerazione l'uso e il piano di conseguenza. Per altre informazioni, vedere le linee guida per la fine della vita di CentOS.

Nota

Azure Spring Apps è il nuovo nome del servizio Azure Spring Cloud. Anche se il servizio ha un nuovo nome, il nome precedente verrà visualizzato in alcune posizioni per un po' mentre si lavora per aggiornare gli asset, ad esempio screenshot, video e diagrammi.

Questo articolo si applica a: ✔️ Standard ✔️ Enterprise

Questo articolo illustra come distribuire applicazioni Spring Boot in Azure Spring Apps usando un'immagine del contenitore personalizzata. La distribuzione di un'applicazione con un contenitore personalizzato supporta la maggior parte delle funzionalità come quando si distribuisce un'applicazione JAR. È anche possibile distribuire altre applicazioni Java e non Java con l'immagine del contenitore.

Prerequisiti

  • Immagine del contenitore contenente l'applicazione.
  • Viene eseguito il push dell'immagine in un registro di immagini. Per altre informazioni, vedere Registro Azure Container.

Nota

L'applicazione Web deve essere in ascolto sulla porta 1025 per il piano Standard e sulla porta 8080 per il piano Enterprise. Il modo per modificare la porta dipende dal framework dell'applicazione. Ad esempio, specificare SERVER_PORT=1025 per le applicazioni Spring Boot o ASPNETCORE_URLS=http://+:1025/ per ASP.NET applicazioni Core. È possibile disabilitare il probe per le applicazioni che non sono in ascolto su alcuna porta. Per altre informazioni, vedere Come configurare probe di integrità e periodi di terminazione normale per le app ospitate in App Spring di Azure.

Distribuire l'applicazione

Per distribuire un'applicazione in un'immagine del contenitore personalizzata, seguire questa procedura:

Per distribuire un'immagine del contenitore, usare uno dei comandi seguenti:

  • Per distribuire un'immagine del contenitore nell'hub Docker pubblico in un'app, usare il comando seguente:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Per distribuire un'immagine del contenitore da Registro Azure Container a un'app o da un altro registro privato a un'app, usare il comando seguente:

    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>
    

Per sovrascrivere il punto di ingresso dell'immagine, aggiungere i due argomenti seguenti a uno dei comandi precedenti:

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

Per disabilitare l'ascolto su una porta per le immagini che non sono applicazioni Web, aggiungere l'argomento seguente ai comandi precedenti:

    --disable-probe true

Matrice di supporto delle funzionalità

La matrice seguente illustra le funzionalità supportate in ogni tipo di applicazione.

Funzionalità App Spring Boot - Distribuzione di contenitori App polyglot - Distribuzione di contenitori Note
Gestione del ciclo di vita delle app ✔️ ✔️
Supporto per i registri contenitori ✔️ ✔️
Assegna endpoint ✔️ ✔️
Monitoraggio di Azure ✔️ ✔️
Integrazione di APM ✔️ ✔️ Supportato dall'installazione manuale.
Distribuzione blu/verde ✔️ ✔️
Dominio personalizzato ✔️ ✔️
Ridimensionamento - Ridimensionamento automatico ✔️ ✔️
Ridimensionamento: ridimensionamento manuale (in/out, aumento/riduzione) ✔️ ✔️
Identità gestita ✔️ ✔️
Spring Cloud Eureka & Config Server ✔️
Portale API per VMware Tanzu ✔️ ✔️ Solo piano enterprise.
Spring Cloud Gateway per VMware Tanzu ✔️ ✔️ Solo piano enterprise.
Servizio di configurazione dell'applicazione per VMware Tanzu ✔️ Solo piano enterprise.
Visualizzazione dinamica dell'applicazione per VMware Tanzu ✔️ Solo piano enterprise.
Registro dei servizi VMware Tanzu ✔️ Solo piano enterprise.
Rete virtuale ✔️ ✔️ Aggiungere il Registro di sistema per consentire l'elenco di sicurezza di rete o Firewall di Azure.
Indirizzo IP in uscita ✔️ ✔️
E2E TLS ✔️ ✔️ Considerare attendibile un'autorità di certificazione autofirmato.
Impostazioni di liveness e idoneità ✔️ ✔️
Risoluzione dei problemi avanzata - dump thread/heap/JFR ✔️ L'immagine deve includere Bash e JDK con PATH specificato.
Usare risorse di archiviazione personali ✔️ ✔️
Integrare l'associazione di servizi con Resource Connessione or ✔️
Availability Zone (Zona di disponibilità) ✔️ ✔️
Eventi del ciclo di vita dell'app ✔️ ✔️
Dimensioni dell'app ridotte - 0,5 vCPU e 512 MB ✔️ ✔️
Automatizzare le distribuzioni di app con Terraform ✔️ ✔️
Eliminazione temporanea ✔️ ✔️
Esperienza di diagnostica interattiva (basata su AppLens) ✔️ ✔️
Contratto di servizio ✔️ ✔️

Nota

Le app polyglot includono app Java non Spring Boot, NodeJS, AngularJS, Python e .NET.

Punti comuni da tenere presenti durante la distribuzione con un contenitore personalizzato

I punti seguenti consentono di risolvere le situazioni comuni durante la distribuzione con un'immagine personalizzata.

Considerare attendibile un'autorità di certificazione

Esistono due opzioni per considerare attendibile un'autorità di certificazione:

Opzione 1: Caricare tramite App Azure Spring

Per caricare i certificati CA nelle app, vedere Usare i certificati TLS/SSL nell'applicazione in Azure Spring Apps. I certificati verranno quindi montati nel percorso /etc/azure-spring-cloud/certs/public/.

Opzione 2: Installazione manuale nell'immagine

Per considerare attendibile una CA nell'immagine, impostare le variabili seguenti a seconda dell'ambiente:

  • È necessario importare applicazioni Java nell'archivio attendibilità aggiungendo le righe seguenti nel Dockerfile:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • Per le applicazioni Node.js, impostare la NODE_EXTRA_CA_CERTS variabile di ambiente:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • Per Python o altri linguaggi che si basano sull'archivio CA di sistema, nelle immagini Debian o Ubuntu, aggiungere le variabili di ambiente seguenti:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • Per Python o altri linguaggi che si basano sull'archivio CA di sistema, nelle immagini basate su CentOS o Fedora aggiungere le variabili di ambiente seguenti:

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

Evitare comportamenti imprevisti quando le immagini cambiano

Quando l'applicazione viene riavviata o ridimensionata, l'immagine più recente verrà sempre estratta. Se l'immagine è stata modificata, le istanze dell'applicazione appena avviate useranno la nuova immagine mentre le istanze precedenti continueranno a usare l'immagine precedente.

Nota

Evitare di usare il latest tag o sovrascrivere l'immagine senza una modifica del tag per evitare comportamenti imprevisti dell'applicazione.

Evitare di potersi connettere al registro contenitori in una rete virtuale

Se l'istanza è stata distribuita in una rete virtuale, assicurarsi di consentire il traffico di rete al registro contenitori nel gruppo di sicurezza di rete o Firewall di Azure (se usato). Per altre informazioni, vedere Responsabilità dei clienti per l'esecuzione nella rete virtuale per aggiungere le regole di sicurezza necessarie.

Installare manualmente un modulo APM nell'immagine

I passaggi di installazione variano in base a diversi monitoraggi delle prestazioni delle applicazioni e lingue. I passaggi seguenti sono relativi alle applicazioni New Relic con Java. È necessario modificare il Dockerfile attenendosi alla procedura seguente:

  1. Scaricare e installare il file dell'agente nell'immagine aggiungendo quanto segue al Dockerfile:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Aggiungere le variabili di ambiente richieste da APM:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Modificare il punto di ingresso dell'immagine aggiungendo: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Per installare gli agenti per altre lingue, vedere la documentazione ufficiale per gli altri agenti:

New Relic:

Dynatrace:

AppDynamics:

Visualizzazione dei log del contenitore

Per visualizzare i log della console dell'applicazione contenitore, è possibile usare il comando dell'interfaccia della riga di comando seguente:

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

Per visualizzare i log degli eventi del contenitore da Monitoraggio di Azure, immettere la query:

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

Screenshot di Monitoraggio di Azure che mostra il log eventi del contenitore.

Analizzare l'immagine per individuare le vulnerabilità

È consigliabile usare Microsoft Defender per il cloud con Registro Azure Container per impedire che le immagini siano vulnerabili. Per altre informazioni, vedere Microsoft Defender per il cloud

Passare dalla distribuzione jar alla distribuzione del contenitore

È possibile passare dal tipo di distribuzione JAR alla distribuzione del contenitore direttamente ridistribuendo usando il comando seguente:

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

In alternativa:

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

Creare un'altra distribuzione con una distribuzione JAR esistente

È possibile creare un'altra distribuzione usando una distribuzione JAR esistente usando il comando seguente:

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

L'automazione delle distribuzioni tramite attività di Azure Pipelines o GitHub Actions è ora supportata. Per altre informazioni, vedere Automatizzare le distribuzioni di applicazioni in App Spring di Azure e Usare l'integrazione continua/distribuzione continua di Azure Spring Apps con GitHub Actions

Passaggi successivi