Configuración de una instancia administrada de Spring Cloud Config Server en Azure Spring Apps

Nota:

Azure Spring Apps es el nuevo nombre del servicio Azure Spring Cloud. Aunque el servicio tiene un nuevo nombre, verá el nombre antiguo en algunos lugares durante un tiempo mientras trabajamos para actualizar recursos, como capturas de pantalla, vídeos y diagramas.

Este artículo se aplica a: ✔️ Java ✔️ C#

Este artículo se aplica a: ✔️ Consumo estándar y dedicado (versión preliminar) ✔️ Básico/Estándar ❌ Enterprise

En este artículo se muestra cómo configurar una instancia administrada de Spring Cloud Config Server en el servicio Azure Spring Apps.

Spring Cloud Config Server ofrece soporte técnico para servidor y cliente para las configuraciones externalizadas de un sistema distribuido. La instancia de Config Server proporciona un lugar centralizado donde administrar las propiedades externas de las aplicaciones en todos los entornos. Para obtener más información al respecto, consulte la documentación de Spring Cloud Config.

Nota:

Para usar el servidor de configuración en el plan estándar de consumo y dedicado, primero debe habilitarlo. Para más información, consulte Habilitación y deshabilitación de Spring Cloud Config Server en Azure Spring Apps.

Requisitos previos

Restricción

Cuando se usa Config Server con un back-end de Git, hay algunas restricciones. Las propiedades siguientes se insertan automáticamente en el entorno de una aplicación para acceder a Config Server y a Service Discovery. Si también configura esas propiedades desde los archivos de Config Server, pueden aparecer conflictos y un comportamiento inesperado.

eureka.client.service-url.defaultZone
eureka.client.tls.keystore
eureka.instance.preferIpAddress
eureka.instance.instance-id
server.port
spring.cloud.config.tls.keystore
spring.config.import
spring.application.name
spring.jmx.enabled
management.endpoints.jmx.exposure.include

Precaución

No coloque estas propiedades en los archivos de aplicación de Config Server.

Creación de los archivos del servidor de configuración

Azure Spring Apps admite Azure DevOps Server, GitHub, GitLab y Bitbucket para almacenar los archivos de Config Server. Cuando el repositorio esté listo, podrá crear los archivos de configuración y almacenarlos en él.

Algunas propiedades configurables solo están disponibles para ciertos tipos. En las siguientes secciones se describen las propiedades de cada tipo de repositorio.

Nota:

Si no se especifica una etiqueta para Config Server, se le asignará la etiqueta predeterminada master (en el Git). Sin embargo, en GitHub, la rama predeterminada se ha cambiado recientemente de master a main. Para evitar errores de Config Server de Azure Spring Apps, preste atención a la etiqueta predeterminada al configurar Config Server con GitHub, especialmente para los repositorios recién creados.

Repositorio público

Si se usa un repositorio público, las propiedades configurables son más limitadas que con un repositorio privado.

En la tabla siguiente se enumeran las propiedades configurables que puede usar para configurar un repositorio de Git público.

Nota:

El uso de un guion (-) para separar palabras es la única convención de nomenclatura que se admite actualmente. Por ejemplo, se puede usar default-label, pero no defaultLabel.

Propiedad Obligatorio Característica
uri El URI del repositorio de Git que se usa como back-end de Config Server. Debe comenzar por http://, https://, git@ o ssh://.
default-label No Etiqueta predeterminada del repositorio de Git. Debe ser el nombre de rama, el nombre de etiqueta o el identificador de confirmación del repositorio.
search-paths No Matriz de cadenas que se usan para buscar en subdirectorios del repositorio de Git.

Repositorio privado con autenticación SSH

En la tabla siguiente se enumeran las propiedades configurables que puede usar para configurar un repositorio de Git privado con SSH.

Nota:

El uso de un guion (-) para separar palabras es la única convención de nomenclatura que se admite actualmente. Por ejemplo, se puede usar default-label, pero no defaultLabel.

