Udostępnij za pośrednictwem


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ść na false , aby serwer zwracał stan HTTP 404 , jeśli aplikacja nie zostanie znaleziona. Domyślnie ta flaga jest ustawiona na true.
  • 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 falsewartość , aby wyłączyć odszyfrowywanie po stronie serwera.

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.

  1. 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));
            }
        }
    }
    
  2. 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ść falsei refresh-interval jest ustawiona na 60 sekund.

    spring:
        cloud:
            config:
            auto-refresh: true
            refresh-interval: 60
    management:
        endpoints:
            web:
            exposure:
                include:
                - refresh
    
  3. Dodaj @RefreshScope kod. W poniższym przykładzie zmienna connectTimeout 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.

  1. 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
    
  2. 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:

  1. Dodaj zaszyfrowaną właściwość w *.properties* pliku w repozytorium git.

  2. 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
    
  3. 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
    

Następne kroki