Megosztás a következőn keresztül:


Csatlakozás felügyelt Config Server for Springhez az Azure Container Appsben

A Config Server for Spring központosított helyet biztosít a konfigurációs adatok több alkalmazás számára való elérhetővé tétele érdekében. Ebből a cikkből megtudhatja, hogyan csatlakoztathat egy Azure Container Appsben üzemeltetett alkalmazást egy Java Config Server for Spring-példányhoz.

A Config Server for Spring Java összetevő egy GitHub-adattárat használ a konfigurációs beállítások forrásaként. A konfigurációs értékek az összetevő és a tárolóalkalmazás közötti kötésen keresztül érhetők el a tárolóalkalmazás számára. Ahogy az értékek megváltoznak a konfigurációs kiszolgálón, azok automatikusan átfolynak az alkalmazásba anélkül, hogy újrafordítanák vagy újra üzembe helyezik az alkalmazást.

Eben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Config Server for Spring Java-összetevő létrehozása
  • A Config Server for Spring kötése a tárolóalkalmazáshoz
  • A konfigurációs értékek megfigyelése a konfigurációs kiszolgáló alkalmazáshoz való csatlakoztatása előtt és után
  • Konfigurációs értékek titkosítása és visszafejtése szimmetrikus kulccsal

Fontos

Ez az oktatóanyag olyan szolgáltatásokat használ, amelyek hatással lehetnek az Azure-számlájára. Ha lépésről lépésre halad, a váratlan számlázás elkerülése érdekében törölje a cikkben szereplő erőforrásokat.

Előfeltételek

Megfontolások

Amikor a Config Server for Springben fut az Azure Container Appsben, vegye figyelembe az alábbi részleteket:

Elem Magyarázat
Hatókör A Config Server for Spring ugyanabban a környezetben fut, mint a csatlakoztatott tárolóalkalmazás.
Méretezés Egyetlen igazságforrás fenntartása érdekében a Config Server for Spring nem méretezhető. A skálázási tulajdonságok minReplicas és maxReplicas mindkettő a következőre 1van állítva: .
Erőforrások A Config Server for Spring tárolóerőforrás-lefoglalása rögzített, a processzormagok száma 0,5, a memória mérete pedig 1Gi.
Árképzés A Config Server for Spring számlázása a fogyasztásalapú díjszabás alá tartozik. A felügyelt Java-összetevők által felhasznált erőforrások számlázása az aktív/tétlen díjszabás szerint van kiszámlázva. Törölheti azokat az összetevőket, amelyek már nincsenek használatban a számlázás leállításához.
Kötés A tárolóalkalmazás egy kötésen keresztül csatlakozik egy Config Server for Springhez. A kötés konfigurációkat injektál a tárolóalkalmazás környezeti változóiba. A kötés létrehozása után a tárolóalkalmazás beolvassa a környezeti változók konfigurációs értékeit.

Beállítás

Mielőtt megkezdené a Config Server for Spring használatát, először létre kell hoznia a szükséges erőforrásokat.

Hajtsa végre az alábbi parancsokat az erőforráscsoport és a Container Apps-környezet létrehozásához.

  1. Hozzon létre változókat az alkalmazáskonfiguráció támogatásához. Ezeket az értékeket a lecke céljaira biztosítjuk.

    export LOCATION=eastus
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export JAVA_COMPONENT_NAME=configserver
    export APP_NAME=my-config-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-config-client:latest"
    export URI="https://github.com/Azure-Samples/azure-spring-cloud-config-java-aca.git"
    
    Változó Leírás
    LOCATION Az Azure-régió helye, ahol a tárolóalkalmazást és a Java-összetevőt hozza létre.
    ENVIRONMENT A bemutató alkalmazás Azure Container Apps-környezetének neve.
    RESOURCE_GROUP A bemutató alkalmazás Azure-erőforráscsoportjának neve.
    JAVA_COMPONENT_NAME A tárolóalkalmazáshoz létrehozott Java-összetevő neve. Ebben az esetben létre kell hoznia egy Config Server for Spring Java-összetevőt.
    IMAGE A tárolóalkalmazásban használt tárolórendszerkép.
    URI Az URI-t lecserélheti a Git-adattár URL-címére, ha privát, adja hozzá a kapcsolódó hitelesítési konfigurációkat, például spring.cloud.config.server.git.username és spring.cloud.config.server.git.password.
  2. Jelentkezzen be az Azure-ba az Azure CLI-vel.

    az login
    
  3. Hozzon létre egy erőforráscsoportot.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Hozza létre a tárolóalkalmazás-környezetet.

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    

Ez a környezet a Config Server for Spring Java összetevő és a tárolóalkalmazás üzemeltetésére szolgál.

A Config Server for Spring Java összetevő létrehozása

