Condividi tramite


Connettersi a un amministratore gestito per Spring nelle app di Azure Container

Il componente Amministrazione gestita per Spring offre un'interfaccia di amministrazione per le applicazioni Web Spring Boot che espongono endpoint attuatore. Come componente gestito in App contenitore di Azure, è possibile associare facilmente l'app contenitore ad Amministratore per Spring per una perfetta integrazione e gestione.

Questa esercitazione illustra come creare un componente Admin for Spring Java e associarlo all'app contenitore in modo da poter monitorare e gestire facilmente le applicazioni Spring.

Screenshot che mostra una panoramica del dashboard Admin for Spring Insights.

In questa esercitazione verranno illustrate le procedure per:

  • Creare un componente Amministratore per Spring Java.
  • Associare l'app contenitore a un componente Admin for Spring Java.

Se si vuole integrare Admin for Spring con Dhcp Server for Spring, vedere invece Integrare Admin for Spring con Dhcp Server for Spring in Container Apps.

Importante

Questa esercitazione usa i servizi che possono influire sulla fattura di Azure. Se si decide di seguire questa procedura, assicurarsi di eliminare le risorse in primo piano in questo articolo per evitare una fatturazione imprevista.

Prerequisiti

Considerazioni

Quando si esegue il componente Admin for Spring in App contenitore, tenere presenti i dettagli seguenti:

Elemento Spiegazione
Scope I componenti vengono eseguiti nello stesso ambiente dell'app contenitore connessa.
Scalabilità I componenti non possono essere ridimensionati. Le proprietà di ridimensionamento minReplicas e maxReplicas sono entrambe impostate su 1.
Risorse L'allocazione delle risorse del contenitore per i componenti è fissa. Il numero di core CPU è 0,5 e la dimensione della memoria è 1 GB.
Prezzi La fatturazione dei componenti rientra nei prezzi basati sul consumo. Le risorse utilizzate dai componenti gestiti vengono fatturate in base alle tariffe attive o inattive, a seconda dell'utilizzo delle risorse. È possibile eliminare i componenti che non sono più in uso per interrompere la fatturazione.
Associazione Le app contenitore si connettono a un componente tramite un'associazione. Le associazioni inseriscono le configurazioni nelle variabili di ambiente dell'app contenitore. Dopo aver stabilito un'associazione, l'app contenitore può leggere i valori di configurazione dalle variabili di ambiente e connettersi al componente.

Configurazione

Prima di iniziare a usare il componente Admin for Spring, è necessario creare le risorse necessarie.

I comandi seguenti consentono di creare il gruppo di risorse e l'ambiente dell'app contenitore.

  1. Creare le variabili per supportare la configurazione dell'applicazione. Questi valori vengono forniti ai fini dello svolgimento di questa lezione.

    export LOCATION=eastus
    export RESOURCE_GROUP=my-resource-group
    export ENVIRONMENT=my-environment
    export JAVA_COMPONENT_NAME=admin
    export APP_NAME=sample-admin-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-admin-for-spring-client:latest"
    
    Variabile Descrizione
    LOCATION Posizione dell'area di Azure in cui si creano l'app contenitore e il componente Java.
    ENVIRONMENT Nome dell'ambiente dell'app contenitore per l'applicazione demo.
    RESOURCE_GROUP Nome del gruppo di risorse di Azure per l'applicazione demo.
    JAVA_COMPONENT_NAME Nome del componente Java creato per l'app contenitore. In questo caso, si crea un componente Amministratore per Spring Java.
    IMAGE Immagine del contenitore usata nell'app contenitore.
  2. Accedere ad Azure con l'interfaccia della riga di comando di Azure.

    az login
    
  3. Creare un gruppo di risorse.

    az group create \
        --name $RESOURCE_GROUP \
        --location $LOCATION \
        --query "properties.provisioningState"
    

    Quando si usa il parametro --query, la risposta filtra fino a un semplice messaggio di esito positivo o negativo.

  4. Creare l'ambiente dell'app contenitore.

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    