Propiedad Obligatorio Característica
uri El URI del repositorio de Git que se usa como back-end de Config Server. Debe comenzar por http://, https://, git@ o ssh://.
default-label No Etiqueta predeterminada del repositorio de Git. Debe ser el nombre de rama, el nombre de etiqueta o el identificador de confirmación del repositorio.
search-paths No Matriz de cadenas que se usa para buscar en subdirectorios del repositorio de Git.
private-key No Clave privada SSH para acceder al repositorio de Git. Necesario cuando el URI comienza por git@ o ssh://.
host-key No La clave de host del servidor del repositorio de Git. No debe incluir el prefijo del algoritmo, tal y como se describe en host-key-algorithm.
host-key-algorithm No Algoritmo de la clave de host. Debe ser ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 o ecdsa-sha2-nistp521. Se requiere solo si host-key existe.
strict-host-key-checking No Indica si la instancia de Config Server no se puede iniciar al usar el valor privado host-key. Debería ser true (valor predeterminado) o false.

Repositorio privado con autenticación básica

En la tabla siguiente se enumeran las propiedades configurables que puede usar para configurar un repositorio de Git privado con autenticación básica.

Nota:

El uso de un guion (-) para separar palabras es la única convención de nomenclatura que se admite actualmente. Por ejemplo, use default-label, no defaultLabel.

Propiedad Obligatorio Característica
uri El URI del repositorio de Git que se usa como back-end de Config Server. Debe comenzar por http://, https://, git@ o ssh://.
default-label No Etiqueta predeterminada del repositorio de Git. Debe ser el nombre de rama, el nombre de etiqueta o el identificador de confirmación del repositorio.
search-paths No Matriz de cadenas que se usa para buscar en subdirectorios del repositorio de Git.
username No El nombre de usuario que se usa para acceder al servidor del repositorio de Git. Es necesario cuando el servidor del repositorio de Git admite la autenticación básica HTTP.
password No La contraseña o el token de acceso personal que se emplea para acceder al servidor del repositorio de Git. Es necesario cuando el servidor del repositorio de Git admite la autenticación básica HTTP.

Nota:

Muchos servidores de repositorio de Git admiten el uso de tokens, en lugar de contraseñas, para la autenticación HTTP básica. Algunos repositorios permiten que los tokens se conserven indefinidamente. Pero algunos servidores de repositorio de Git, incluido Azure DevOps Server, obligan a que los tokens expiren en unas horas. Los repositorios que hacen que los tokens expiren no deben usar la autenticación basada en tokens con Azure Spring Apps. Si usa este token, recuerde actualizarlo antes de que expire.

GitHub ha quitado la compatibilidad con la autenticación de contraseñas, por lo que debe usar un token de acceso personal en lugar de la autenticación de contraseña para GitHub. Para más información, consulte Requisitos de autenticación de tokens para las operaciones de Git.

Otros repositorios Git

En la tabla siguiente se enumeran las propiedades configurables que puede usar para configurar repositorios de Git con un patrón.

Nota:

El uso de un guion (-) para separar palabras es la única convención de nomenclatura que se admite actualmente. Por ejemplo, use default-label, no defaultLabel.

Propiedad Obligatorio Característica
repos No Mapa que consta de los valores de un repositorio de Git con un nombre determinado.
repos."uri" Sí en repos El URI del repositorio de Git que se usa como back-end de Config Server. Debe comenzar por http://, https://, git@ o ssh://.
repos."name" Sí en repos Un nombre para identificar el repositorio; por ejemplo, equipo-A o equipo-B. Se requiere solo si repos existe.
repos."pattern" No Matriz de cadenas que se utiliza para coincidir con un nombre de aplicación. Para cada patrón, use el formato {application}/{profile} con caracteres comodín.
repos."default-label" No Etiqueta predeterminada del repositorio de Git. Debe ser el nombre de rama, el nombre de etiqueta o el IOD de confirmación del repositorio.
repos."search-paths" No Matriz de cadenas que se usa para buscar en subdirectorios del repositorio de Git.
repos."username" No El nombre de usuario que se usa para acceder al servidor del repositorio de Git. Es necesario cuando el servidor del repositorio de Git admite la autenticación básica HTTP.
repos."password" No La contraseña o el token de acceso personal que se emplea para acceder al servidor del repositorio de Git. Es necesario cuando el servidor del repositorio de Git admite la autenticación básica HTTP.
repos."private-key" No Clave privada SSH para acceder al repositorio de Git. Obligatorio cuando el URI comienza por git@ o ssh://.
repos."host-key" No La clave de host del servidor del repositorio de Git. No debe incluir el prefijo del algoritmo, tal y como se describe en host-key-algorithm.
repos."host-key-algorithm" No Algoritmo de la clave de host. Debe ser ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 o ecdsa-sha2-nistp521. Se requiere solo si host-key existe.
repos."strict-host-key-checking" No Indica si la instancia de Config Server no se puede iniciar al usar el valor privado host-key. Debería ser true (valor predeterminado) o false.

