Partager via


Configurer les paramètres du composant Config Server pour Spring dans Azure Container Apps

Config Server pour Spring fournit un emplacement centralisé qui rend les données de configuration disponibles pour plusieurs applications. Utilisez l’aide qui suit pour savoir comment configurer et gérer votre composant Config Server pour Spring.

Afficher

Vous pouvez afficher les détails d’un composant individuel par nom à l’aide de la commande show.

Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés de <> par vos valeurs.

az containerapp env java-component config-server-for-spring show \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --name <JAVA_COMPONENT_NAME>

List

Vous pouvez répertorier tous les composants Java inscrits à l’aide de la commande list.

Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés par <> par vos valeurs.

az containerapp env java-component list \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP>

Lier

Utilisez le paramètre --bind de la commande update pour créer une connexion entre le composant Config Server pour Spring et votre application de conteneur.

Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés de <> par vos valeurs.

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --bind <JAVA_COMPONENT_NAME>

Annuler la liaison

Pour arrêter la connexion entre votre application de conteneur et le composant Config Server pour Spring, utilisez le paramètre --unbind de la commande update.

Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés par <> par vos valeurs.

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --unbind <JAVA_COMPONENT_NAME> \
  --resource-group <RESOURCE_GROUP>

Options de configuration

La commande az containerapp update utilise le paramètre --configuration pour contrôler la configuration du Config Server pour Spring. Vous pouvez utiliser plusieurs paramètres à la fois tant qu’ils sont séparés par un espace. Vous trouverez plus de détails dans la documentation Spring Cloud Config Server.

Le tableau suivant liste les différentes valeurs de configuration disponibles.

Configurations du serveur principal Git

Nom Description
spring.cloud.config.server.git.uri
spring.cloud.config.server.git.repos.{repoName}.uri
URI du référentiel distant.
spring.cloud.config.server.git.username
spring.cloud.config.server.git.repos.{repoName}.username
Nom d’utilisateur pour l’authentification avec le référentiel distant.
spring.cloud.config.server.git.password
spring.cloud.config.server.git.repos.{repoName}.password
Mot de passe pour l’authentification avec le référentiel distant.
spring.cloud.config.server.git.search-paths
spring.cloud.config.server.git.repos.{repoName}.search-paths
Chemins de recherche à utiliser dans la copie de travail locale. Par défaut, recherche uniquement dans la racine.
spring.cloud.config.server.git.force-pull
spring.cloud.config.server.git.repos.{repoName}.force-pull
Indicateur pour indiquer que le référentiel doit forcer l’extraction. Si la valeur est true, ignorez les modifications locales et prenez à partir du référentiel distant.
spring.cloud.config.server.git.default-label
spring.cloud.config.server.git.repos.{repoName}.default-label
L’étiquette par défaut utilisée pour Git est main. Si vous ne définissez pas spring.cloud.config.server.git.default-label et qu’une branche nommée main n’existe pas, le serveur de configuration essaiera par défaut d’extraire une branche nommée master. Si vous souhaitez désactiver le comportement de la branche de secours, vous pouvez définir spring.cloud.config.server.git.tryMasterBranch sur false.
spring.cloud.config.server.git.try-master-branch
spring.cloud.config.server.git.repos.{repoName}.try-master-branch
Par défaut, le serveur de configuration essaiera de basculer vers une branche nommée master.
spring.cloud.config.server.git.skip-ssl-validation
spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation
La validation du certificat SSL du serveur Git par le serveur de configuration peut être désactivée en définissant la propriété git.skipSslValidation sur true.
spring.cloud.config.server.git.clone-on-start
spring.cloud.config.server.git.repos.{repoName}.clone-on-start
Indicateur pour indiquer que le référentiel doit être cloné au démarrage (pas à la demande). Entraîne généralement un démarrage est plus lent, mais une première requête plus rapide.
spring.cloud.config.server.git.timeout
spring.cloud.config.server.git.repos.{repoName}.timeout
Délai d’expiration (en secondes) pour obtenir une connexion HTTP ou SSH (le cas échéant). 5 secondes par défaut.
spring.cloud.config.server.git.refresh-rate
spring.cloud.config.server.git.repos.{repoName}.refresh-rate
Fréquence à laquelle le serveur de configuration récupérera les données de configuration mises à jour depuis votre back-end Git.
spring.cloud.config.server.git.private-key
spring.cloud.config.server.git.repos.{repoName}.private-key
Clé privée SSH valide. Doit être défini si les paramètres ignore-local-ssh-ont la valeur true et que l’URI Git est au format SSH.
spring.cloud.config.server.git.host-key
spring.cloud.config.server.git.repos.{repoName}.host-key
Clé d’hôte SSH valide. Doit être défini si l’algorithme host-key-algorithm est également défini.
spring.cloud.config.server.git.host-key-algorithm
spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm
Une des options parmi ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 ou ecdsa-sha2-nistp521. Doit être défini si la clé hôte est également définie.
spring.cloud.config.server.git.strict-host-key-checking
spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking
true ou false. Si la valeur est false, ignorez les erreurs avec la clé hôte.
spring.cloud.config.server.git.repos.{repoName} URI du référentiel distant.
spring.cloud.config.server.git.repos.{repoName}.pattern Le format des modèles est une liste séparée par des virgules des noms {application}/{profile} avec des caractères génériques. Si {application}/{profile} ne correspond à aucun des modèles, l’URI par défaut défini dessous est utilisé.

