Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Serwer konfiguracji dla platformy Spring udostępnia scentralizowaną lokalizację, która udostępnia dane konfiguracji wielu aplikacjom. Z tego artykułu dowiesz się, jak połączyć aplikację hostowaną w usłudze Azure Container Apps z wystąpieniem java Config Server for Spring.
Składnik Config Server for Spring Java używa repozytorium GitHub jako źródła ustawień konfiguracji. Wartości konfiguracji są udostępniane aplikacji kontenera za pośrednictwem powiązania między składnikiem a aplikacją kontenera. Gdy wartości zmieniają się na serwerze konfiguracji, automatycznie przepływają do aplikacji bez konieczności ponownego kompilowania lub ponownego wdrażania aplikacji.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Tworzenie składnika Config Server for Spring Java
- Wiązanie serwera konfiguracji platformy Spring z aplikacją kontenera
- Obserwowanie wartości konfiguracji przed i po połączeniu serwera konfiguracji z aplikacją
- Szyfrowanie i odszyfrowywanie wartości konfiguracji przy użyciu klucza symetrycznego
Ważne
W tym samouczku są używane usługi, które mogą mieć wpływ na rachunek za korzystanie z platformy Azure. Jeśli zdecydujesz się wykonać kroki krok po kroku, upewnij się, że usunięto zasoby opisane w tym artykule, aby uniknąć nieoczekiwanych rozliczeń.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Jeśli jeszcze go nie masz, możesz go utworzyć bezpłatnie.
- Interfejs wiersza polecenia platformy Azure.
Kwestie wymagające rozważenia
Podczas uruchamiania w programie Config Server for Spring w usłudze Azure Container Apps należy pamiętać o następujących szczegółach:
| Towar | Wyjaśnienie |
|---|---|
| Scope | Serwer konfiguracji dla platformy Spring działa w tym samym środowisku co połączona aplikacja kontenera. |
| Skalowanie | Aby zachować pojedyncze źródło prawdy, serwer konfiguracji dla platformy Spring nie jest skalowany. Właściwości minReplicas skalowania i maxReplicas są ustawione na 1wartość . |
| Zasoby | Alokacja zasobów kontenera dla serwera konfiguracji spring jest stała, liczba rdzeni procesora CPU wynosi 0,5, a rozmiar pamięci to 1Gi. |
| Cennik | Serwer konfiguracji dla rozliczeń platformy Spring jest objęty cenami opartymi na użyciu. Zasoby używane przez zarządzane składniki Java są rozliczane według stawek aktywnych/bezczynnych. Możesz usunąć składniki, które nie są już używane do zatrzymywania rozliczeń. |
| Powiązanie | Aplikacja kontenera łączy się z serwerem konfiguracji platformy Spring za pośrednictwem powiązania. Powiązanie wprowadza konfiguracje do zmiennych środowiskowych aplikacji kontenera. Po ustanowieniu powiązania aplikacja kontenera może odczytywać wartości konfiguracji ze zmiennych środowiskowych. |
Ustawienia
Przed rozpoczęciem pracy z programem Config Server for Spring należy najpierw utworzyć wymagane zasoby.
Wykonaj następujące polecenia, aby utworzyć grupę zasobów i środowisko usługi Container Apps.
Utwórz zmienne do obsługi konfiguracji aplikacji. Te wartości są udostępniane na potrzeby tej lekcji.
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"Zmienna opis LOCATIONLokalizacja regionu świadczenia usługi Azure, w której tworzysz aplikację kontenera i składnik Java. ENVIRONMENTNazwa środowiska usługi Azure Container Apps dla aplikacji demonstracyjnej. RESOURCE_GROUPNazwa grupy zasobów platformy Azure dla aplikacji demonstracyjnej. JAVA_COMPONENT_NAMENazwa składnika Java utworzonego dla aplikacji kontenera. W tym przypadku utworzysz składnik Config Server for Spring Java. IMAGEObraz kontenera używany w aplikacji kontenera. URIMożesz zastąpić identyfikator URI adresem URL repozytorium Git, jeśli jest on prywatny, dodaj powiązane konfiguracje uwierzytelniania, takie jak spring.cloud.config.server.git.usernameispring.cloud.config.server.git.password.Zaloguj się na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
az loginUtwórz grupę zasobów.
az group create --name $RESOURCE_GROUP --location $LOCATIONUtwórz środowisko aplikacji kontenera.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
To środowisko służy do hostowania zarówno składnika Config Server for Spring java, jak i aplikacji kontenera.
Tworzenie składnika Config Server for Spring Java
Teraz, gdy masz środowisko usługi Container Apps, możesz utworzyć aplikację kontenera i powiązać ją ze składnikiem Config Server for Spring Java. Po powiązaniu aplikacji kontenera wartości konfiguracji są automatycznie synchronizowane ze składnika serwera konfiguracji z aplikacją.
Utwórz składnik Config Server for Spring Java.
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=$URIZaktualizuj składnik Config Server for Spring Java.
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=60W tym miejscu mówisz składnikowi, gdzie można znaleźć repozytorium zawierające informacje o konfiguracji za pośrednictwem
uriwłaściwości . Właściwość informuje usługęrefresh-rateContainer Apps, jak często należy sprawdzać zmiany w repozytorium Git.
Wiązanie aplikacji kontenera ze składnikiem Config Server for Spring Java
Utwórz aplikację kontenera, która korzysta z danych konfiguracji.
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.fqdnTo polecenie zwraca adres URL aplikacji kontenera, która korzysta z danych konfiguracji. Skopiuj adres URL do edytora tekstów, aby móc go użyć w kolejnym kroku.
Jeśli odwiedzasz aplikację w przeglądarce,
connectTimeoutzwracana wartość to wartość domyślna .0Powiąż z serwerem konfiguracji spring.
Po utworzeniu aplikacji kontenera i serwera konfiguracji należy powiązać je razem z poleceniem
updatedo aplikacji kontenera.az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $JAVA_COMPONENT_NAMEParametr
--bind $JAVA_COMPONENT_NAMEtworzy połączenie między aplikacją kontenera a składnikiem konfiguracji.
Po połączeniu aplikacji kontenera i składnika serwera konfiguracji zmiany konfiguracji są automatycznie synchronizowane z aplikacją kontenera.
Gdy ponownie odwiedzisz adres URL aplikacji, wartość connectTimeout to .10000 Ta wartość pochodzi z repozytorium Git ustawionego $URI w zmiennej pierwotnie ustawionej jako źródło składnika konfiguracji. W szczególności ta wartość jest pobierana z connectionTimeout właściwości w pliku application.yml repozytorium.
Żądanie powiązania wprowadza ustawienie konfiguracji do aplikacji jako zmienne środowiskowe. Te wartości są teraz dostępne dla kodu aplikacji do użycia podczas pobierania ustawień konfiguracji z serwera konfiguracji.
W takim przypadku następujące zmienne środowiskowe są dostępne dla aplikacji:
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
Jeśli chcesz dostosować własny SPRING_CONFIG_IMPORTelement , możesz odwołać się do zmiennej środowiskowej SPRING_CLOUD_CONFIG_COMPONENT_URI — na przykład możesz zastąpić argumentami wiersza polecenia, takimi jak Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true.
Można również usunąć powiązanie z aplikacji.
(Opcjonalnie) Odłącz aplikację kontenera od składnika Config Server for Spring Java
Aby usunąć powiązanie z aplikacji kontenera, użyj --unbind opcji .
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Gdy ponownie odwiedzisz adres URL aplikacji, wartość connectTimeout zmienia się z powrotem na 0.
Czyszczenie zasobów
Zasoby utworzone w tym samouczku mają wpływ na rachunek za platformę Azure. Jeśli nie zamierzasz korzystać z tych usług długoterminowych, uruchom następujące polecenie, aby usunąć wszystkie elementy utworzone w tym samouczku.
az group delete --resource-group $RESOURCE_GROUP
Opcje konfiguracji
Polecenie az containerapp update używa parametru --configuration do kontrolowania sposobu konfigurowania serwera konfiguracji dla platformy Spring. Można używać wielu parametrów jednocześnie, o ile są one oddzielone spacją. Aby uzyskać więcej informacji, zobacz Spring Cloud Config Server.
W poniższej tabeli opisano różne dostępne wartości konfiguracji zaplecza Git:
| Nazwa/nazwisko | opis |
|---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
Identyfikator URI repozytorium zdalnego. |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
Nazwa użytkownika na potrzeby uwierzytelniania za pomocą repozytorium zdalnego. |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
Hasło do uwierzytelniania za pomocą repozytorium zdalnego. |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
Wyszukaj ścieżki do użycia w ramach lokalnej kopii roboczej. Domyślnie wyszukuje tylko katalog główny. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
Flaga wskazująca, że repozytorium powinno wymusić ściąganie. W przypadku truepolecenia odrzuć jakiekolwiek zmiany lokalne i przejmij je z repozytorium zdalnego. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
Domyślna etykieta używana w usłudze Git jest główna. Jeśli nie ustawiono spring.cloud.config.server.git.default-label i gałąź o nazwie main nie istnieje, serwer konfiguracji domyślnie próbuje również wyewidencjonować gałąź o nazwie master. Jeśli chcesz wyłączyć zachowanie gałęzi rezerwowej, możesz ustawić wartość spring.cloud.config.server.git.tryMasterBranchfalse. |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
Serwer konfiguracji domyślnie próbuje wyewidencjonować gałąź o nazwie master. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
Walidację serwera konfiguracji certyfikatu TLS/SSL serwera Git można wyłączyć, ustawiając git.skipSslValidation właściwość na truewartość . |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
Flaga wskazująca, że repozytorium powinno zostać sklonowane podczas uruchamiania, a nie na żądanie. Zazwyczaj prowadzi do wolniejszego uruchamiania, ale szybszego pierwszego zapytania. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
Limit czasu w sekundach na uzyskanie połączenia HTTP lub SSH, jeśli ma to zastosowanie. Wartość domyślna to 5 sekund. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Jak często serwer konfiguracji pobiera zaktualizowane dane konfiguracji z zaplecza Git. |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
Prawidłowy klucz prywatny SSH. Należy ustawić, jeśli ignore-local-ssh-settings ma wartość , true a identyfikator URI usługi Git ma format SSH. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
Prawidłowy klucz hosta SSH. Należy ustawić wartość , jeśli host-key-algorithm jest również ustawiona. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
ssh-dssJeden z , , ssh-rsassh-ed25519, ecdsa-sha2-nistp256ecdsa-sha2-nistp384lub ecdsa-sha2-nistp521. Należy ustawić wartość , jeśli host-key jest również ustawiona. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
Usługa true lub false. Jeśli false, zignoruj błędy z kluczem hosta. |
spring.cloud.config.server.git.repos.{repoName} |
Identyfikator URI repozytorium zdalnego. |
spring.cloud.config.server.git.repos.{repoName}.pattern |
Format wzorca to rozdzielona przecinkami lista {application}/{profile} nazw z symbolami wieloznacznymi. Jeśli {application}/{profile} nie pasuje do żadnego z wzorców, używa domyślnego identyfikatora URI zdefiniowanego w obszarze. |
Poniższa lista zawiera opis typowych konfiguracji:
Rejestrowanie powiązanych konfiguracji:
logging.level.*logging.group.*- Wszelkie inne konfiguracje w
logging.*przestrzeni nazw powinny być zabronione — na przykład zapisywanie plików dziennika przy użyciulogging.filepolecenia powinno być zabronione.
spring.cloud.config.server.overrides- Dodatkowa mapa źródła właściwości do wysłania do wszystkich klientów bezwarunkowo.
spring.cloud.config.override-none- Priorytet wszystkich przesłonięć w kliencie można zmienić tak, aby był bardziej podobny do wartości domyślnych, umożliwiając aplikacjom dostarczanie własnych wartości w zmiennych środowiskowych lub właściwości systemu, ustawiając flagę
spring.cloud.config.override-none=true— wartość domyślna to false — w repozytorium zdalnym.
- Priorytet wszystkich przesłonięć w kliencie można zmienić tak, aby był bardziej podobny do wartości domyślnych, umożliwiając aplikacjom dostarczanie własnych wartości w zmiennych środowiskowych lub właściwości systemu, ustawiając flagę
spring.cloud.config.allow-override- Jeśli włączysz konfigurację podczas pierwszego uruchamiania, możesz zezwolić aplikacjom klienckim na zastąpienie konfiguracji z serwera konfiguracji, umieszczając dwie właściwości w konfiguracji aplikacji pochodzącej z serwera konfiguracji.
spring.cloud.config.server.health.*- Możesz skonfigurować wskaźnik kondycji, aby sprawdzić więcej aplikacji wraz z profilami niestandardowymi i etykietami niestandardowymi.
spring.cloud.config.server.accept-empty- Można ustawić
spring.cloud.config.server.accept-emptywartość nafalse, aby serwer zwracał stan HTTP404, jeśli aplikacja nie zostanie znaleziona. Domyślnie ta flaga jest ustawiona natrue.
- Można ustawić
Szyfrowanie i odszyfrowywanie (symetryczne):
encrypt.key- Wygodne w przypadku używania klucza symetrycznego, ponieważ jest to pojedyncza wartość właściwości do skonfigurowania.
spring.cloud.config.server.encrypt.enabled- Ustaw tę właściwość na wartość , aby
falsewyłączyć odszyfrowywanie po stronie serwera.
- Ustaw tę właściwość na wartość , aby
Odśwież
Usługi, które korzystają z właściwości, muszą wiedzieć o zmianie przed jej wykonaniem. Domyślna metoda powiadamiania dla serwera konfiguracji platformy Spring obejmuje ręczne wyzwolenie zdarzenia odświeżania, takie jak odświeżanie według wywołania https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh, co może nie być możliwe, jeśli istnieje wiele wystąpień aplikacji.
Zamiast tego można automatycznie odświeżać wartości z serwera konfiguracji, pozwalając klientowi konfiguracji sondować pod kątem zmian na podstawie wewnętrznego odświeżania. Wykonaj następujące kroki, aby automatycznie odświeżyć wartości z serwera konfiguracji:
Zarejestruj zaplanowane zadanie, aby odświeżyć kontekst w danym interwale, jak pokazano w poniższym przykładzie:
@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)); } } }Włącz
autorefreshi ustaw odpowiedni interwał odświeżania w pliku application.yml . W poniższym przykładzie klient sonduje zmianę konfiguracji co 60 sekund, czyli minimalną wartość, którą można ustawić dla interwału odświeżania.Domyślnie
autorefreshjest ustawiona wartośćfalseirefresh-intervaljest ustawiona na 60 sekund.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refreshDodaj
@RefreshScopekod. W poniższym przykładzie zmiennaconnectTimeoutjest automatycznie odświeżona co 60 sekund:@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
Szyfrowanie i odszyfrowywanie przy użyciu klucza symetrycznego
Odszyfrowywanie po stronie serwera
Domyślnie szyfrowanie po stronie serwera jest włączone. Aby włączyć odszyfrowywanie w aplikacji, wykonaj następujące czynności:
Dodaj zaszyfrowaną właściwość w pliku properties w repozytorium Git.
Plik powinien przypominać następujący przykład:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282fZaktualizuj składnik Config Server for Spring Java, aby użyć repozytorium Git z zaszyfrowaną właściwością i ustawić klucz szyfrowania.
Przed uruchomieniem następującego polecenia zastąp symbole zastępcze otoczone
<>wartościami.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
Odszyfrowywanie po stronie klienta
Możesz użyć odszyfrowywania po stronie klienta właściwości, wykonując następujące kroki:
Dodaj zaszyfrowaną właściwość w pliku properties w repozytorium Git.
Zaktualizuj składnik Config Server for Spring Java, aby użyć repozytorium Git z zaszyfrowaną właściwością i wyłączyć odszyfrowywanie po stronie serwera.
Przed uruchomieniem następującego polecenia zastąp symbole zastępcze otoczone
<>wartościami.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=falseW aplikacji klienckiej dodaj klucz
ENCRYPT_KEY=randomKeyodszyfrowywania jako zmienną środowiskową.Alternatywnie, jeśli uwzględnisz
spring-cloud-starter-bootstrapelement w elemecieclasspath, lub ustawiszspring.cloud.bootstrap.enabled=truejako właściwość systemową, ustaw wartość w elemencrypt.key.bootstrap.propertiesPrzed uruchomieniem następującego polecenia zastąp symbole zastępcze otoczone
<>wartościami.az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"encrypt: key: somerandomkey