Configuración de los valores del componente Config Server para Spring en Azure Container Apps (versión preliminar)
Config Server para Spring proporciona una ubicación centralizada para que los datos de configuración estén disponibles para varias aplicaciones. Use las instrucciones siguientes para aprender a configurar y administrar el componente Config Server para Spring.
Mostrar
Puede ver los detalles de un componente individual por nombre mediante el comando show
.
Antes de ejecutar el comando siguiente, reemplace los marcadores de posición rodeados por <>
por los valores.
az containerapp env java-component config-server-for-spring show \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP> \
--name <JAVA_COMPONENT_NAME>
List
Puede enumerar todos los componentes de Java registrados mediante el comando list
.
Antes de ejecutar el comando siguiente, reemplace los marcadores de posición rodeados por <>
por los valores.
az containerapp env java-component list \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP>
Enlazar
Use el parámetro --bind
del comando update
para crear una conexión entre el componente Config Server para Spring y la aplicación contenedora.
Antes de ejecutar el comando siguiente, reemplace los marcadores de posición rodeados por <>
por los valores.
az containerapp update \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--bind <JAVA_COMPONENT_NAME>
Unbind
Para interrumpir la conexión entre la aplicación contenedora y el componente Config Server para Spring, use el parámetro --unbind
del comando update
.
Antes de ejecutar el comando siguiente, reemplace los marcadores de posición rodeados por <>
por los valores.
az containerapp update \
--name <CONTAINER_APP_NAME> \
--unbind <JAVA_COMPONENT_NAME> \
--resource-group <RESOURCE_GROUP>
Opciones de configuración
El comando az containerapp update
usa el parámetro --configuration
para controlar cómo se configura Config Server para Spring. Puede usar varios parámetros a la vez siempre que estén separados por un espacio. Puede encontrar más detalles en la documentación de Spring Cloud Config Server.
En la tabla siguiente se enumeran los distintos valores de configuración disponibles.
Configuraciones de back-end de Git
Nombre | Descripción |
---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
URI del repositorio remoto. |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
Nombre de usuario para la autenticación con repositorio remoto. |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
Contraseña para la autenticación con repositorio remoto. |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
Rutas de acceso de búsqueda que se usarán en la copia de trabajo local. De forma predeterminada, solo busca en la raíz. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
Marca para indicar que el repositorio debe forzar la extracción. Si fuera true, descarte los cambios locales y tome del repositorio remoto. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
La etiqueta predeterminada que se usa para Git es main. Si no se establece spring.cloud.config.server.git.default-label y no existe una rama denominada main, el servidor de configuración también intentará de forma predeterminada comprobar una rama denominada master. Si quisiera deshabilitar el comportamiento de la rama de reserva, establezca spring.cloud.config.server.git.tryMasterBranch en false. |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
De forma predeterminada, el servidor de configuración intentará comprobar una rama denominada master. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
La validación por parte del servidor de configuración del certificado SSL del servidor Git puede desactivarse estableciendo la propiedad git.skipSslValidation en true. |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
Marca para indicar que el repositorio se debe clonar al iniciarse (no a petición). Por lo general, conduce a un inicio más lento, pero a una primera consulta más rápida. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
Tiempo de espera (en segundos) para obtener conexión HTTP o SSH (si procede). Valor predeterminado de 5 segundos. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Con qué frecuencia el servidor de configuración capturará los datos de configuración actualizados del back-end de Git. |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
Clave privada SSH válida. Debe establecerse si ignore-local-ssh-settings es true y el formato de URI de Git es SSH. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
Clave de host SSH válida. Debe establecerse si también se establece host-key-algorithm. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
Debe ser ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 o ecdsa-sha2-nistp521. Debe establecerse si también se establece host-key. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true o false. Si fuera false, omita los errores con la clave de host. |
spring.cloud.config.server.git.repos.{repoName} |
URI del repositorio remoto. |
spring.cloud.config.server.git.repos.{repoName}.pattern |
El formato de patrón es una lista separada por comas de nombres {application}/{profile} con caracteres comodín. Si {application}/{profile} no coincidiera con ninguno de los patrones, usará el URI predeterminado definido. |
Opciones de configuración comunes
Registro de configuraciones relacionadas
- logging.level.*
- logging.group.*
- Se debe prohibir cualquier otra configuración en el espacio de nombres logging.*, por ejemplo, escribir archivos de registro mediante
logging.file
debe estar prohibido.
spring.cloud.config.server.overrides
- Asignación adicional de un origen de propiedad que se enviará a todos los clientes incondicionalmente.
spring.cloud.config.override-none
- Puede cambiar la prioridad de todas las invalidaciones del cliente para que sean más similares a los valores predeterminados, lo que permite que las aplicaciones proporcionen sus propios valores en variables de entorno o propiedades del sistema estableciendo la marca spring.cloud.config.override-none=true (el valor predeterminado es false) en el repositorio remoto.
spring.cloud.config.allow-override
- Si habilita el primer arranque de configuración, puede permitir que las aplicaciones cliente invaliden la configuración del servidor de configuración colocando dos propiedades dentro de la configuración de aplicaciones procedente del servidor de configuración.
spring.cloud.config.server.health.
- Puede configurar el indicador de mantenimiento para comprobar más aplicaciones junto con perfiles personalizados y etiquetas personalizadas
spring.cloud.config.server.accept-empty
- Puede establecer
spring.cloud.config.server.accept-empty
enfalse
para que el servidor devuelva un estado HTTP404
, si no se encuentra la aplicación. De manera predeterminada, esta marca se establece entrue
.
- Puede establecer
Cifrado y descifrado (simétrico)
- encrypt.key
- Es conveniente usar una clave simétrica, ya que es un valor de propiedad único para configurar.
- spring.cloud.config.server.encrypt.enabled
- Puede establecerlo en
false
, para deshabilitar el descifrado del lado servidor.
- Puede establecerlo en
- encrypt.key
Actualizar
Los servicios que consumen propiedades deben conocer el cambio antes de que se produzca. El método de notificación predeterminado para Config Server para Spring implica desencadenar manualmente el evento de actualización, como actualizar por llamada a https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh
, lo que puede no ser factible si hay muchas instancias de aplicación.
Como alternativa, puede actualizar automáticamente los valores de Config Server al dejar que el cliente de configuración examine los cambios en función de una actualización interna. Siga estos pasos para actualizar automáticamente los valores de Config Server.
Registre una tarea programada para actualizar el contexto en un intervalo determinado, como se muestra en el ejemplo siguiente.
@Configuration @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class}) @EnableScheduling public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer { @Value("${spring.cloud.config.refresh-interval:60}") private long refreshInterval; @Value("${spring.cloud.config.auto-refresh:false}") private boolean autoRefresh; private final RefreshEndpoint refreshEndpoint; public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) { this.refreshEndpoint = refreshEndpoint; } @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { if (autoRefresh) { // set minimal refresh interval to 5 seconds refreshInterval = Math.max(refreshInterval, 5); scheduledTaskRegistrar.addFixedRateTask(refreshEndpoint::refresh, Duration.ofSeconds(refreshInterval)); } } }
Habilite
autorefresh
y establezca el intervalo de actualización adecuado en el archivo application.yml. En el ejemplo siguiente, el cliente sondea un cambio de configuración cada 60 segundos, que es el valor mínimo que puede establecer para un intervalo de actualización.De forma predeterminada,
autorefresh
se establece enfalse
yrefresh-interval
se establece en 60 segundos.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refresh
Agregue
@RefreshScope
en el código. En el ejemplo siguiente, la variableconnectTimeout
se actualiza automáticamente cada 60 segundos.@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
Cifrado y descifrado con una clave simétrica
Descifrado del lado servidor
De forma predeterminada, el cifrado del lado servidor está habilitado. Siga estos pasos para habilitar el descifrado en la aplicación.
Agregue la propiedad cifrada en el archivo .properties en el repositorio git.
Por ejemplo, el archivo debe ser similar al ejemplo siguiente:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
Actualice el componente Config Server para Spring Java para usar el repositorio git que tiene la propiedad cifrada y establezca la clave de cifrado.
Antes de ejecutar el comando siguiente, reemplace los marcadores de posición rodeados por
<>
por los valores.az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> encrypt.key=randomKey
Descifrado del lado cliente
Puede usar el descifrado del lado cliente de las propiedades siguiendo los pasos siguientes:
Agregue la propiedad cifrada en el archivo
*.properties*
en el repositorio git.Actualice el componente Config Server para Spring Java para usar el repositorio git que tiene la propiedad cifrada y deshabilite el descifrado del lado servidor.
Antes de ejecutar el comando siguiente, reemplace los marcadores de posición rodeados por
<>
por los valores.az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> spring.cloud.config.server.encrypt.enabled=false
En la aplicación cliente, agregue la clave de descifrado
ENCRYPT_KEY=randomKey
como una variable de entorno.Alternativamente, si incluye spring-cloud-starter-bootstrap en el
classpath
, o establecespring.cloud.bootstrap.enabled=true
como una propiedad del sistema, establezcaencrypt.key
enbootstrap.properties
.Antes de ejecutar el comando siguiente, reemplace los marcadores de posición rodeados por
<>
por los valores.az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"
encrypt: key: somerandomkey