Konfigurace nastavení pro komponentu Konfigurační server for Spring v Azure Container Apps (Preview)

Konfigurační server for Spring poskytuje centralizované umístění pro zpřístupnění konfiguračních dat více aplikacím. V následujících doprovodných materiálech se dozvíte, jak nakonfigurovat a spravovat komponentu Config Server for Spring.

Zobrazit

Podrobnosti o jednotlivých komponentách můžete zobrazit pomocí show příkazu.

Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <> hodnotami.

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

List

Pomocí příkazu můžete zobrazit seznam všech registrovaných komponent list Javy.

Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <> hodnotami.

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

Bind

--bind Pomocí parametru update příkazu vytvořte připojení mezi komponentou Config Server for Spring a vaší aplikací kontejneru.

Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <> hodnotami.

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

Zrušit vazbu

Pokud chcete přerušit připojení mezi vaší aplikací kontejneru a komponentou Config Server for Spring, použijte --unbind parametr update příkazu.

Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <> hodnotami.

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

Možnosti konfigurace

Příkaz az containerapp update používá --configuration parametr k řízení konfigurace konfiguračního serveru pro Spring. Můžete použít více parametrů najednou, pokud jsou oddělené mezerou. Další podrobnosti najdete v dokumentaci k Spring Cloud Config Serveru .

Následující tabulka uvádí různé dostupné konfigurační hodnoty.

Konfigurace back-endu Gitu

Název Popis
spring.cloud.config.server.git.uri
spring.cloud.config.server.git.repos.{repoName}.uri
Identifikátor URI vzdáleného úložiště
spring.cloud.config.server.git.username
spring.cloud.config.server.git.repos.{repoName}.username
Uživatelské jméno pro ověřování pomocí vzdáleného úložiště
spring.cloud.config.server.git.password
spring.cloud.config.server.git.repos.{repoName}.password
Heslo pro ověřování pomocí vzdáleného úložiště
spring.cloud.config.server.git.search-paths
spring.cloud.config.server.git.repos.{repoName}.search-paths
Cesty hledání, které se mají použít v místní pracovní kopii. Ve výchozím nastavení prohledá pouze kořen.
spring.cloud.config.server.git.force-pull
spring.cloud.config.server.git.repos.{repoName}.force-pull
Příznak označující, že úložiště by mělo vynutit přijetí změn. Pokud true zahodí všechny místní změny a převezme je ze vzdáleného úložiště.
spring.cloud.config.server.git.default-label
spring.cloud.config.server.git.repos.{repoName}.default-label
Výchozí popisek použitý pro Git je hlavní. Pokud nenastavíte spring.cloud.config.server.git.default-label a větev s názvem main neexistuje, konfigurační server se ve výchozím nastavení také pokusí rezervovat větev s názvem master. Pokud chcete zakázat chování náhradní větve, můžete nastavit spring.cloud.config.server.git.tryMasterBranch na false.
spring.cloud.config.server.git.try-master-branch
spring.cloud.config.server.git.repos.{repoName}.try-master-branch
Konfigurační server se ve výchozím nastavení pokusí rezervovat větev s názvem master.
spring.cloud.config.server.git.skip-ssl-validation
spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation
Ověření certifikátu SSL serveru Git konfiguračního serveru je možné zakázat nastavením vlastnosti git.skipSslValidation na true.
spring.cloud.config.server.git.clone-on-start
spring.cloud.config.server.git.repos.{repoName}.clone-on-start
Příznak označující, že úložiště by se mělo naklonovat při spuštění (ne na vyžádání). Obecně vede k pomalejšímu spuštění, ale rychlejšímu prvnímu dotazu.
spring.cloud.config.server.git.timeout
spring.cloud.config.server.git.repos.{repoName}.timeout
Časový limit (v sekundách) pro získání připojení HTTP nebo SSH (pokud je k dispozici) Výchozí 5 sekund.
spring.cloud.config.server.git.refresh-rate
spring.cloud.config.server.git.repos.{repoName}.refresh-rate
Jak často konfigurační server načte aktualizovaná konfigurační data z back-endu Gitu.
spring.cloud.config.server.git.private-key
spring.cloud.config.server.git.repos.{repoName}.private-key
Platný privátní klíč SSH. Musí být nastaveno, pokud je hodnota ignore-local-ssh-settings true a identifikátor URI Gitu je formát SSH.
spring.cloud.config.server.git.host-key
spring.cloud.config.server.git.repos.{repoName}.host-key
Platný klíč hostitele SSH. Musí být nastavena, pokud je nastaven také algoritmus klíče hostitele.
spring.cloud.config.server.git.host-key-algorithm
spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm
Jeden z ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 nebo ecdsa-sha2-nistp521. Pokud je nastavený také klíč hostitele, musí být nastavená.
spring.cloud.config.server.git.strict-host-key-checking
spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking
true nebo false. Pokud je false, ignorujte chyby s klíčem hostitele.
spring.cloud.config.server.git.repos.{repoName} Identifikátor URI vzdáleného úložiště
spring.cloud.config.server.git.repos.{repoName}.pattern Formát vzoru je čárkami oddělený seznam názvů {application}/{profile} se zástupnými cardy. Pokud {application}/{profile} neodpovídá žádnému ze vzorů, použije výchozí identifikátor URI definovaný v části.

