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
surfalse
pour que le serveur retourne un état HTTP404
, si l’application est introuvable. Par défaut, cet indicateur est défini surtrue
.
- Vous pouvez définir
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.
- Vous pouvez définir cette valeur sur
- encrypt.key
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.
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)); } } }
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 surfalse
, etrefresh-interval
est défini sur 60 secondes.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refresh
Ajoutez
@RefreshScope
dans votre code. Dans l’exemple suivant, la variableconnectTimeout
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.
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
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 :
Ajoutez la propriété chiffrée à votre fichier
*.properties*
dans votre référentiel Git.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
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éfinissezspring.cloud.bootstrap.enabled=true
comme propriété système, définissezencrypt.key
dansbootstrap.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