다음을 통해 공유


Azure Container Apps에서 Config Server for Spring 구성 요소에 대한 설정 구성(미리 보기)

Config Server for Spring은 구성 데이터를 여러 애플리케이션에서 사용할 수 있도록 중앙 집중식 위치를 제공합니다. 다음 지침을 사용하여 Config Server for Spring 구성 요소를 구성하고 관리하는 방법을 알아봅니다.

표시

show 명령을 사용하여 이름으로 개별 구성 요소의 세부 정보를 볼 수 있습니다.

다음 명령을 실행하기 전에 <>로 묶인 자리 표시자를 원하는 값으로 바꿉니다.

az containerapp env java-component config-server-for-spring show \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --name <JAVA_COMPONENT_NAME>

List

list 명령을 사용하여 등록된 모든 Java 구성 요소를 나열할 수 있습니다.

다음 명령을 실행하기 전에 <>로 묶인 자리 표시자를 원하는 값으로 바꿉니다.

az containerapp env java-component list \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP>

바인딩

update 명령의 --bind 매개 변수를 사용하여 Config Server for Spring 구성 요소와 컨테이너 앱 간에 연결을 만듭니다.

다음 명령을 실행하기 전에 <>로 묶인 자리 표시자를 원하는 값으로 바꿉니다.

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --bind <JAVA_COMPONENT_NAME>

바인딩 해제

컨테이너 앱과 Config Server for Spring 구성 요소 간의 연결을 끊으려면 update 명령의 --unbind 매개 변수를 사용합니다.

다음 명령을 실행하기 전에 <>로 묶인 자리 표시자를 원하는 값으로 바꿉니다.

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --unbind <JAVA_COMPONENT_NAME> \
  --resource-group <RESOURCE_GROUP>

구성 옵션

az containerapp update 명령은 --configuration 매개 변수를 사용하여 Config Server for Spring이 구성된 방법을 제어합니다. 여러 매개 변수를 공백으로 구분하면 한 번에 여러 매개 변수를 사용할 수 있습니다. 자세한 내용은 Spring Cloud Config Server 문서에서 확인할 수 있습니다.

다음 표에서는 사용 가능한 다양한 구성 값을 나열합니다.

Git 백 엔드 구성

