Compartir a través de


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 en false para que el servidor devuelva un estado HTTP 404, si no se encuentra la aplicación. De manera predeterminada, esta marca se establece en true.
  • 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.

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.

  1. 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));
            }
        }
    }
    
  2. 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 en false y refresh-interval se establece en 60 segundos.

    spring:
        cloud:
            config:
            auto-refresh: true
            refresh-interval: 60
    management:
        endpoints:
            web:
            exposure:
                include:
                - refresh
    
  3. Agregue @RefreshScope en el código. En el ejemplo siguiente, la variable connectTimeout 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.

  1. 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
    
  2. 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:

  1. Agregue la propiedad cifrada en el archivo *.properties* en el repositorio git.

  2. 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
    
  3. 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 establece spring.cloud.bootstrap.enabled=true como una propiedad del sistema, establezca encrypt.key en bootstrap.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
    

Pasos siguientes