Most, hogy már rendelkezik Container Apps-környezettel, létrehozhatja a tárolóalkalmazást, és egy Config Server for Spring Java-összetevőhöz kötheti. A tárolóalkalmazás kötésekor a konfigurációs értékek automatikusan szinkronizálódnak a Config Server összetevőből az alkalmazásba.

  1. Hozza létre a Config Server for Spring Java összetevőt.

    az containerapp env java-component config-server-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 1 \
        --max-replicas 1 \
        --configuration spring.cloud.config.server.git.uri=$URI
    
  2. Frissítse a Config Server for Spring Java összetevőt.

    az containerapp env java-component config-server-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 2 \
        --max-replicas 2 \
        --configuration spring.cloud.config.server.git.uri=$URI spring.cloud.config.server.git.refresh-rate=60
    

    Itt azt mondja meg az összetevőnek, hogy hol keresse meg azt az adattárat, amely a tulajdonságon keresztül tárolja a uri konfigurációs adatokat. A refresh-rate tulajdonság azt jelzi, hogy a Container Apps milyen gyakran ellenőrizze a Git-adattár módosításait.

A tárolóalkalmazás kötése a Config Server for Spring Java összetevőhöz

  1. Hozza létre a konfigurációs adatokat használó tárolóalkalmazást.

    az containerapp create \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --environment $ENVIRONMENT \
        --image $IMAGE \
        --min-replicas 1 \
        --max-replicas 1 \
        --ingress external \
        --target-port 8080 \
        --query properties.configuration.ingress.fqdn
    

    Ez a parancs a konfigurációs adatokat használó tárolóalkalmazás URL-címét adja vissza. Másolja az URL-címet egy szövegszerkesztőbe, hogy egy következő lépésben használhassa.

    Ha böngészőben látogatja meg az alkalmazást, a connectTimeout visszaadott érték az alapértelmezett érték.0

  2. Kötés a Config Server for Springhez.

    Most, hogy létrejött a tárolóalkalmazás és a Config Server, a parancsot update a tárolóalkalmazáshoz kell kötnie.

    az containerapp update \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --bind $JAVA_COMPONENT_NAME
    

    A --bind $JAVA_COMPONENT_NAME paraméter létrehozza a kapcsolatot a tárolóalkalmazás és a konfigurációs összetevő között.

Miután a tárolóalkalmazás és a Config Server összetevő össze van kötve, a konfigurációs módosítások automatikusan szinkronizálódnak a tárolóalkalmazással.

Amikor ismét megtekinti az alkalmazás URL-címét, az érték connectTimeout most már 10000az . Ez az érték az eredetileg a konfigurációs összetevő forrásaként beállított változóban $URI lévő Git-adattárból származik. Ez az érték az connectionTimeout adattár application.yml fájljában található tulajdonságból származik.

A kötési kérelem környezeti változóként injektálja a konfigurációs beállítást az alkalmazásba. Ezek az értékek mostantól elérhetők az alkalmazáskód számára a konfigurációs beállítások konfigurációs kiszolgálóról való lekéréséhez.

Ebben az esetben a következő környezeti változók érhetők el az alkalmazás számára:

SPRING_CLOUD_CONFIG_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CLOUD_CONFIG_COMPONENT_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CONFIG_IMPORT=optional:configserver:$SPRING_CLOUD_CONFIG_URI

Ha testre szeretné szabni a sajátját SPRING_CONFIG_IMPORT, hivatkozhat a környezeti változóra SPRING_CLOUD_CONFIG_COMPONENT_URI – például parancssori argumentumokkal felülbírálhatja azokat, például Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true.

A kötéseket az alkalmazásból is eltávolíthatja.

(Nem kötelező) A tárolóalkalmazás leválasztása a Config Server for Spring Java összetevőről

Ha el szeretne távolítani egy kötést egy tárolóalkalmazásból, használja a --unbind lehetőséget.

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

Amikor ismét felkeresi az alkalmazás URL-címét, a módosítások értéke connectTimeout vissza fog változni 0.

Az erőforrások eltávolítása

Az oktatóanyagban létrehozott erőforrások hatással vannak az Azure-számlára. Ha nem fogja hosszú távon használni ezeket a szolgáltatásokat, futtassa a következő parancsot az oktatóanyagban létrehozott összes eltávolításához.

az group delete --resource-group $RESOURCE_GROUP

Konfigurációs lehetőségek

A az containerapp update parancs a --configuration paraméterrel szabályozza a Config Server for Spring konfigurálását. Egyszerre több paramétert is használhat, ha szóköz választja el őket egymástól. További információ: Spring Cloud Config Server.

Az alábbi táblázat a különböző Elérhető Git-háttérkonfigurációs értékeket ismerteti:

