Configuration Server
Configuration centralisée
10-15 min
Configuration Server avec Spring Cloud Config
Dans ce tutoriel, nous allons explorer la mise en place d’un serveur de configuration centralisé avec Spring Cloud Config. Nous verrons comment gérer les configurations de manière centralisée et sécurisée.
Configuration du serveur
Dépendances
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Configuration de base
server:
port: 8888
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/your-org/config-repo
default-label: main
search-paths:
- config/*/default
- config/*/prod
clone-on-start: true
Classe principale
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
Configuration des clients
Dépendances
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Configuration des clients
spring:
application:
name: product-service
cloud:
config:
uri: http://localhost:8888
fail-fast: true
retry:
max-attempts: 6
initial-interval: 1000
multiplier: 1.1
max-interval: 2000
Gestion des profils
Structure des fichiers
config-repo/
├── product-service/
│ ├── default/
│ │ └── application.yml
│ ├── dev/
│ │ └── application.yml
│ └── prod/
│ └── application.yml
└── order-service/
├── default/
│ └── application.yml
├── dev/
│ └── application.yml
└── prod/
└── application.yml
Configuration par profil
# application.yml (default)
spring:
datasource:
url: jdbc:h2:mem:testdb
username: sa
password:
# application-dev.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/devdb
username: devuser
password: devpass
# application-prod.yml
spring:
datasource:
url: jdbc:mysql://prod-server:3306/proddb
username: produser
password: ${DB_PASSWORD}
Sécurité
Configuration du serveur
spring:
security:
user:
name: ${CONFIG_SERVER_USERNAME:admin}
password: ${CONFIG_SERVER_PASSWORD:secret}
Configuration des clients
spring:
cloud:
config:
username: ${CONFIG_SERVER_USERNAME:admin}
password: ${CONFIG_SERVER_PASSWORD:secret}
Configuration de la sécurité
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/actuator/**").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
Encryption et Décryption
Configuration du serveur
encrypt:
key-store:
location: classpath:keystore.jks
secret: ${KEYSTORE_SECRET}
Utilisation
# application.yml
spring:
datasource:
password: ENC(encrypted-password)
Commandes de chiffrement
# Chiffrement
curl -X POST "http://localhost:8888/encrypt" -d "secret-password"
# Déchiffrement
curl -X POST "http://localhost:8888/decrypt" -d "encrypted-password"
Monitoring et Métriques
Configuration Actuator
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
endpoint:
health:
show-details: always
Métriques personnalisées
@Component
public class ConfigMetrics {
private final MeterRegistry registry;
public ConfigMetrics(MeterRegistry registry) {
this.registry = registry;
}
public void recordConfigRefresh(String application, String profile) {
registry.counter("config.refresh",
"application", application,
"profile", profile)
.increment();
}
}
Refresh et Reload
Configuration du client
management:
endpoints:
web:
exposure:
include: refresh,health,info
Endpoint de refresh
@RestController
@RequestMapping("/actuator")
public class RefreshController {
@PostMapping("/refresh")
public ResponseEntity<String> refresh() {
// Logique de refresh
return ResponseEntity.ok("Configuration refreshed");
}
}
Configuration du bus
spring:
cloud:
bus:
enabled: true
destination: config-bus
Exercices pratiques
-
Configuration multi-environnements
- Créez des configurations pour dev, test et prod
- Configurez les variables sensibles
- Testez le chargement des configurations
-
Sécurité et chiffrement
- Configurez l’authentification
- Chiffrez les données sensibles
- Testez la sécurité
-
Monitoring et refresh
- Configurez les métriques
- Testez le refresh des configurations
- Mettez en place des alertes
Conclusion
Dans ce tutoriel, nous avons exploré :
- La configuration du serveur Config
- La configuration des clients
- La gestion des profils
- La sécurité
- Le chiffrement
- Le monitoring
- Le refresh des configurations
Spring Cloud Config permet :
- La centralisation des configurations
- La gestion des environnements
- La sécurité des données sensibles
- Le monitoring des changements
- La mise à jour dynamique
Dans le prochain tutoriel, nous explorerons l’API Gateway avec Spring Cloud Gateway.
Commentaires
Les commentaires sont alimentés par GitHub Discussions
Connectez-vous avec GitHub pour participer à la discussion