Zelfstudie: Verbinding maken met een beheerde configuratieserver voor Spring in Azure Container Apps
Config Server voor Spring biedt een gecentraliseerde locatie om configuratiegegevens beschikbaar te maken voor meerdere toepassingen. In dit artikel leert u hoe u een app die wordt gehost in Azure Container Apps verbindt met een Java Config Server voor Spring-exemplaar.
Voor het onderdeel Config Server voor Spring Java wordt een GitHub-opslagplaats gebruikt als bron voor configuratie-instellingen. Configuratiewaarden worden beschikbaar gemaakt voor uw container-app via een binding tussen het onderdeel en uw container-app. Naarmate de waarden in de configuratieserver veranderen, stromen ze automatisch naar uw toepassing, allemaal zonder dat u uw toepassing opnieuw hoeft te compileren of opnieuw te implementeren.
In deze zelfstudie leert u het volgende:
- Een configuratieserver voor Spring Java-onderdeel maken
- De configuratieserver voor Spring binden aan uw container-app
- Bekijk configuratiewaarden voor en na het verbinden van de configuratieserver met uw toepassing
- Configuratiewaarden versleutelen en ontsleutelen met een symmetrische sleutel
Belangrijk
In deze zelfstudie worden services gebruikt die van invloed kunnen zijn op uw Azure-factuur. Als u besluit stapsgewijs te volgen, moet u ervoor zorgen dat u de resources verwijdert die in dit artikel worden weergegeven om onverwachte facturering te voorkomen.
Vereisten
- Een Azure-account met een actief abonnement. Als u er nog geen hebt, kunt u er gratis een maken.
- Azure CLI.
Overwegingen
Houd rekening met de volgende details bij uitvoering in Config Server for Spring in Azure Container Apps:
Artikel | Uitleg |
---|---|
Scope | De configuratieserver voor Spring wordt uitgevoerd in dezelfde omgeving als de verbonden container-app. |
Schalen | Om één bron van waarheid te behouden, wordt de Config Server voor Spring niet geschaald. De schaaleigenschappen minReplicas en maxReplicas beide zijn ingesteld op 1 . |
Bronnen | De toewijzing van containerresources voor Config Server voor Spring is opgelost, het aantal CPU-kernen is 0,5 en de geheugengrootte is 1Gi. |
Prijzen | De configuratieserver voor Spring-facturering valt onder de prijzen op basis van verbruik. Resources die door beheerde Java-onderdelen worden verbruikt, worden gefactureerd tegen de actieve/niet-actieve tarieven. U kunt onderdelen verwijderen die niet meer worden gebruikt om de facturering te stoppen. |
Bindend | De container-app maakt via een binding verbinding met een configuratieserver voor Spring. De binding injecteert configuraties in omgevingsvariabelen voor container-apps. Nadat een binding tot stand is gebracht, kan de container-app configuratiewaarden lezen uit omgevingsvariabelen. |
Instellingen
Voordat u met de configuratieserver voor Spring gaat werken, moet u eerst de vereiste resources maken.
Voer de volgende opdrachten uit om uw resourcegroep en Container Apps-omgeving te maken.
Maak variabelen ter ondersteuning van uw toepassingsconfiguratie. Deze waarden worden voor u verstrekt voor de doeleinden van deze les.
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"
Variabele Beschrijving LOCATION
De Azure-regiolocatie waar u uw container-app en Java-onderdeel maakt. ENVIRONMENT
De naam van de Azure Container Apps-omgeving voor uw demotoepassing. RESOURCE_GROUP
De naam van de Azure-resourcegroep voor uw demotoepassing. JAVA_COMPONENT_NAME
De naam van het Java-onderdeel dat is gemaakt voor uw container-app. In dit geval maakt u een Config Server voor Spring Java-onderdeel. IMAGE
De containerinstallatiekopieën die in uw container-app worden gebruikt. URI
U kunt de URI vervangen door de URL van uw Git-opslagplaats. Als deze privé is, voegt u de bijbehorende verificatieconfiguraties toe, zoals spring.cloud.config.server.git.username
enspring.cloud.config.server.git.password
.Meld u aan bij Azure met de Azure CLI.
az login
Maak een resourcegroep.
az group create --name $RESOURCE_GROUP --location $LOCATION
Maak uw container-apps-omgeving.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Deze omgeving wordt gebruikt voor het hosten van zowel de configuratieserver voor het Spring Java-onderdeel als uw container-app.
Het onderdeel Config Server voor Spring Java maken
Nu u een Container Apps-omgeving hebt, kunt u uw container-app maken en deze binden aan een Config Server voor Spring Java-onderdeel. Wanneer u uw container-app koppelt, worden configuratiewaarden automatisch gesynchroniseerd vanuit het onderdeel Configuratieserver met uw toepassing.
Maak de configuratieserver voor het Spring Java-onderdeel.
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
Werk de configuratieserver voor het Spring Java-onderdeel bij.
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
Hier vertelt u het onderdeel waar u de opslagplaats kunt vinden die uw configuratiegegevens bevat via de
uri
eigenschap. Derefresh-rate
eigenschap vertelt Container Apps hoe vaak moet worden gecontroleerd op wijzigingen in uw Git-opslagplaats.
Uw container-app verbinden met het onderdeel Config Server voor Spring Java
Maak de container-app die configuratiegegevens verbruikt.
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
Met deze opdracht wordt de URL geretourneerd van uw container-app die configuratiegegevens verbruikt. Kopieer de URL naar een teksteditor, zodat u deze in een volgende stap kunt gebruiken.
Als u uw app in een browser bezoekt, is de
connectTimeout
geretourneerde waarde de standaardwaarde van0
.Binden aan de configuratieserver voor Spring.
Nu de container-app en de configuratieserver zijn gemaakt, verbindt u deze met de
update
opdracht aan uw container-app.az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $JAVA_COMPONENT_NAME
De
--bind $JAVA_COMPONENT_NAME
parameter maakt de koppeling tussen uw container-app en het configuratieonderdeel.
Nadat de container-app en het onderdeel Config Server zijn gekoppeld, worden configuratiewijzigingen automatisch gesynchroniseerd met de container-app.
Wanneer u de URL van de app opnieuw bezoekt, is de waarde connectTimeout
nu 10000
. Deze waarde is afkomstig van de Git-opslagplaats die is ingesteld in de $URI
variabele die oorspronkelijk is ingesteld als de bron van het configuratieonderdeel. Deze waarde wordt met name opgehaald uit de connectionTimeout
eigenschap in het application.yml-bestand van de opslagplaats.
De bindingsaanvraag injecteert de configuratie-instelling in de toepassing als omgevingsvariabelen. Deze waarden zijn nu beschikbaar voor de toepassingscode die moet worden gebruikt bij het ophalen van configuratie-instellingen van de configuratieserver.
In dit geval zijn de volgende omgevingsvariabelen beschikbaar voor de toepassing:
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
Als u uw eigen SPRING_CONFIG_IMPORT
variabele wilt aanpassen, kunt u verwijzen naar de omgevingsvariabele SPRING_CLOUD_CONFIG_COMPONENT_URI
, bijvoorbeeld door opdrachtregelargumenten te overschrijven, zoals Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true
.
U kunt ook een binding uit uw toepassing verwijderen.
(Optioneel) De container-app ontkoppeld van het onderdeel Config Server voor Spring Java
Als u een binding uit een container-app wilt verwijderen, gebruikt u de --unbind
optie.
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Wanneer u de URL van de app opnieuw bezoekt, wordt de waarde van connectTimeout
wijzigingen teruggezet naar 0
.
Resources opschonen
De resources die in deze zelfstudie zijn gemaakt, hebben een effect op uw Azure-factuur. Als u deze services niet op de lange termijn gaat gebruiken, voert u de volgende opdracht uit om alles te verwijderen dat in deze zelfstudie is gemaakt.
az group delete --resource-group $RESOURCE_GROUP
Configuratieopties
De az containerapp update
opdracht gebruikt de --configuration
parameter om te bepalen hoe de configuratieserver voor Spring is geconfigureerd. U kunt meerdere parameters tegelijk gebruiken zolang ze worden gescheiden door een spatie. Zie Spring Cloud-configuratieserver voor meer informatie.
In de volgende tabel worden de verschillende beschikbare configuratiewaarden voor de Git-back-end beschreven:
Name | Beschrijving |
---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
URI van externe opslagplaats. |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
Gebruikersnaam voor verificatie met externe opslagplaats. |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
Wachtwoord voor verificatie met externe opslagplaats. |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
Zoekpaden voor gebruik binnen lokale werkende kopie. Standaard wordt alleen in de hoofdmap gezocht. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
Vlag om aan te geven dat de opslagplaats pull moet afdwingen. Als true u lokale wijzigingen verwijdert en uit de externe opslagplaats neemt. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
Het standaardlabel dat wordt gebruikt voor Git, is het belangrijkste label. Als u niet instelt spring.cloud.config.server.git.default-label en een vertakking met de naam main niet bestaat, probeert de configuratieserver standaard ook een vertakking met de naam master uit te checken. Als u het gedrag van de terugvalbranch wilt uitschakelen, kunt u instellen spring.cloud.config.server.git.tryMasterBranch op false . |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
De configuratieserver probeert standaard een vertakking met de naam master uit te checken. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
U kunt de validatie van de configuratieserver van het TLS/SSL-certificaat van de Git-server uitschakelen door de git.skipSslValidation eigenschap in te stellen op true . |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
Vlag om aan te geven dat de opslagplaats moet worden gekloond bij het opstarten, niet op aanvraag. Over het algemeen leidt dit tot tragere opstart- maar snellere eerste query. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
Time-out in seconden voor het verkrijgen van een HTTP- of SSH-verbinding, indien van toepassing. De standaardwaarde is 5 seconden. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Hoe vaak de configuratieserver bijgewerkte configuratiegegevens ophaalt uit uw Git-back-end. |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
Geldige persoonlijke SSH-sleutel. Moet worden ingesteld als ignore-local-ssh-settings dat het is true en de Git-URI de SSH-indeling heeft. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
Geldige SSH-hostsleutel. Moet worden ingesteld als host-key-algorithm deze ook is ingesteld. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
Een vanssh-dss , ssh-rsa , , ssh-ed25519 , , ecdsa-sha2-nistp256 of ecdsa-sha2-nistp521 ecdsa-sha2-nistp384 . Moet worden ingesteld als host-key deze ook is ingesteld. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true of false . Als false , negeer fouten met hostsleutel. |
spring.cloud.config.server.git.repos.{repoName} |
URI van externe opslagplaats. |
spring.cloud.config.server.git.repos.{repoName}.pattern |
De patroonindeling is een door komma's gescheiden lijst met {application}/{profile} namen met jokertekens. Als {application}/{profile} deze niet overeenkomt met een van de patronen, wordt de standaard-URI gebruikt die is gedefinieerd onder. |
In de volgende lijst worden algemene configuraties beschreven:
Gerelateerde configuraties voor logboekregistratie:
logging.level.*
logging.group.*
- Alle andere configuraties onder de
logging.*
naamruimte moeten verboden zijn, bijvoorbeeld het schrijven van logboekbestanden met behulplogging.file
van moet verboden zijn.
spring.cloud.config.server.overrides
- Extra kaart voor een eigenschapsbron die voorwaardelijke naar alle clients wordt verzonden.
spring.cloud.config.override-none
- U kunt de prioriteit van alle onderdrukkingen in de client wijzigen zodat ze meer lijken op standaardwaarden, zodat toepassingen hun eigen waarden kunnen opgeven in omgevingsvariabelen of systeemeigenschappen door de
spring.cloud.config.override-none=true
vlag in te stellen - de standaardwaarde is onwaar - in de externe opslagplaats.
- U kunt de prioriteit van alle onderdrukkingen in de client wijzigen zodat ze meer lijken op standaardwaarden, zodat toepassingen hun eigen waarden kunnen opgeven in omgevingsvariabelen of systeemeigenschappen door de
spring.cloud.config.allow-override
- Als u de eerste bootstrap voor configuratie inschakelt, kunt u clienttoepassingen toestaan om de configuratie van de configuratieserver te overschrijven door twee eigenschappen in de configuratieconfiguratie van de toepassingen te plaatsen die afkomstig zijn van de configuratieserver.
spring.cloud.config.server.health.*
- U kunt de statusindicator configureren om meer toepassingen te controleren, samen met aangepaste profielen en aangepaste labels.
spring.cloud.config.server.accept-empty
- U kunt deze instellen
spring.cloud.config.server.accept-empty
false
zodat de server een HTTP-status404
retourneert als de toepassing niet wordt gevonden. Deze vlag is standaard ingesteld optrue
.
- U kunt deze instellen
Versleuteling en ontsleuteling (symmetrisch):
encrypt.key
- Handig wanneer u een symmetrische sleutel gebruikt, omdat deze één eigenschapswaarde is om te configureren.
spring.cloud.config.server.encrypt.enabled
- Stel deze eigenschap in om ontsleuteling aan de serverzijde uit te
false
schakelen.
- Stel deze eigenschap in om ontsleuteling aan de serverzijde uit te
Vernieuwen
Services die eigenschappen verbruiken, moeten kennis hebben van een wijziging voordat deze plaatsvindt. De standaardmeldingsmethode voor Config Server voor Spring omvat het handmatig activeren van de vernieuwings gebeurtenis, zoals een vernieuwing per aanroep https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh
, wat mogelijk niet haalbaar is als er veel app-exemplaren zijn.
In plaats daarvan kunt u automatisch waarden vernieuwen van Config Server door de configuratieclient te laten peilen naar wijzigingen op basis van een interne vernieuwing. Gebruik de volgende stappen om automatisch waarden van de configuratieserver te vernieuwen:
Registreer een geplande taak om de context in een bepaald interval te vernieuwen, zoals wordt weergegeven in het volgende voorbeeld:
@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)); } } }
Het juiste vernieuwingsinterval inschakelen
autorefresh
en instellen in het application.yml-bestand . In het volgende voorbeeld wordt elke 60 seconden een configuratiewijziging door de client gecontroleerd. Dit is de minimale waarde die u voor een vernieuwingsinterval kunt instellen.De standaardinstelling
autorefresh
is ingesteld opfalse
enrefresh-interval
is ingesteld op 60 seconden.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refresh
Voeg uw code toe
@RefreshScope
. In het volgende voorbeeld wordt de variabeleconnectTimeout
elke 60 seconden automatisch vernieuwd:@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
Versleuteling en ontsleuteling met een symmetrische sleutel
Ontsleuteling aan serverzijde
Versleuteling aan de serverzijde is standaard ingeschakeld. Gebruik de volgende stappen om ontsleuteling in te schakelen in uw toepassing:
Voeg de versleutelde eigenschap toe aan uw .properties-bestand in uw Git-opslagplaats.
Uw bestand zou er moeten uitzien zoals in het volgende voorbeeld:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
Werk de configuratieserver voor Spring Java-onderdeel bij voor het gebruik van de Git-opslagplaats met de versleutelde eigenschap en stel de versleutelingssleutel in.
Voordat u de volgende opdracht uitvoert, vervangt u tijdelijke aanduidingen tussen
<>
uw waarden.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
Ontsleuteling aan clientzijde
U kunt de ontsleuteling aan de clientzijde van eigenschappen gebruiken door de stappen te volgen:
Voeg de versleutelde eigenschap toe aan uw .properties-bestand in uw Git-opslagplaats.
Werk de configuratieserver voor Spring Java-onderdeel bij om de Git-opslagplaats met de versleutelde eigenschap te gebruiken en ontsleuteling aan de serverzijde uit te schakelen.
Voordat u de volgende opdracht uitvoert, vervangt u tijdelijke aanduidingen tussen
<>
uw waarden.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
Voeg in uw client-app de ontsleutelingssleutel
ENCRYPT_KEY=randomKey
toe als een omgevingsvariabele.U kunt ook, als u
spring-cloud-starter-bootstrap
deze opneemt in declasspath
, of instellenspring.cloud.bootstrap.enabled=true
als een systeemeigenschap, instellenencrypt.key
inbootstrap.properties
.Voordat u de volgende opdracht uitvoert, vervangt u tijdelijke aanduidingen tussen
<>
uw waarden.az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"
encrypt: key: somerandomkey