Név Leírás
spring.cloud.config.server.git.uri
spring.cloud.config.server.git.repos.{repoName}.uri
A távoli adattár URI-ja.
spring.cloud.config.server.git.username
spring.cloud.config.server.git.repos.{repoName}.username
Felhasználónév távoli adattárral történő hitelesítéshez.
spring.cloud.config.server.git.password
spring.cloud.config.server.git.repos.{repoName}.password
A távoli adattárral való hitelesítés jelszava.
spring.cloud.config.server.git.search-paths
spring.cloud.config.server.git.repos.{repoName}.search-paths
A helyi munkapéldányban használandó keresési útvonalak. Alapértelmezés szerint csak a gyökérben keres.
spring.cloud.config.server.git.force-pull
spring.cloud.config.server.git.repos.{repoName}.force-pull
Jelző, amely jelzi, hogy az adattárnak kényszerítenie kell a lekérést. Ha true, elveti a helyi módosításokat, és a távoli adattárból veszi át.
spring.cloud.config.server.git.default-label
spring.cloud.config.server.git.repos.{repoName}.default-label
A Githez használt alapértelmezett címke a . Ha nem állítja be a beállítástspring.cloud.config.server.git.default-label, és a főág nevű ág nem létezik, a konfigurációs kiszolgáló alapértelmezés szerint egy főágat is megpróbál kivenni. Ha le szeretné tiltani a tartalék ág viselkedését, beállíthatja a következőt spring.cloud.config.server.git.tryMasterBranchfalse: .
spring.cloud.config.server.git.try-master-branch
spring.cloud.config.server.git.repos.{repoName}.try-master-branch
A konfigurációs kiszolgáló alapértelmezés szerint megpróbál kivételt tenni egy főág nevű ágból.
spring.cloud.config.server.git.skip-ssl-validation
spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation
Letilthatja a konfigurációs kiszolgálónak a Git-kiszolgáló TLS/SSL-tanúsítványának érvényesítését, ha a tulajdonságot a git.skipSslValidation következőre trueállítja.
spring.cloud.config.server.git.clone-on-start
spring.cloud.config.server.git.repos.{repoName}.clone-on-start
Jelző, amely azt jelzi, hogy az adattárat indításkor kell klónozni, nem igény szerint. Általában lassabb indításhoz, de gyorsabb első lekérdezéshez vezet.
spring.cloud.config.server.git.timeout
spring.cloud.config.server.git.repos.{repoName}.timeout
Http- vagy SSH-kapcsolat beszerzésének időtúllépése másodpercben, ha van ilyen. Az alapértelmezett érték 5 másodperc.
spring.cloud.config.server.git.refresh-rate
spring.cloud.config.server.git.repos.{repoName}.refresh-rate
Milyen gyakran olvassa be a konfigurációs kiszolgáló a frissített konfigurációs adatokat a Git-háttérrendszerből.
spring.cloud.config.server.git.private-key
spring.cloud.config.server.git.repos.{repoName}.private-key
Érvényes SSH titkos kulcs. Ha igen, true akkor be kell állítaniignore-local-ssh-settings, és a Git URI SSH formátumban van.
spring.cloud.config.server.git.host-key
spring.cloud.config.server.git.repos.{repoName}.host-key
Érvényes SSH-gazdagépkulcs. Ha a beállítás is be van állítva, be kell állítani host-key-algorithm .
spring.cloud.config.server.git.host-key-algorithm
spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm
Az egyik ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384vagy ecdsa-sha2-nistp521. Ha a beállítás is be van állítva, be kell állítani host-key .
spring.cloud.config.server.git.strict-host-key-checking
spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking
true vagy false. Ha false, hagyja figyelmen kívül a gazdagépkulcs hibáit.
spring.cloud.config.server.git.repos.{repoName} A távoli adattár URI-ja.
spring.cloud.config.server.git.repos.{repoName}.pattern A mintaformátum a helyettesítő karaktereket tartalmazó nevek vesszővel tagolt listája {application}/{profile} . Ha {application}/{profile} nem egyezik meg egyik mintával sem, akkor a megadott alapértelmezett URI-t használja.

