Konfigurieren von Einstellungen für die Config Server für Spring-Komponente in Azure-Container-Apps (Vorschau)

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 auf false festlegen, sodass der Server den HTTP-Status 404 zurückgibt, wenn die Anwendung nicht gefunden wird. Standardmäßig ist dieses Flag auf true festgelegt.
  • 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.

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.

  1. 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));
            }
        }
    }
    
  2. 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 auf false festgelegt und refresh-interval wird auf 60 Sekunden festgelegt.

    spring:
        cloud:
            config:
            auto-refresh: true
            refresh-interval: 60
    management:
        endpoints:
            web:
            exposure:
                include:
                - refresh
    
  3. Fügen Sie Ihrem Code @RefreshScope hinzu. Im folgenden Beispiel wird die Variable connectTimeout 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.

  1. 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
    
  2. 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:

  1. Fügen Sie die verschlüsselte Eigenschaft in Ihrer *.properties*-Datei in Ihrem Git-Repository hinzu.

  2. 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
    
  3. 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 oder spring.cloud.bootstrap.enabled=true als Systemeigenschaft festlegen, legen Sie encrypt.key in bootstrap.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
    

Nächste Schritte