Compartir a través de


Tutorial: Conexión a un Administrador gestionado para Spring en Azure Container Apps

El componente Administrador gestionado para Spring ofrece una interfaz administrativa para las aplicaciones web de Spring Boot que exponen puntos de conexión de actuadores. Como componente administrado en Azure Container Apps, puede enlazar fácilmente su aplicación contenedora con el Administrador para Spring para una integración y una administración perfectas.

Este tutorial le muestra cómo crear un componente de Administrador para Spring Java y enlazarlo a su aplicación contenedora para que pueda supervisar y administrar sus aplicaciones de Spring con facilidad.

Captura de pantalla que muestra información general del panel Administrador para Spring Insights.

En este tutorial, aprenderá a:

  • Cree un componente Administrador para Spring Java.
  • Vincule su aplicación contenedora a un componente Administrador para Spring Java.

Si quiere integrar Administrador para Spring con Eureka Server para Spring, vea Integrar Administrador para Spring con Eureka Server para Spring en Azure Container Apps en su lugar.

Importante

En este tutorial se usan servicios que pueden afectar a la factura de Azure. Si decide seguir, asegúrese de eliminar los recursos destacados en este artículo para evitar una facturación inesperada.

Requisitos previos

Consideraciones

Al ejecutar el componente Administrador para Spring en Container Apps, tenga en cuenta los detalles siguientes:

Elemento Explicación
Ámbito Los componentes se ejecutan en el mismo entorno que la aplicación contenedora conectada.
Ampliación El componente no se puede escalar. Las propiedades de escalado minReplicas y maxReplicas se establecen en 1.
Recursos Se ha corregido la asignación de recursos de contenedor para los componentes. El número de núcleos de CPU es 0,5 y el tamaño de memoria es 1 Gi.
Precios La facturación de componentes se encuentra bajo los precios basados en el consumo. Los recursos consumidos por los componentes administrados se facturan a las tarifas activas o inactivas. Puede eliminar componentes que ya no estén en uso para detener la facturación.
Enlace Las aplicaciones de contenedor se conectan a un componente a través de un enlace. Los enlaces insertan configuraciones en variables de entorno de la aplicación contenedora. Una vez establecido un enlace, la aplicación contenedora puede leer los valores de configuración de las variables de entorno y conectarse al componente.

Configurar

Antes de empezar a trabajar con el componente Administrador para Spring, primero debe crear los recursos necesarios.

Los siguientes comandos le ayudarán a crear su grupo de recursos y su entorno de Container Apps.

  1. Cree variables para admitir la configuración de la aplicación. Estos valores se proporcionan para usted con fines de esta lección.

    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"
    
    Variable Descripción
    LOCATION Ubicación de la región de Azure donde se crea la aplicación de contenedor y el componente de Java.
    ENVIRONMENT Nombre del entorno de la aplicación contenedora para la aplicación de demostración.
    RESOURCE_GROUP Nombre del grupo de recursos de Azure para la aplicación de demostración.
    JAVA_COMPONENT_NAME Nombre del componente de Java creado para la aplicación contenedora. En este caso, se crea un componente de Java Administrador para Spring.
    IMAGE Imagen de contenedor usada en la aplicación contenedora.
  2. Inicio de sesión en Azure con la CLI de Azure.

    az login
    
  3. Cree un grupo de recursos.

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

    El uso del parámetro --query filtra la respuesta a un mensaje de éxito o error simple.

  4. Cree el entorno de Container Apps.

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

Uso del componente

Ahora que ya tiene un entorno, puede crear su aplicación contenedora y enlazarla a una instancia de componente de Java del componente Administrador para Spring.

  1. Cree el componente de Java Administrador para 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. Actualice el componente de Java Administrador para 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
    

Enlace de su aplicación contenedora con el componente de Java Administrador para Spring

  1. Cree la aplicación contenedora y vincule al componente Administrador para 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
    

La operación de enlace enlaza la aplicación contenedora con el componente de Java Administrador para Spring. La aplicación contenedora ahora puede leer los valores de configuración de las variables de entorno, principalmente la propiedad SPRING_BOOT_ADMIN_CLIENT_URL y conectarse al componente Administrador para Spring.

El enlace también inserta la siguiente propiedad:

"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",

Esta propiedad indica que el cliente del componente Administrador para Spring debe preferir la dirección IP de la instancia de la aplicación contenedora al conectarse al servidor Administrador para Spring.

Opcional: Desenlace de la aplicación contenedora del componente de Java Administrador para Spring