속성 설명
spring.cloud.config.server.git.uri
spring.cloud.config.server.git.repos.{repoName}.uri
원격 리포지토리의 URI입니다.
spring.cloud.config.server.git.username
spring.cloud.config.server.git.repos.{repoName}.username
원격 리포지토리를 사용한 인증을 위한 사용자 이름입니다.
spring.cloud.config.server.git.password
spring.cloud.config.server.git.repos.{repoName}.password
원격 리포지토리를 사용하여 인증하기 위한 암호입니다.
spring.cloud.config.server.git.search-paths
spring.cloud.config.server.git.repos.{repoName}.search-paths
로컬 작업 복사본 내에서 사용할 경로를 검색합니다. 기본적으로 루트만 검색합니다.
spring.cloud.config.server.git.force-pull
spring.cloud.config.server.git.repos.{repoName}.force-pull
리포지토리가 강제로 끌어오기를 해야 함을 나타내는 플래그입니다. true인 경우 로컬 변경 내용을 취소하고 원격 리포지토리에서 가져옵니다.
spring.cloud.config.server.git.default-label
spring.cloud.config.server.git.repos.{repoName}.default-label
Git에 사용되는 기본 레이블은 main입니다. spring.cloud.config.server.git.default-label을 설정하지 않고 main이라는 분기가 존재하지 않는 경우 구성 서버는 기본적으로 master라는 분기를 체크 아웃하려고 시도합니다. 대체 분기 동작을 사용하지 않도록 설정하려면 spring.cloud.config.server.git.tryMasterBranch를 false로 설정할 수 있습니다.
spring.cloud.config.server.git.try-master-branch
spring.cloud.config.server.git.repos.{repoName}.try-master-branch
구성 서버는 기본적으로 master라는 분기를 체크 아웃하려고 시도합니다.
spring.cloud.config.server.git.skip-ssl-validation
spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation
git.skipSslValidation 속성을 true로 설정하면 구성 서버의 Git 서버 SSL 인증서 유효성 검사를 사용하지 않도록 설정할 수 있습니다.
spring.cloud.config.server.git.clone-on-start
spring.cloud.config.server.git.repos.{repoName}.clone-on-start
시작 시(요청 시 아님) 리포지토리를 복제해야 함을 나타내는 플래그입니다. 일반적으로 시작 속도는 더 느리지만 첫 번째 쿼리는 더 빠릅니다.
spring.cloud.config.server.git.timeout
spring.cloud.config.server.git.repos.{repoName}.timeout
HTTP 또는 SSH 연결을 가져오기 위한 시간 제한(초)입니다(해당하는 경우). 기본값은 5초입니다.
spring.cloud.config.server.git.refresh-rate
spring.cloud.config.server.git.repos.{repoName}.refresh-rate
구성 서버가 Git 백 엔드에서 업데이트된 구성 데이터를 가져오는 빈도입니다.
spring.cloud.config.server.git.private-key
spring.cloud.config.server.git.repos.{repoName}.private-key
유효한 SSH 프라이빗 키입니다. ignore-local-ssh-settings가 true이고 Git URI가 SSH 형식인 경우 설정해야 합니다.
spring.cloud.config.server.git.host-key
spring.cloud.config.server.git.repos.{repoName}.host-key
유효한 SSH 호스트 키입니다. host-key-algorithm도 설정된 경우 설정해야 합니다.
spring.cloud.config.server.git.host-key-algorithm
spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm
ssh-dss, ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 또는 ecdsa-sha2-nistp521 중 하나입니다. host-key도 설정된 경우 설정해야 합니다.
spring.cloud.config.server.git.strict-host-key-checking
spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking
true 또는 false. false인 경우 호스트 키 오류를 무시합니다.
spring.cloud.config.server.git.repos.{repoName} 원격 리포지토리의 URI입니다.
spring.cloud.config.server.git.repos.{repoName}.pattern 패턴 형식은 와일드카드가 있는 {application}/{profile} 이름의 쉼표로 구분된 목록입니다. {application}/{profile}이 아무 패턴과도 일치하지 않으면 아래에 정의된 기본 URI를 사용합니다.

일반 구성

  • 관련 구성 로깅

    • logging.level.*
    • logging.group.*
    • logging.* 네임스페이스 아래의 다른 모든 구성은 금지되어야 합니다. 예를 들어, logging.file을 사용하여 로그 파일을 작성하는 것은 금지되어야 합니다.
  • spring.cloud.config.server.overrides

    • 모든 클라이언트에 무조건 전송할 속성 원본에 대한 추가 맵입니다.
  • spring.cloud.config.override-none

    • 원격 리포지토리에서 spring.cloud.config.override-none=true 플래그(기본값은 false)를 설정하여 애플리케이션이 환경 변수 또는 시스템 속성에 고유한 값을 제공할 수 있도록 클라이언트의 모든 재정의 우선순위를 기본값과 비슷하게 변경할 수 있습니다.
  • spring.cloud.config.allow-override

    • 구성 첫 번째 부트스트랩을 사용하도록 설정하면 클라이언트 애플리케이션이 구성 서버에서 들어오는 애플리케이션 구성 내에 두 개의 속성을 배치하여 구성 서버에서 구성을 재정의하도록 허용할 수 있습니다.
  • spring.cloud.config.server.health.

    • 사용자 지정 프로필 및 사용자 지정 레이블과 함께 더 많은 애플리케이션을 확인하도록 상태 표시기를 구성할 수 있습니다.
  • spring.cloud.config.server.accept-empty

    • 애플리케이션을 찾을 수 없는 경우 서버가 HTTP 404 상태를 반환하도록 spring.cloud.config.server.accept-emptyfalse로 설정할 수 있습니다. 기본적으로 이 플래그는 true로 설정됩니다.
  • 암호화 및 암호 해독(대칭)

    • encrypt.key
      • 구성할 단일 속성값이므로 대칭 키를 사용하는 것이 편리합니다.
    • spring.cloud.config.server.encrypt.enabled
      • 서버 쪽 암호 해독을 사용하지 않도록 설정하려면 이를 false로 설정할 수 있습니다.

