9.3. ConfigMap PropertySource 사용

Kubernetes에는 구성을 애플리케이션에 전달하기 위한 ConfigMap 의 개념이 있습니다. Spring 클라우드 Kubernetes 플러그인은 ConfigMap 과 통합을 제공하여 Spring Boot에서 구성 맵에 액세스할 수 있도록 합니다.

활성화된 ConfigMap PropertySource 는 애플리케이션 다음에 이름이 지정된 ConfigMap 에 대해 Kubernetes를 조회합니다( spring.application.name참조). 맵이 발견되면 해당 데이터를 읽고 다음을 수행합니다.

9.3.1. 개별 속성 적용

속성을 사용하여 스레드 풀 구성을 읽는 demo 라는 Spring Boot 애플리케이션이 있다고 가정하겠습니다.

  • pool.size.core
  • pool.size.max

YAML 형식의 구성 맵에 외부화할 수 있습니다.

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  pool.size.core: 1
  pool.size.max: 16

9.3.2. application.yaml ConfigMap 속성 적용

개별 속성은 대부분의 경우에 적합하지만 YAML이 더 편리합니다. 이 경우 application.yaml 이라는 단일 속성을 사용하고 YAML을 여기에 삽입합니다.

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  application.yaml: |-
    pool:
      size:
        core: 1
        max:16

9.3.3. application.properties ConfigMap 속성 적용

Spring Boot application.properties 파일의 스타일에 ConfigMap 속성을 정의할 수도 있습니다. 이 경우 application.properties 라는 단일 속성을 사용하고 그 안에 속성 설정을 나열합니다.

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  application.properties: |-
    pool.size.core: 1
    pool.size.max: 16

9.3.4. ConfigMap 배포

ConfigMap을 배포하고 Spring Boot 애플리케이션에 액세스하려면 다음 단계를 수행합니다.

절차

  1. Spring Boot 애플리케이션에서 외부화된 구성 메커니즘을 사용하여 ConfigMap 속성 소스에 액세스합니다. 예를 들어 Java 8080에 @Configuration 주석에 주석을 달면 ConfigMap을 통해 빈의 속성 값을 삽입할 수 있습니다.
  2. 프로젝트의 bootstrap.properties 파일(또는 bootstrap.yaml 파일)에서 ConfigMap의 이름과 일치하도록 spring.application.name 속성을 설정합니다.
  3. 애플리케이션과 연결된 서비스 계정에 대한 보기 권한을 활성화합니다(기본적으로 기본이라는 서비스 계정임). 예를 들어 기본 서비스 계정에 보기 권한을 추가하려면 다음을 수행합니다.

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)