Condividi tramite


Esercitazione: Connettersi a un amministratore gestito per Spring in App contenitore di Azure

Il componente Amministratore per Spring gestito offre un'interfaccia amministrativa per le applicazioni Web Spring Boot che espongono endpoint dell'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 apprenderai a:

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

Se si vuole integrare Admin per Spring con Eureka Server for Spring, vedere In alternativa, integrare Admin for Spring con Eureka 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 la fatturazione imprevista.

Prerequisiti

Considerazioni

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

Articolo Spiegazione
Ambito I componenti vengono eseguiti nello stesso ambiente dell'app contenitore connessa.
Scalabilità Il componente non può essere ridimensionato. 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 Gi.
Prezzi La fatturazione dei componenti rientra nei prezzi basati sul consumo. Le risorse utilizzate dai componenti gestiti vengono fatturate in base alle tariffe attive/inattive. È possibile eliminare i componenti che non sono più in uso per interrompere la fatturazione.
Binding Le app contenitore si connettono a un componente tramite un'associazione. Le associazioni inseriscsono 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.

Attrezzaggio

Prima di iniziare a usare il componente Admin for Spring, è prima 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 --query parametro , 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 per Spring.

  1. Creare il componente Amministratore per Spring Java.

    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 associa l'app contenitore al componente Java Amministrazione per Spring. L'app contenitore può ora leggere i valori di configurazione dalle variabili di ambiente, principalmente la SPRING_BOOT_ADMIN_CLIENT_URL proprietà e connettersi al componente Admin per 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 preferire l'indirizzo IP dell'istanza dell'app contenitore quando ci si connette all'amministratore per spring server.

Facoltativo: annullare l'associazione dell'app contenitore dal componente Admin for Spring Java

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, è necessario che all'account sia assegnato almeno il ruolo Microsoft.App/managedEnvironments/write nella risorsa ambiente gestita. È possibile assegnare in modo esplicito il Owner ruolo o Contributor nella risorsa. È anche possibile seguire la procedura per creare una definizione di ruolo personalizzata e assegnarla all'account.

  1. Creare di una 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
    

    Nota

    Il <USER_OR_SERVICE_PRINCIPAL_ID> valore deve essere l'identità usata per accedere al portale di Azure. Il <ROLE_NAME> valore è 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 hanno effetto sulla fattura di Azure. Se non si intende 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 amministratore nella propria app contenitore, è necessario aggiungere la dipendenza seguente 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>

Proprietà configurabili

A partire da Spring Boot 2, gli endpoint diversi da health e info non sono 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 Default value
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. Per le richieste che modificano i dati (PUT, POST, PATCH, DELETE) non vengono mai effettuati nuovi tentativi. È 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. Per le richieste che modificano i dati (PUT, POST, PATCH, DELETE) non vengono mai effettuati nuovi tentativi. 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 dell'approvazione, vedere Sanificare 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 esegue il probe per gli endpoint specificati usando una OPTIONS richiesta. Se il percorso è diverso dall'ID, è possibile specificare questo valore come id:path , health:pingad esempio . "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 amministrazione di Spring Boot è 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 "foo*"esempio , "*bar"e "foo*bar*".
spring.boot.admin.discovery.services Servizi inclusi quando si usa l'individuazione e registrati come applicazione. Supporta modelli semplici, ad "foo*"esempio , "*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:
    • logging.level.*
    • logging.group.*
    • Tutte le altre configurazioni nello spazio dei nomi logging.* non devono essere consentite. Ad esempio, la scrittura di file di log tramite logging.file non deve essere consentita.

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