새로 고침

속성을 사용하는 서비스는 변경이 발생하기 전에 변경 내용을 알아야 합니다. Config Server for Spring의 기본 알림 방법에는 https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh을(를) 호출하여 새로 고침과 같은 새로 고침 이벤트를 수동으로 트리거하는 작업이 포함되며, 앱 인스턴스가 많은 경우에는 불가능할 수 있습니다.

대신 구성 클라이언트가 내부 새로 고침을 기반으로 변경 사항을 폴링하도록 하여 Config Server에서 값을 자동으로 새로 고칠 수 있습니다. 다음 단계를 사용하여 Config Server에서 값을 자동으로 새로 고칩니다.

  1. 다음 예제와 같이 예약 작업을 등록하여 지정된 간격으로 컨텍스트를 새로 고칩니다.

    @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. autorefresh을 사용하도록 설정하고 application.yml 파일에서 적절한 새로 고침 간격을 설정합니다. 다음 예제에서 클라이언트는 새로 고침 간격으로 설정할 수 있는 최솟값인 60초마다 구성 변경 내용을 폴링합니다.

    기본적으로 autorefreshfalse로 설정되고 refresh-interval은 60초로 설정됩니다.

    spring:
        cloud:
            config:
            auto-refresh: true
            refresh-interval: 60
    management:
        endpoints:
            web:
            exposure:
                include:
                - refresh
    
  3. 코드에 @RefreshScope를 추가합니다. 다음 예제에서는 변수 connectTimeout이 60초마다 자동으로 새로 고쳐집니다.

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

대칭 키를 사용한 암호화 및 암호 해독

서버 쪽 암호 해독

기본적으로 서버 쪽 암호화는 사용하도록 설정됩니다. 다음 단계를 사용하여 애플리케이션에서 암호 해독을 사용하도록 설정합니다.

  1. git 리포지토리의 .properties 파일에 암호화된 속성을 추가합니다.

    예를 들어 파일은 다음 예제와 유사해야 합니다.

    message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
    
  2. 암호화된 속성이 있는 git 리포지토리를 사용하고 암호화 키를 설정하도록 Config Server for Spring Java 구성 요소를 업데이트합니다.

    다음 명령을 실행하기 전에 <>로 묶인 자리 표시자를 원하는 값으로 바꿉니다.

    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
    

클라이언트 쪽 암호 해독

다음 단계를 수행하여 속성의 클라이언트 쪽 암호 해독을 사용할 수 있습니다.

  1. git 리포지토리의 *.properties* 파일에 암호화된 속성을 추가합니다.

  2. 암호화된 속성이 있는 git 리포지토리를 사용하고 서버 쪽 암호 해독을 사용하지 않도록 Config Server for Spring Java 구성 요소를 업데이트합니다.

    다음 명령을 실행하기 전에 <>로 묶인 자리 표시자를 원하는 값으로 바꿉니다.

    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. 클라이언트 앱에서 암호 해독 키 ENCRYPT_KEY=randomKey를 환경 변수로 추가합니다.

    또는 classpathspring-cloud-starter-bootstrap을 포함하거나 시스템 속성으로 spring.cloud.bootstrap.enabled=true를 설정하는 경우 bootstrap.propertiesencrypt.key를 설정하세요.

    다음 명령을 실행하기 전에 <>로 묶인 자리 표시자를 원하는 값으로 바꿉니다.

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

다음 단계