Configurations courantes

  • Configurations relatives à la journalisation

    • logging.level.*
    • logging.group.*
    • Toutes les autres configurations sous l’espace de noms logging.* doivent être interdites, par exemple, l’écriture de fichiers journaux en utilisant logging.file doit être interdite.
  • spring.cloud.config.server.overrides

    • Carte supplémentaire pour qu’une source de propriété soit envoyée à tous les clients sans condition.
  • spring.cloud.config.override-none

    • Vous pouvez modifier la priorité de toutes les substitutions dans le client pour qu’elles soient plus proches des valeurs par défaut, ce qui permet aux applications de fournir leurs propres valeurs dans les variables d’environnement ou les propriétés système, en définissant l’indicateur spring.cloud.config.override-none=true (la valeur par défaut est false) dans le référentiel distant.
  • spring.cloud.config.allow-override

    • Si vous activez la configuration au premier démarrage, vous pouvez autoriser les applications clientes à remplacer la configuration du serveur de configuration en plaçant deux propriétés dans la configuration des applications provenant du serveur de configuration.
  • spring.cloud.config.server.health.

    • Vous pouvez configurer l’indicateur d’intégrité pour qu’il vérifie davantage d’applications, ainsi que de profils personnalisés et d’étiquettes personnalisées
  • spring.cloud.config.server.accept-empty

    • Vous pouvez définir spring.cloud.config.server.accept-empty sur false pour que le serveur retourne un état HTTP 404 , si l’application est introuvable. Par défaut, cet indicateur est défini sur true.
  • Chiffrement et déchiffrement (symétrique)

    • encrypt.key
      • Il est pratique d’utiliser une clé symétrique, car il s’agit d’une unique valeur de propriété à configurer.
    • spring.cloud.config.server.encrypt.enabled
      • Vous pouvez définir cette valeur sur false pour désactiver le déchiffrement côté serveur.

Refresh

Les services qui consomment des propriétés doivent connaître la modification avant qu’elle ne se produise. La méthode de notification par défaut pour Config Server pour Spring implique de déclencher manuellement l’évènement d’actualisation, comme l’actualisation par appel https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh, qui peut ne pas être réalisable s’il existe de nombreuses instances d’application.

À la place, vous pouvez actualiser automatiquement les valeurs de Config Server en laissant le client de configuration interroger les modifications en fonction d’une actualisation interne. Effectuez les étapes suivantes pour actualiser automatiquement les valeurs à partir de Config Server.

  1. Inscrivez une tâche planifiée pour actualiser le contexte dans un intervalle donné, comme illustré dans l’exemple suivant.

    @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. Activez autorefresh et définissez l’intervalle d’actualisation approprié dans le fichier application.yml. Dans l’exemple suivant, le client cherche une modification de configuration toutes les 60 secondes, ce qui correspond à la valeur minimale que vous pouvez définir pour un intervalle d’actualisation.

    Par défaut, autorefresh est défini sur false, et refresh-interval est défini sur 60 secondes.

    spring:
        cloud:
            config:
            auto-refresh: true
            refresh-interval: 60
    management:
        endpoints:
            web:
            exposure:
                include:
                - refresh
    
  3. Ajoutez @RefreshScope dans votre code. Dans l’exemple suivant, la variable connectTimeout est automatiquement actualisée toutes les 60 secondes.

    @RestController
    @RefreshScope
    public class HelloController {
        @Value("${timeout:4000}")
        private String connectTimeout;
    }
    

Chiffrement et déchiffrement avec une clé asymétrique

Déchiffrement côté serveur

Par défaut, le chiffrement côté serveur est activé. Procédez comme suit pour activer le déchiffrement dans votre application.

  1. Ajoutez la propriété chiffrée à votre fichier .properties dans votre référentiel Git.

    Par exemple, votre fichier doit ressembler à l’exemple suivant :

    message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
    
  2. Mettez à jour le composant Java Config Server pour Spring pour qu’il utilise le référentiel Git qui contient la propriété chiffrée et définissez la clé de chiffrement.

    Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés par <> par vos valeurs.

    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
    

Déchiffrement côté client

Vous pouvez utiliser le déchiffrement côté client des propriétés en procédant comme suit :

  1. Ajoutez la propriété chiffrée à votre fichier *.properties* dans votre référentiel Git.

  2. Mettez à jour le composant Java Config Server pour Spring pour qu’il utilise le référentiel Git qui contient la propriété chiffrée et désactivez le déchiffrement côté serveur.

    Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés par <> par vos valeurs.

    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. Dans votre application cliente, ajoutez la clé de déchiffrement ENCRYPT_KEY=randomKey comme une variable d’environnement.

    Sinon, si vous incluez spring-cloud-starter-bootstrap sur le classpath, ou définissez spring.cloud.bootstrap.enabled=true comme propriété système, définissez encrypt.key dans bootstrap.properties.

    Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés par <> par vos valeurs.

    az containerapp update \
      --name <APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
         --set-env-vars "ENCRYPT_KEY=randomKey"
    
    encrypt:
      key: somerandomkey
    

Étapes suivantes