Konfigurowanie ustawień składnika Config Server for Spring w usłudze Azure Container Apps (wersja zapoznawcza)
Serwer konfiguracji dla platformy Spring udostępnia scentralizowaną lokalizację, która udostępnia dane konfiguracji wielu aplikacjom. Skorzystaj z poniższych wskazówek, aby dowiedzieć się, jak skonfigurować serwer konfiguracji dla składnika Spring i zarządzać nim.
Pokaż
Szczegóły poszczególnych składników można wyświetlić przy użyciu show
polecenia .
Przed uruchomieniem następującego polecenia zastąp symbole zastępcze otoczone <>
wartościami.
az containerapp env java-component config-server-for-spring show \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP> \
--name <JAVA_COMPONENT_NAME>
List
Listę wszystkich zarejestrowanych składników Języka Java można wyświetlić za list
pomocą polecenia .
Przed uruchomieniem następującego polecenia zastąp symbole zastępcze otoczone <>
wartościami.
az containerapp env java-component list \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP>
Bind
--bind
Użyj parametru update
polecenia, aby utworzyć połączenie między składnikiem Config Server for Spring i aplikacją kontenera.
Przed uruchomieniem następującego polecenia zastąp symbole zastępcze otoczone <>
wartościami.
az containerapp update \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--bind <JAVA_COMPONENT_NAME>
Unbind
Aby przerwać połączenie między aplikacją kontenera a składnikiem Config Server for Spring, użyj --unbind
parametru update
polecenia .
Przed uruchomieniem następującego polecenia zastąp symbole zastępcze otoczone <>
wartościami.
az containerapp update \
--name <CONTAINER_APP_NAME> \
--unbind <JAVA_COMPONENT_NAME> \
--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ą. Więcej szczegółów można znaleźć w dokumentacji serwera Spring Cloud Config Server .
W poniższej tabeli wymieniono różne dostępne wartości konfiguracji.
Konfiguracje zaplecza usługi 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. Jeśli wartość true odrzucić jakiekolwiek zmiany lokalne i podjąć 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 ustawisz elementu spring.cloud.config.server.git.default-label i gałąź o nazwie main nie istnieje, serwer konfiguracji domyślnie spró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.tryMasterBranch na wartość false. |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
Serwer konfiguracji domyślnie spróbuje wyewidencjonować gałąź o nazwie master. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
Sprawdzanie poprawności certyfikatu SSL serwera Git na serwerze konfiguracji można wyłączyć, ustawiając właściwość git.skipSslValidation na true. |
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 (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 potrzeby uzyskiwania połączenia HTTP lub SSH (jeśli dotyczy). Wartość domyślna 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 Usługi 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 parametr ignore-local-ssh-settings ma wartość true, a identyfikator URI usługi Git to 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ć, jeśli ustawiono również algorytm klucza hosta. |
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 lub ecdsa-sha2-nistp521. Należy ustawić, jeśli ustawiono również klucz-hosta. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
True lub false. Jeśli wartość 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 nazw {application}/{profile} z symbolami wieloznacznymi. Jeśli element {application}/{profile} nie pasuje do żadnego z wzorców, używa domyślnego identyfikatora URI zdefiniowanego w obszarze. |
Typowe konfiguracje
Rejestrowanie powiązanych konfiguracji
- logging.level.*
- logging.group.*
- Wszelkie inne konfiguracje w obszarze rejestrowania.* przestrzeni nazw powinny być zabronione, na przykład zapisywanie plików dziennika przy użyciu
logging.file
polecenia 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.config.none=true (wartość domyślna to false) w repozytorium zdalnym.
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-empty
wartość 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 jest użycie klucza symetrycznego, ponieważ jest to pojedyncza wartość właściwości do skonfigurowania.
- spring.cloud.config.server.encrypt.enabled
- Można to ustawić na
false
wartość , aby wyłączyć odszyfrowywanie po stronie serwera.
- Można to ustawić na
- encrypt.key
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 poniższe 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
autorefresh
i 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
autorefresh
jest ustawiona wartośćfalse
irefresh-interval
jest ustawiona na 60 sekund.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refresh
Dodaj
@RefreshScope
kod. W poniższym przykładzie zmiennaconnectTimeout
jest 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. Wykonaj poniższe kroki, aby włączyć odszyfrowywanie w aplikacji.
Dodaj zaszyfrowaną właściwość w pliku properties w repozytorium git.
Na przykład plik powinien przypominać następujący przykład:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
Zaktualizuj 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
*.properties*
pliku 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=false
W aplikacji klienckiej dodaj klucz
ENCRYPT_KEY=randomKey
odszyfrowywania jako zmienną środowiskową.Alternatywnie, jeśli dołączysz element spring-cloud-starter-bootstrap na , lub ustawisz
spring.cloud.bootstrap.enabled=true
jako właściwość systemową, ustaw wartość w elembootstrap.properties
.encrypt.key
classpath
Przed 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