Konfigurieren von Einstellungen für die Config Server für Spring-Komponente in Azure-Container-Apps
Config Server für Spring bietet einen zentralen Speicherort, um Konfigurationsdaten für mehrere Anwendungen verfügbar zu machen. Verwenden Sie die folgenden Anleitungen, um zu erfahren, wie Sie Ihre Config Server für Spring-Komponente konfigurieren und verwalten.
Anzeigen
Sie können die Details einer einzelnen Komponente mithilfe des Befehls show
anzeigen.
Bevor Sie den folgenden Befehl ausführen, ersetzen Sie Platzhalter, die mit <>
umgeben sind, mit Ihren Werten.
az containerapp env java-component config-server-for-spring show \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP> \
--name <JAVA_COMPONENT_NAME>
Liste
Sie können alle registrierten Java-Komponenten mithilfe des Befehls list
auflisten.
Bevor Sie den folgenden Befehl ausführen, ersetzen Sie von <>
umgebene Platzhalter mit Ihren Werten.
az containerapp env java-component list \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP>
Bind
Verwenden Sie den --bind
-Parameter des update
-Befehls, um eine Verbindung zwischen der Config Server für Spring-Komponente und Ihrer Container-App zu erstellen.
Bevor Sie den folgenden Befehl ausführen, ersetzen Sie Platzhalter, die mit <>
umgeben sind, mit Ihren Werten.
az containerapp update \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--bind <JAVA_COMPONENT_NAME>
Aufheben der Bindung
Verwenden Sie den --unbind
-Parameter des update
-Befehls, um die Verbindung zwischen Ihrer Container-App und der Config Server für Spring-Komponente aufzubrechen.
Bevor Sie den folgenden Befehl ausführen, ersetzen Sie von <>
umgebene Platzhalter mit Ihren Werten.
az containerapp update \
--name <CONTAINER_APP_NAME> \
--unbind <JAVA_COMPONENT_NAME> \
--resource-group <RESOURCE_GROUP>
Konfigurationsoptionen
Der az containerapp update
-Befehl verwendet den --configuration
-Parameter, um zu steuern, wie der Config Server für Spring konfiguriert ist. Sie können mehrere Parameter gleichzeitig verwenden, solange sie durch ein Leerzeichen getrennt sind. Weitere Details finden Sie in den Spring Cloud Config Server-Dokumenten.
In der folgenden Tabelle sind die verschiedenen verfügbaren Konfigurationswerte aufgeführt.
Git-Back-End-Konfigurationen
Name | Beschreibung |
---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
URI des Remote-Repositorys. |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
Benutzername für die Authentifizierung beim Remote-Repository. |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
Kennwort für die Authentifizierung beim Remote-Repository. |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
Suchpfade, die in lokalen Arbeitskopien verwendet werden sollen. Standardmäßig wird nur der Stamm durchsucht. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
Flag, die angibt, dass das Repository den Pull erzwingen soll. Bei „true“ werden alle lokalen Änderungen verworfen und Werte aus dem Remoterepository übernommen. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
Die für Git verwendete Standardbezeichnung ist „main“. Wenn Sie „spring.cloud.config.server.git.default-label“ nicht festlegen und kein Branch mit dem Namen „main“ vorhanden ist, versucht der Konfigurationsserver standardmäßig auch, einen Branch mit dem Namen „master“ auszuchecken. Wenn Sie das Fallbackbranch-Verhalten deaktivieren möchten, können Sie „spring.cloud.config.server.git.tryMasterBranch“ auf „false“ festlegen. |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
Der Konfigurationsserver versucht standardmäßig, einen Branch namens „master“ auzuschecken. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
Die Überprüfung des SSL-Zertifikats des Git-Servers durch den Konfigurationsserver kann durch Festlegen der Eigenschaft „git.skipSslValidation“ auf „true“ deaktiviert werden. |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
Flag, um anzugeben, dass das Repository beim Start geklont werden soll (nicht bei Bedarf). Führt im Allgemeinen zu einem langsameren Start, aber einer schnelleren ersten Abfrage. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
Timeout (in Sekunden) zum Abrufen einer HTTP- oder SSH-Verbindung (falls zutreffend). Standardwert: 5 Sekunden. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Wie oft der Konfigurationsserver aktualisierte Konfigurationsdaten aus Ihrem Git-Back-End abruft |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
Gültiger privater SSH-Schlüssel. Muss festgelegt werden, wenn „ignore-local-ssh-settings“ auf „true“ festgelegt ist und der Git-URI im SSH-Format vorliegt. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
Gültiger SSH-Hostschlüssel. Muss festgelegt werden, wenn auch „host-key-algorithm“ festgelegt ist. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 oder ecdsa-sha2-nistp521. Muss festgelegt werden, wenn auch „host-key“ festgelegt ist. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
True oder False. Bei „false“ werden Fehler bei Hostschlüsseln ignoriert. |
spring.cloud.config.server.git.repos.{repoName} |
URI des Remote-Repositorys. |
spring.cloud.config.server.git.repos.{repoName}.pattern |
Das Musterformat ist eine durch Trennzeichen getrennte Liste von {application}/{profile}-Namen mit Wildcards. Wenn {application}/{profile} keinem der Muster entspricht, wird der definierte Standard-URI verwendet. |
Häufig verwendete Konfigurationen
auf Protokollierung bezogene Konfigurationen
- logging.level.*
- logging.group.*
- Alle anderen Konfigurationen unter logging.*-Namespace sollten verboten sein, z. B. das Schreiben von Protokolldateien mithilfe der Verwendung von
logging.file
.
spring.cloud.config.server.overrides
- Zusätzliche Zuordnung für eine Eigenschaftsquelle, die bedingungslos an alle Clients gesendet werden soll.
spring.cloud.config.override-none
- Sie können die Priorität aller Außerkraftsetzungen im Client so ändern, dass sie mehr wie Standardwerte sind, sodass Anwendungen ihre eigenen Werte in Umgebungsvariablen oder Systemeigenschaften bereitstellen können, indem Sie im Remoterepository das „spring.cloud.config.override-none=true“-Flag festlegen (der Standardwert ist „false“).
spring.cloud.config.allow-override
- Wenn Sie die Konfiguration für den ersten Bootstrap aktivieren, können Sie zulassen, dass Clientanwendungen die Konfiguration vom Konfigurationsserver außer Kraft setzen, indem Sie zwei Eigenschaften in der vom Konfigurationsserver bereitgestellten Anwendungskonfiguration platzieren.
spring.cloud.config.server.health.
- Sie können den Integritätsindikator so konfigurieren, dass weitere Anwendungen zusammen mit benutzerdefinierten Profilen und benutzerdefinierten Bezeichnungen überprüft werden
spring.cloud.config.server.accept-empty
- Sie können
spring.cloud.config.server.accept-empty
auffalse
festlegen, sodass der Server den HTTP-Status404
zurückgibt, wenn die Anwendung nicht gefunden wird. Standardmäßig ist dieses Flag auftrue
festgelegt.
- Sie können
Verschlüsselung und Entschlüsselung (symmetrisch)
- encrypt.key
- Es ist praktisch, einen symmetrischen Schlüssel zu verwenden, da es sich um einen einzelnen zu konfigurierenden Eigenschaftswert handelt.
- spring.cloud.config.server.encrypt.enabled
- Sie können dies auf
false
festlegen, um die serverseitige Entschlüsselung zu deaktivieren.
- Sie können dies auf
- encrypt.key
Refresh
Dienste, die Eigenschaften nutzen, müssen vor dem Eintreten über die Änderung informiert werden. Die Standardbenachrichtigungsmethode für Config Server für Spring umfasst das manuelle Auslösen des Aktualisierungsereignisses, z. B. „Aktualisierung durch Aufruf von https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh
“, was möglicherweise nicht möglich ist, wenn viele App-Instanzen vorhanden sind.
Stattdessen können Sie Werte von Config Server automatisch aktualisieren, indem Sie Änderungen in einem Aktualisierungsintervall vom Konfigurationsclient abfragen lassen. Verwenden Sie die folgenden Schritte, um Werte von Config Server automatisch zu aktualisieren.
Registrieren Sie eine geplante Aufgabe, um den Kontext in einem bestimmten Intervall zu aktualisieren, wie im folgenden Beispiel gezeigt.
@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)); } } }
Aktivieren Sie
autorefresh
und legen Sie das entsprechende Aktualisierungsintervall in der application.yml-Datei fest. Im folgenden Beispiel fragt der Client alle 60 Sekunden eine Konfigurationsänderung ab. Dies ist der Mindestwert, den Sie für ein Aktualisierungsintervall festlegen können.Standardmäßig ist
autorefresh
auffalse
festgelegt undrefresh-interval
wird auf 60 Sekunden festgelegt.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refresh
Fügen Sie Ihrem Code
@RefreshScope
hinzu. Im folgenden Beispiel wird die VariableconnectTimeout
automatisch alle 60 Sekunden aktualisiert.@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
Verschlüsselung und Entschlüsselung mit einem symmetrischen Schlüssel
Serverseitige Entschlüsselung
Standardmäßig ist die serverseitige Verschlüsselung aktiviert. Führen Sie die folgenden Schritte aus, um die Entschlüsselung in Ihrer Anwendung zu aktivieren.
Fügen Sie die verschlüsselte Eigenschaft in Ihrer .properties-Datei in Ihrem Git-Repository hinzu.
Ihre Datei sollte dem folgenden Beispiel ähneln:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
Aktualisieren Sie die Java-Komponente Config Server für Spring, um das Git-Repository zu verwenden, das die verschlüsselte Eigenschaft aufweist, und legen Sie den Verschlüsselungsschlüssel fest.
Bevor Sie den folgenden Befehl ausführen, ersetzen Sie von
<>
umgebene Platzhalter mit Ihren Werten.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
Clientseitige Entschlüsselung
Sie können die clientseitige Entschlüsselung von Eigenschaften verwenden, indem Sie die folgenden Schritte durchführen:
Fügen Sie die verschlüsselte Eigenschaft in Ihrer
*.properties*
-Datei in Ihrem Git-Repository hinzu.Aktualisieren Sie die Java-Komponente Config Server für Spring, um das Git-Repository zu verwenden, das die verschlüsselte Eigenschaft aufweist, und deaktivieren Sie die serverseitige Entschlüsselung.
Bevor Sie den folgenden Befehl ausführen, ersetzen Sie von
<>
umgebene Platzhalter mit Ihren Werten.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
Fügen Sie in Ihrer Client-App den Entschlüsselungsschlüssel
ENCRYPT_KEY=randomKey
als Umgebungsvariable hinzu.Wenn Sie alternativ spring-cloud-starter-bootstrap in das
classpath
einschließen oderspring.cloud.bootstrap.enabled=true
als Systemeigenschaft festlegen, legen Sieencrypt.key
inbootstrap.properties
fest.Bevor Sie den folgenden Befehl ausführen, ersetzen Sie von
<>
umgebene Platzhalter mit Ihren Werten.az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"
encrypt: key: somerandomkey