En la tabla siguiente se muestran algunos ejemplos de patrones para configurar el servicio con un repositorio adicional opcional. Para obtener más información, consulte la sección Repositorios adicionales y la sección Coincidencia de patrones y varios repositorios de la documentación de Spring.

Patrones Descripción
test-config-server-app-0/* El patrón y el URI del repositorio coincide con una aplicación de Spring Boot denominada test-config-server-app-0 con cualquier perfil.
test-config-server-app-1/dev El patrón y el URI del repositorio coincide con una aplicación de Spring Boot denominada test-config-server-app-1 con un perfil de desarrollador.
test-config-server-app-2/prod El patrón y el URI del repositorio coincide con una aplicación de Spring Boot denominada test-config-server-app-2 con un perfil de producción.

Screenshot of Azure portal showing the Config Server page with the Patterns column of the Additional repositories table highlighted.

Adjuntar un repositorio de Config Server a Azure Spring Apps

Una vez que los archivos de configuración se han guardado en un repositorio, siga estos pasos para conectar Azure Spring Apps al repositorio.

  1. Inicie sesión en Azure Portal.

  2. Vaya a la página Información general de Azure Spring Apps.

  3. Seleccione Config Server en el panel de navegación izquierdo.

  4. En la sección Repositorio predeterminado, establezca el valor del URI en https://github.com/Azure-Samples/piggymetrics-config.

  5. Seleccione Validar.

    Screenshot of Azure portal showing the Config Server page.

  6. Cuando finalice la validación, seleccione Aplicar para guardar los cambios.

    Screenshot of Azure portal showing Config Server page with Apply button highlighted.

La actualización de la configuración puede tardar unos minutos. Cuando se haya completado la configuración, debería recibir una notificación.

Especificación de la información del repositorio directamente en Azure Portal

Puede escribir información de repositorio para el repositorio predeterminado y, opcionalmente, para repositorios adicionales.

Repositorio predeterminado

Siga los pasos de esta sección para especificar la información del repositorio de un repositorio público o privado.

  • Repositorio público: en la sección Repositorio predeterminado, en el cuadro Uri, pegue el URI del repositorio. Escriba config en el valor Etiqueta. Asegúrese de que el valor de Autenticación es Pública y, después, seleccione Aplicar.

  • Repositorio privado: Azure Spring Apps admite la autenticación básica basada en contraseñas o en tokens, además de SSH.

    • Autenticación básica: en la sección Repositorio predeterminado, en el cuadro URI, pegue el identificador URI del repositorio y, después, seleccione el valor de Autenticación para abrir el panel Edición de la autenticación. En la lista desplegable Tipo de autenticación, seleccione HTTP básica y, después, escriba el nombre de usuario y la contraseña o el token para conceder acceso a Azure Spring Apps. Seleccione OK (Aceptar) y Apply (Aplicar) para terminar de configurar la instancia de Config Server.

    Screenshot of the Default repository section showing authentication settings for Basic authentication.

    Nota:

    Muchos servidores de repositorio de Git admiten el uso de tokens, en lugar de contraseñas, para la autenticación HTTP básica. Algunos repositorios permiten que los tokens se conserven indefinidamente. Pero algunos servidores de repositorio de Git, incluido Azure DevOps Server, obligan a que los tokens expiren en unas horas. Los repositorios que hacen que los tokens expiren no deben usar la autenticación basada en tokens con Azure Spring Apps. Si usa este token, recuerde actualizarlo antes de que expire.

    GitHub ha quitado la compatibilidad con la autenticación de contraseñas, por lo que debe usar un token de acceso personal en lugar de la autenticación de contraseña para GitHub. Para más información, consulte Requisitos de autenticación de tokens para las operaciones de Git.

    • SSH: en la sección Repositorio predeterminado, en el cuadro URI, pegue el identificador URI del repositorio y, después, seleccione el valor de Autenticación para abrir el panel Edición de la autenticación. En el panel Editar autenticación, en la lista desplegable Tipo de autenticación, seleccione SSH y, después, escriba su clave privada. También puede especificar la clave de host y el algoritmo de claves de host. Incluya la clave pública en el repositorio de Config Server. Seleccione OK (Aceptar) y Apply (Aplicar) para terminar de configurar la instancia de Config Server.

    Screenshot of the Default repository section showing authentication settings for SSH authentication.

Repositorios adicionales

Si desea configurar el servicio con un repositorio adicional opcional, especifique el URI y la configuración de autenticación como hizo para el repositorio predeterminado. En el valor de Nombre, asigne un nombre al patrón y, después, seleccione Aplicar para asociarlo a la instancia.

Introducción de la información del repositorio en un archivo YAML

Si ha escrito un archivo YAML con la configuración del repositorio, puede importarlo directamente a Azure Spring Apps desde la máquina local. En el ejemplo siguiente se muestra un archivo YAML simple para un repositorio privado con autenticación básica.

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/azure-spring-apps-samples-pr/config-server-repository.git
          username: <username>
          password: <password/token>

Seleccione el botón Import settings (Importar configuración) y, después, seleccione el archivo YAML en el directorio del proyecto. Seleccione Import (Importar).

Screenshot of the Config Server Import settings pane.

Las notificaciones muestran una operación async. Config Server debe informar de que se ha realizado correctamente después de 1 o 2 minutos. La información del archivo YAML se muestra en Azure Portal. Seleccione Aplicar para finalizar la importación.

Uso de Azure Repos para la configuración de Azure Spring Apps

Azure Spring Apps puede acceder a los repositorios de Git públicos, protegidos mediante SSH o protegidos mediante la autenticación HTTP básica. La autenticación básica HTTP es la opción más fácil para crear y administrar repositorios con Azure Repos.

Obtención de la dirección URL y credenciales del repositorio

Siga estos pasos para obtener las credenciales y la dirección URL del repositorio.

  1. En el portal de Azure Repos de su proyecto, seleccione el botón Clonar:

  2. Copie la dirección URL de clonación del cuadro de texto. Esta dirección URL suele tener el formato siguiente:

    https://<organization name>@dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    Quite todo lo que hay después de https:// y antes de dev.azure.com, incluido el símbolo @. La dirección URL resultante debe tener el siguiente formato:

    https://dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    Guarde esta dirección URL para usarla en la siguiente sección.

  3. Seleccione Generar credenciales de Git para mostrar un nombre de usuario y una contraseña, que se deben guardar para su uso en la sección siguiente.

Configuración de Azure Spring Apps para acceder al repositorio de GIT

  1. Inicie sesión en Azure Portal.

  2. Vaya a la página Información general de Azure Spring Apps.

  3. Seleccione el servicio que desea configurar.

  4. En el panel izquierdo de la página del servicio, en Configuración, seleccione la pestaña Config Server. Configure el repositorio que creó anteriormente de la manera siguiente:

    • Agregue el URI del repositorio que ha guardado en la sección anterior.
    • Seleccione la configuración en Autenticación para abrir el panel Edición de autenticación.
    • En Tipo de autenticación, seleccione HTTP básica.
    • En Nombre de usuario, especifique el nombre de usuario que guardó en la sección anterior.
    • En Contraseña, especifique la contraseña que guardó en la sección anterior.
    • Seleccione Aceptar y espere a que finalice la operación.

    Screenshot of repository configuration settings.

Eliminación de la configuración

Seleccione Restablecer en la pestaña Config Server para borrar la configuración existente. Elimine la configuración del servidor de configuración si desea conectar la instancia de Config Server a otro origen, por ejemplo, al pasar de GitHub a Azure DevOps Server.

Actualización de Config Server

Cuando se cambian las propiedades, es necesario notificarlo a los servicios que las consumen antes de que se puedan realizar cambios. La solución predeterminada para Spring Cloud Config Server es desencadenar manualmente el evento de actualización, lo que puede no ser factible si hay muchas instancias de aplicación. Para más información, vea Configuración centralizada.

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.

    @ConditionalOnBean({RefreshEndpoint.class})
    @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 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(), refreshInterval * 1000);
            }
        }
    }
    
  2. Habilite la respuesta automática y establezca el intervalo de actualización adecuado en el archivo application.yml . En el ejemplo siguiente, el cliente sondea los cambios 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 el intervalo de actualización 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;
    }
    

Para obtener más información, consulte la muestra config-client-polling.

Pasos siguientes

En este artículo, ha aprendido a habilitar y configurar una instancia de Config Server de Spring Cloud. Para más información sobre la administración de la aplicación, consulte Escalado de una aplicación en Azure Spring Apps.