Az alábbi lista a gyakori konfigurációkat ismerteti:

  • Naplózással kapcsolatos konfigurációk:

    • logging.level.*
    • logging.group.*
    • A névtérben lévő logging.* egyéb konfigurációknak tilosnak kell lenniük – például a naplófájlok írását a használatával logging.file tiltani kell.
  • spring.cloud.config.server.overrides

    • További térkép egy tulajdonságforráshoz, amelyet feltétel nélkül kell elküldeni az összes ügyfélnek.
  • spring.cloud.config.override-none

    • Az ügyfélben lévő összes felülbírálás prioritását az alapértelmezett értékekhez hasonlóan módosíthatja, így az alkalmazások saját értékeket adhatnak meg a környezeti változókban vagy a rendszertulajdonságokban, ha beállítják a spring.cloud.config.override-none=true jelölőt – az alapértelmezett érték hamis – a távoli adattárban.
  • spring.cloud.config.allow-override

    • Ha először engedélyezi a konfigurációs konfigurációt, engedélyezheti, hogy az ügyfélalkalmazások felülbírálják a konfigurációs kiszolgáló konfigurációját úgy, hogy két tulajdonságot helyeznek el a konfigurációs kiszolgálóról érkező alkalmazáskonfigurációban.
  • spring.cloud.config.server.health.*

    • Az állapotjelzőt úgy konfigurálhatja, hogy további alkalmazásokat ellenőrizzen egyéni profilokkal és egyéni címkékkel együtt.
  • spring.cloud.config.server.accept-empty

    • spring.cloud.config.server.accept-empty Beállíthatjafalse, hogy a kiszolgáló HTTP-állapotot 404 adjon vissza, ha az alkalmazás nem található. Ez a jelző alapértelmezés szerint a következőre truevan állítva: .
  • Titkosítás és visszafejtés (szimmetrikus):

    • encrypt.key
      • Szimmetrikus kulcs használata esetén kényelmes, mert egyetlen tulajdonságérték konfigurálható.
    • spring.cloud.config.server.encrypt.enabled
      • Állítsa be ezt a tulajdonságot a false kiszolgálóoldali visszafejtés letiltásához.

Frissítés

A tulajdonságokat használó szolgáltatásoknak tudniuk kell a módosításról, mielőtt ez bekövetkezik. A Config Server for Spring alapértelmezett értesítési módszere magában foglalja a frissítési esemény manuális aktiválását, például egy hívással https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refreshtörténő frissítést, ami sok alkalmazáspéldány esetén nem feltétlenül valósítható meg.

Ehelyett automatikusan frissítheti a konfigurációs kiszolgáló értékeit úgy, hogy a konfigurációs ügyfél belső frissítés alapján lekérdezi a módosításokat. Az alábbi lépésekkel automatikusan frissíthet értékeket a Config Serverről:

  1. Ütemezett feladat regisztrálása a környezet adott időközönkénti frissítéséhez, ahogyan az a következő példában is látható:

    @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. Engedélyezze autorefresh és állítsa be a megfelelő frissítési időközt a application.yml fájlban. Az alábbi példában az ügyfél 60 másodpercenként kérdez le egy konfigurációmódosítást, amely a frissítési időközhöz megadható minimális érték.

    Alapértelmezés szerint autorefresh 60 másodpercre van állítva falserefresh-interval .

    spring:
        cloud:
            config:
            auto-refresh: true
            refresh-interval: 60
    management:
        endpoints:
            web:
            exposure:
                include:
                - refresh
    
  3. Adja hozzá @RefreshScope a kódot. A következő példában a változó connectTimeout 60 másodpercenként automatikusan frissül:

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

Titkosítás és visszafejtés szimmetrikus kulccsal

Kiszolgálóoldali visszafejtés

Alapértelmezés szerint a kiszolgálóoldali titkosítás engedélyezve van. Az alábbi lépésekkel engedélyezheti a visszafejtést az alkalmazásban:

  1. Adja hozzá a titkosított tulajdonságot a Git-adattár .properties fájljában.

    A fájlnak az alábbi példához hasonlónak kell lennie:

    message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
    
  2. Frissítse a Config Server for Spring Java összetevőt a titkosított tulajdonságot tartalmazó Git-adattár használatára, és állítsa be a titkosítási kulcsot.

    A következő parancs futtatása előtt cserélje le az értékekkel körülvett <> helyőrzőket.

    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
    

Ügyféloldali visszafejtés

A tulajdonságok ügyféloldali visszafejtése a következő lépésekkel használható:

  1. Adja hozzá a titkosított tulajdonságot a Git-adattár .properties fájljában.

  2. Frissítse a Config Server for Spring Java összetevőt a titkosított tulajdonságot tartalmazó Git-adattár használatára, és tiltsa le a kiszolgálóoldali visszafejtést.

    A következő parancs futtatása előtt cserélje le az értékekkel körülvett <> helyőrzőket.

    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. Az ügyfélalkalmazásban adja hozzá a visszafejtési kulcsot ENCRYPT_KEY=randomKey környezeti változóként.

    Másik lehetőségként, ha spring-cloud-starter-bootstrap szerepel a beállításban, classpathvagy rendszertulajdonságként van beállítva bootstrap.propertiesspring.cloud.bootstrap.enabled=trueencrypt.key.

    A következő parancs futtatása előtt cserélje le az értékekkel körülvett <> helyőrzőket.

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