Usare il componente

Ora che si dispone di un ambiente esistente, è possibile creare l'app contenitore e associarla a un'istanza del componente Java di un componente Admin for Spring.

  1. Creare il componente Java Amministrazione per Spring.

    az containerapp env java-component admin-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 1 \
        --max-replicas 1
    
  2. Aggiornare il componente Java Amministrazione per Spring.

    az containerapp env java-component admin-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 2 \
        --max-replicas 2
    

Associare l'app contenitore al componente Java Amministrazione per Spring

  1. Creare l'app contenitore e associarla al componente Admin for Spring.

    az containerapp create \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --environment $ENVIRONMENT \
        --image $IMAGE \
        --min-replicas 1 \
        --max-replicas 1 \
        --ingress external \
        --target-port 8080 \
        --bind $JAVA_COMPONENT_NAME
    

L'operazione di associazione connette l'app contenitore al componente Admin for Spring Java. L'app contenitore può ora leggere i valori di configurazione dalle variabili di ambiente, principalmente la proprietà SPRING_BOOT_ADMIN_CLIENT_URL, e connettersi al componente Admin for Spring.

L'associazione inserisce anche la proprietà seguente:

"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",

Questa proprietà indica che il client del componente Admin per Spring deve usare l'indirizzo IP dell'istanza dell'app contenitore quando ci si connette al server Admin per Spring.

Facoltativo: Annullare l'associazione dell'app contenitore dal componente Java Amministrazione per Spring

Per rimuovere un'associazione da un'app contenitore, usare l'opzione --unbind.

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

Visualizzare il dashboard

Importante

Per visualizzare il dashboard, l'account deve avere almeno il ruolo Microsoft.App/managedEnvironments/write nella risorsa dell'ambiente gestito. È possibile assegnare in modo esplicito il ruolo Owner o Contributor nella risorsa. È anche possibile seguire la procedura per creare una definizione di ruolo personalizzata e assegnarla all'account.

Note

Il dashboard non è disponibile in Azure gestito da 21Vianet.

  1. Creare la definizione del ruolo personalizzata.

    az role definition create --role-definition '{
        "Name": "<ROLE_NAME>",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    Assicurarsi di sostituire i segnaposto tra le parentesi <> con i valori.

  2. Assegnare il ruolo personalizzato all'account nella risorsa dell'ambiente gestito.

    Ottenere l'ID risorsa dell'ambiente gestito:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
        --query id \
        --output tsv)
    
  3. Assegnare il ruolo all'account.

    Prima di eseguire questo comando, sostituire il segnaposto, come indicato dalle parentesi quadre <>, con l'ID utente o l'entità servizio o il nome del ruolo.

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "<ROLE_NAME>" \
        --scope $ENVIRONMENT_ID
    

    Note

    Il valore <USER_OR_SERVICE_PRINCIPAL_ID> deve essere l'identità usata per accedere al portale di Azure. Il valore <ROLE_NAME> è il nome assegnato nel passaggio 1.

  4. Ottenere l'URL del dashboard di Amministrazione per Spring.

    az containerapp env java-component admin-for-spring show \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --query properties.ingress.fqdn \
        --output tsv
    

    Questo comando restituisce l'URL che è possibile usare per accedere al dashboard Admin for Spring. Con il dashboard è anche possibile visualizzare l'app contenitore, come illustrato nello screenshot seguente.

    Screenshot che mostra la panoramica del dashboard Admin for Spring.

Pulire le risorse

Le risorse create in questa esercitazione influiscono sulla fattura di Azure. Se non si prevede di usare questi servizi a lungo termine, eseguire il comando seguente per rimuovere tutti gli elementi creati in questa esercitazione.

az group delete --resource-group $RESOURCE_GROUP

Dipendenza