Běžné konfigurace

  • protokolování souvisejících konfigurací

    • logging.level.*
    • logging.group.*
    • Všechny ostatní konfigurace v rámci protokolování.* Obor názvů by měl být zakázán, například zápis souborů protokolu pomocí logging.file by měl být zakázáno.
  • spring.cloud.config.server.overrides

    • Dodatečná mapa zdroje vlastností, která se má odeslat všem klientům bezpodmínečně.
  • spring.cloud.config.override-none

    • Prioritu všech přepsání v klientovi můžete změnit tak, aby vypadala podobně jako výchozí hodnoty, a umožnit tak aplikacím zadat vlastní hodnoty v proměnných prostředí nebo v systémových vlastnostech, a to nastavením příznaku spring.cloud.config.override-none=true (výchozí hodnota je false) ve vzdáleném úložišti.
  • spring.cloud.config.allow-override

    • Pokud povolíte konfiguraci při prvním spuštění, můžete klientským aplikacím povolit přepsání konfigurace z konfiguračního serveru umístěním dvou vlastností do konfigurace aplikací pocházejících z konfiguračního serveru.
  • spring.cloud.config.server.health.

    • Indikátor stavu můžete nakonfigurovat tak, aby kontrolovali více aplikací spolu s vlastními profily a vlastními popisky.
  • spring.cloud.config.server.accept-empty

    • Můžete nastavit spring.cloud.config.server.accept-empty tak false , aby server vrátil stav HTTP 404 , pokud aplikace nebyla nalezena. Ve výchozím nastavení je tento příznak nastaven na true.
  • Šifrování a dešifrování (symetrické)

    • encrypt.key
      • Je vhodné použít symetrický klíč, protože se jedná o jednu hodnotu vlastnosti ke konfiguraci.
    • spring.cloud.config.server.encrypt.enabled
      • Můžete ho nastavit tak, aby falsese dešifrování na straně serveru zakázalo.

Aktualizovat

Služby, které spotřebovávají vlastnosti, musí znát změnu, než k ní dojde. Výchozí metoda oznámení pro Config Server for Spring zahrnuje ruční aktivaci události aktualizace, jako je například aktualizace voláním https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh, což nemusí být možné, pokud existuje mnoho instancí aplikace.

Místo toho můžete hodnoty z konfiguračního serveru automaticky aktualizovat tak, že necháte klienta konfigurace dotazovat změny na základě interní aktualizace. Pomocí následujícího postupu můžete automaticky aktualizovat hodnoty z konfiguračního serveru.

  1. Zaregistrujte naplánovanou úlohu pro aktualizaci kontextu v daném intervalu, jak je znázorněno v následujícím příkladu.

    @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. Povolte autorefresh a nastavte odpovídající interval aktualizace v souboru application.yml . V následujícím příkladu se klient dotazuje na změnu konfigurace každých 60 sekund, což je minimální hodnota, kterou můžete nastavit pro interval aktualizace.

    Ve výchozím nastavení autorefresh je nastavená hodnota falsea refresh-interval je nastavená na 60 sekund.

    spring:
        cloud:
            config:
            auto-refresh: true
            refresh-interval: 60
    management:
        endpoints:
            web:
            exposure:
                include:
                - refresh
    
  3. Přidejte @RefreshScope kód. V následujícím příkladu se proměnná connectTimeout automaticky aktualizuje každých 60 sekund.

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

Šifrování a dešifrování pomocí symetrického klíče

Dešifrování na straně serveru

Ve výchozím nastavení je povolené šifrování na straně serveru. Pomocí následujícího postupu povolte dešifrování ve vaší aplikaci.

  1. Přidejte zašifrovanou vlastnost do souboru .properties v úložišti Git.

    Například soubor by měl vypadat podobně jako v následujícím příkladu:

    message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
    
  2. Aktualizujte komponentu Konfigurační server pro Spring Java tak, aby používalo úložiště Git, které má šifrovanou vlastnost a nastavil šifrovací klíč.

    Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <> hodnotami.

    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
    

Dešifrování na straně klienta

Dešifrování vlastností na straně klienta můžete použít pomocí následujících kroků:

  1. Přidejte zašifrovanou vlastnost do souboru v *.properties* úložišti Git.

  2. Aktualizujte komponentu Konfigurační server pro Spring Java tak, aby používala úložiště Git, které má šifrovanou vlastnost, a zakažte dešifrování na straně serveru.

    Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <> hodnotami.

    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. V klientské aplikaci přidejte dešifrovací klíč ENCRYPT_KEY=randomKey jako proměnnou prostředí.

    Alternativně pokud zahrnete spring-cloud-starter-bootstrap do classpath, nebo nastavit spring.cloud.bootstrap.enabled=true jako systémovou vlastnost, nastavená encrypt.key v bootstrap.properties.

    Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <> hodnotami.

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

Další kroky