Para quitar un enlace de una aplicación de contenedor, recurra a la opción --unbind.

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

Ver el panel

Importante

Para ver el panel, debe tener al menos el rol de Microsoft.App/managedEnvironments/write asignado a su cuenta en el recurso de entorno administrado. Puede asignar explícitamente el rol Owner o Contributor en el recurso. También puede seguir los pasos para crear una definición de roles personalizada y asignarla a su cuenta.

  1. Cree la definición de rol personalizada.

    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>"]
    }'
    

    Asegúrese de reemplazar los marcadores de posición entre los corchetes <> por sus valores.

  2. Asigne el rol personalizado a su cuenta en el recurso de entorno administrado.

    Obtenga el identificador de recurso del entorno administrado:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
        --query id \
        --output tsv)
    
  3. Asigne el rol a su cuenta.

    Antes de ejecutar este comando, reemplace el marcador de posición , como se indica en los corchetes de <>, por el identificador de usuario o la entidad de servicio o el nombre del rol.

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

    Nota:

    El valor <USER_OR_SERVICE_PRINCIPAL_ID> debe ser la identidad que se usa para acceder a Azure Portal. El valor <ROLE_NAME> es el nombre que asignó en el paso 1.

  4. Obtenga la URL del panel del Administrador para 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
    

    Este comando le devuelve la dirección URL que puede usar para acceder al panel del Administrador para Spring. Con el panel, también puede ver la aplicación contenedora, como se muestra en la captura de pantalla siguiente.

    Captura de pantalla que muestra la información general del panel Administrador para Spring.

Limpieza de recursos

Los recursos creados en este tutorial tienen un efecto en la factura de Azure. Si no va a usar estos servicios a largo plazo, ejecute el siguiente comando para quitar todo lo creado en este tutorial.

az group delete --resource-group $RESOURCE_GROUP

Dependencia

Al usar el componente de administrador en su propia aplicación de contenedor, debe agregar la siguiente dependencia en el archivo de pom.xml. Reemplace el número de versión por la versión más reciente disponible en el Repositorio de Maven.

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

Propiedades configurables

A partir de Spring Boot 2, los puntos de conexión distintos de health y info no se exponen de forma predeterminada. Puede exponerlos agregando la siguiente configuración en el archivo application.properties.

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

Lista de configuración permitida para el administrador de Spring

En la lista siguiente se detallan las propiedades del componente de administrador que puede configurar para la aplicación. Para obtener más información, consulte Administrador de Spring Boot.

