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.
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
- Una cuenta de Azure con una suscripción activa. Si aún no tiene ninguno, puede crear uno gratis.
- Azure CLI.
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.
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. Inicio de sesión en Azure con la CLI de Azure.
az login
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.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.
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
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
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.
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.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)
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.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.
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 mediantelogging.file
.
Contenido relacionado
Integración del Administrador gestionado para Spring con Eureka Server para Spring