Quando si usa il componente admin nella propria app contenitore, aggiungere la seguente dipendenza nel file pom.xml. Sostituire il numero di versione con la versione più recente disponibile nel repository Maven.

<dependency>
    <groupId>de.codecentric</groupId>
    <version>3.3.2</version>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

Note

Non è necessario aggiungere la dipendenza client di avvio dell'amministratore per Spring Boot Admin se si abilita l'agente Java nell'app contenitore eseguendo il comando seguente nell'interfaccia della riga di comando di Azure:

az containerapp update --enable-java-agent \
--resource-group $RESOURCE_GROUP \
--name $APP_NAME

Proprietà configurabili

A partire da Spring Boot 2, gli endpoint diversi da health e info non vengono esposti per impostazione predefinita. È possibile esporli aggiungendo la configurazione seguente nel file application.properties.

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

Elenco di configurazione consentito per il componente Amministrazione per Spring

L'elenco seguente illustra in dettaglio le proprietà del componente Amministrazione che è possibile configurare per l'app. Per altre informazioni, vedere Spring Boot Admin.

Nome proprietà Descrizione Valore predefinito
spring.boot.admin.server.enabled Abilita Spring Boot Admin Server. true
spring.boot.admin.context-path Prefisso del percorso in cui vengono serviti gli asset statici e l'API del server di amministrazione. Relativo a Dispatcher-Servlet.
spring.boot.admin.monitor.status-interval Intervallo di tempo in millisecondi per controllare lo stato delle istanze. 10,000ms
spring.boot.admin.monitor.status-lifetime Durata dello stato in millisecondi. Lo stato non viene aggiornato finché l'ultimo stato non è scaduto. 10.000 ms
spring.boot.admin.monitor.info-interval Intervallo di tempo in millisecondi per controllare le informazioni delle istanze. 1m
spring.boot.admin.monitor.info-lifetime Durata delle informazioni in minuti. Le informazioni non vengono aggiornate finché le ultime informazioni non sono scadute. 1m
spring.boot.admin.monitor.default-timeout Timeout predefinito durante l'invio di richieste. È possibile eseguire l'override di singoli valori per endpoint specifici usando spring.boot.admin.monitor.timeout.*. 10,000
spring.boot.admin.monitor.timeout.* Coppie chiave-valore con il timeout per endpointId. Il valore predefinito è default-timeout.
spring.boot.admin.monitor.default-retries Numero predefinito di tentativi per le richieste non riuscite. Le richieste che modificano i dati (PUT, POST, PATCH, DELETE) non vengono ritentate. È possibile eseguire l'override di singoli valori per endpoint specifici usando spring.boot.admin.monitor.retries.*. 0
spring.boot.admin.monitor.retries.* Coppie chiave-valore con il numero di tentativi per endpointId. Le richieste che modificano i dati (PUT, POST, PATCH, DELETE) non vengono ritentate. Il valore predefinito è default-retries.
spring.boot.admin.metadata-keys-to-sanitize Valori dei metadati per le chiavi corrispondenti a questi modelli di espressione regolare usati per la purificazione in tutti gli output JSON. A partire da Spring Boot 3, tutti i valori dell'attuatore vengono mascherati per impostazione predefinita. Per altre informazioni su come configurare il processo di annullamento della purificazione, vedere Purificare i valori sensibili. ".*password$", ".*secret$", ".*key$", ".*token$", ".*credentials.*", ".*vcap_services$"
spring.boot.admin.probed-endpoints Per le applicazioni client Spring Boot 1.x, Spring Boot Admin indaga gli endpoint specificati usando una OPTIONS richiesta. Se il percorso è diverso dall'ID, è possibile specificare questo valore come id:path, ad esempio: health:ping. "health", "env", "metrics", "httptrace:trace", "threaddump:dump", "jolokia", "info", "logfile", "refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents"
spring.boot.admin.instance-proxy.ignored-headers Intestazioni da non inoltrare quando si inviano richieste ai client. "Cookie", "Set-Cookie", "Authorization"
spring.boot.admin.ui.title Titolo della pagina visualizzato. "Spring Boot Admin"
spring.boot.admin.ui.poll-timer.cache Durata del polling in millisecondi per recuperare nuovi dati della cache. 2500
spring.boot.admin.ui.poll-timer.datasource Durata del polling in millisecondi per recuperare nuovi dati dell'origine dati. 2500
spring.boot.admin.ui.poll-timer.gc Durata del polling in millisecondi per recuperare nuovi dati di Garbage Collection. 2500
spring.boot.admin.ui.poll-timer.process Durata del polling in millisecondi per recuperare nuovi dati dei processi. 2500
spring.boot.admin.ui.poll-timer.memory Durata del polling in millisecondi per recuperare nuovi dati di memoria. 2500
spring.boot.admin.ui.poll-timer.threads Durata del polling in millisecondi per recuperare nuovi dati dei thread. 2500
spring.boot.admin.ui.poll-timer.logfile Durata del polling in millisecondi per recuperare nuovi dati dei file di log. 1000
spring.boot.admin.ui.enable-toasts Abilita o disabilita le notifiche di tipo avviso popup. false
spring.boot.admin.ui.title Valore del titolo della finestra del browser. ""
spring.boot.admin.ui.brand Codice HTML di cui viene eseguito il rendering nell'intestazione di spostamento e che per impostazione predefinita assume il valore dell'etichetta di Spring Boot Admin. Per impostazione predefinita, il logo di Spring Boot Admin è seguito dal nome. ""
management.scheme Valore sostituito nell'URL del servizio usato per accedere agli endpoint attuatore.
management.address Valore sostituito nell'URL del servizio usato per accedere agli endpoint attuatore.
management.port Valore sostituito nell'URL del servizio usato per accedere agli endpoint attuatore.
management.context-path Valore aggiunto all'URL del servizio usato per accedere agli endpoint attuatore. ${spring.boot.admin.discovery.converter.management-context-path}
health.path Valore aggiunto all'URL del servizio usato per il controllo dell'integrità. Ignorato da EurekaServiceInstanceConverter. ${spring.boot.admin.discovery.converter.health-endpoint}
spring.boot.admin.discovery.enabled Abilita il supporto di DiscoveryClient per Admin Server. true
spring.boot.admin.discovery.converter.management-context-path Valore aggiunto a service-url del servizio individuato quando il valore management-url viene convertito da DefaultServiceInstanceConverter. /actuator
spring.boot.admin.discovery.converter.health-endpoint-path Valore aggiunto a management-url del servizio individuato quando il valore health-url viene convertito da DefaultServiceInstanceConverter. "health"
spring.boot.admin.discovery.ignored-services Servizi ignorati quando si usa l'individuazione e non registrati come applicazione. Supporta modelli semplici, ad esempio "foo*", "*bar" e "foo*bar*".
spring.boot.admin.discovery.services Servizi inclusi quando si usa l'individuazione e registrati come applicazione. Supporta modelli semplici, ad esempio "foo*", "*bar" e "foo*bar*". "*"
spring.boot.admin.discovery.ignored-instances-metadata I servizi vengono ignorati se contengono almeno un elemento di metadati che corrisponde ai modelli in questo elenco. Supporta modelli come "discoverable=false".
spring.boot.admin.discovery.instances-metadata I servizi vengono inclusi se contengono almeno un elemento di metadati che corrisponde ai modelli nell'elenco. Supporta modelli come "discoverable=true".

Configurazioni comuni

  • Registrazione delle configurazioni correlate:

Limitazioni

  • Il dashboard di amministrazione di Spring Boot non è disponibile in Azure gestito da 21Vianet.

Integrare l'Amministrazione gestita per Spring con Eureka Server per Spring