Nombre de la propiedad Descripción Default value
spring.boot.admin.server.enabled Habilita el servidor de administración de Spring Boot. true
spring.boot.admin.context-path Prefijo de ruta de acceso donde se sirven los recursos estáticos y la API del servidor de administración. Relativo al Dispatcher-Servlet.
spring.boot.admin.monitor.status-interval Intervalo de tiempo en milisegundos para comprobar el estado de las instancias. 10,000ms
spring.boot.admin.monitor.status-lifetime Duración del estado en milisegundos. El estado no se actualiza siempre que el último estado no haya expirado. 10 000 ms
spring.boot.admin.monitor.info-interval Intervalo de tiempo en milisegundos para comprobar la información de las instancias. 1m
spring.boot.admin.monitor.info-lifetime Duración de la información en minutos. La información no se actualiza siempre que la última información no haya expirado. 1m
spring.boot.admin.monitor.default-timeout Tiempo de espera predeterminado al realizar solicitudes. Los valores individuales para puntos de conexión específicos se pueden invalidar mediante spring.boot.admin.monitor.timeout.*. 10,000
spring.boot.admin.monitor.timeout.* Pares clave-valor con el tiempo de espera por endpointId. El valor predeterminado es default-timeout.
spring.boot.admin.monitor.default-retries Número predeterminado de reintentos para solicitudes con error. Las solicitudes que modifican datos (PUT, POST, PATCH, DELETE) nunca se reintentan. Los valores individuales para puntos de conexión específicos se pueden invalidar mediante spring.boot.admin.monitor.retries.*. 0
spring.boot.admin.monitor.retries.* Pares clave-valor con el número de reintentos por endpointId. Las solicitudes que modifican datos (PUT, POST, PATCH, DELETE) nunca se reintentan. El valor predeterminado es default-retries.
spring.boot.admin.metadata-keys-to-sanitize Valores de metadatos para las claves que coinciden con estos patrones regex usados para sanear en todas las salidas JSON. A partir de Spring Boot 3, todos los valores del accionador se enmascaran de manera predeterminada. Para obtener más información acerca de cómo configurar el proceso de sanitización, consulte Sanear valores confidenciales. ".*password$", ".*secret$", ".*key$", ".*token$", ".*credentials.*", ".*vcap_services$"
spring.boot.admin.probed-endpoints Para las aplicaciones cliente de Spring Boot 1.x, Spring Boot Admin sondea los puntos de conexión especificados mediante una solicitud OPTIONS. Si la ruta de acceso difiere del identificador, puede especificar este valor como id:path (por ejemplo: 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 Encabezados que no se reenvía al realizar solicitudes a los clientes. "Cookie", "Set-Cookie", "Authorization"
spring.boot.admin.ui.title Título de página mostrado. "Spring Boot Admin"
spring.boot.admin.ui.poll-timer.cache Duración del sondeo en milisegundos para capturar nuevos datos de caché. 2500
spring.boot.admin.ui.poll-timer.datasource Duración del sondeo en milisegundos para capturar nuevos datos de origen de datos. 2500
spring.boot.admin.ui.poll-timer.gc Duración del sondeo en milisegundos para capturar nuevos datos de gc. 2500
spring.boot.admin.ui.poll-timer.process Duración del sondeo en milisegundos para capturar nuevos datos de proceso. 2500
spring.boot.admin.ui.poll-timer.memory Duración del sondeo en milisegundos para capturar nuevos datos de memoria. 2500
spring.boot.admin.ui.poll-timer.threads Duración del sondeo en milisegundos para capturar nuevos datos de subprocesos. 2500
spring.boot.admin.ui.poll-timer.logfile Duración del sondeo en milisegundos para capturar nuevos datos de archivo de registro. 1000
spring.boot.admin.ui.enable-toasts Habilita o deshabilita las notificaciones del sistema. false
spring.boot.admin.ui.title Valor de título de la ventana del explorador. ""
spring.boot.admin.ui.brand El código HTML representado en el encabezado de navegación y tiene como valor predeterminado la etiqueta Administrador de Spring Boot. De manera predeterminada, el logotipo de administrador de Spring Boot va seguido de su nombre. ""
management.scheme Valor que se sustituye en la dirección URL del servicio que se usa para acceder a los puntos de conexión del accionador.
management.address Valor que se sustituye en la dirección URL del servicio que se usa para acceder a los puntos de conexión del accionador.
management.port Valor que se sustituye en la dirección URL del servicio que se usa para acceder a los puntos de conexión del accionador.
management.context-path Valor que se anexa a la dirección URL del servicio utilizada para acceder a los puntos de conexión del accionador. ${spring.boot.admin.discovery.converter.management-context-path}
health.path Valor que se anexa a la dirección URL del servicio que se usa para la comprobación de estado. Omite el EurekaServiceInstanceConverter. ${spring.boot.admin.discovery.converter.health-endpoint}
spring.boot.admin.discovery.enabled Habilita la compatibilidad de DiscoveryClient con el servidor de administración. true
spring.boot.admin.discovery.converter.management-context-path Valor que se anexa al service-url del servicio detectado cuando el valor management-url lo convierte en DefaultServiceInstanceConverter. /actuator
spring.boot.admin.discovery.converter.health-endpoint-path Valor que se anexa al management-url del servicio detectado cuando el valor health-url lo convierte en DefaultServiceInstanceConverter. "health"
spring.boot.admin.discovery.ignored-services Servicios que se omiten al usar la detección y no se registran como aplicación. Admite patrones simples, como "foo*", "*bar" y "foo*bar*".
spring.boot.admin.discovery.services Servicios incluidos al usar la detección y el registro como aplicación. Admite patrones simples, como "foo*", "*bar" y "foo*bar*". "*"
spring.boot.admin.discovery.ignored-instances-metadata Los servicios se omiten si contienen al menos un elemento de metadatos que coincide con los patrones de esta lista. Admite patrones como "discoverable=false".
spring.boot.admin.discovery.instances-metadata Los servicios incluidos si contienen al menos un elemento de metadatos que coincide con los patrones de la lista. Admite patrones como "discoverable=true".

Opciones de configuración comunes

  • Registro de configuraciones relacionadas:
    • logging.level.*
    • logging.group.*
    • Se debe prohibir cualquier otra configuración en logging.* espacio de nombres. Por ejemplo, se deben prohibir la escritura de archivos de registro mediante logging.file.

Integración del Administrador gestionado para Spring con Eureka Server para Spring