9.4. Secrets PropertySource 사용

Kubernetes에는 암호, OAuth 토큰 등과 같은 중요한 데이터를 저장하기 위한 시크릿 개념이 있습니다. Spring 클라우드 Kubernetes 플러그인은 시크릿과 통합을 제공하여 Spring Boot에서 시크릿에 액세스할 수 있도록 합니다.

활성화된 Secrets 속성 소스는 다음 소스에서 Kubernetes for Secrets 를 찾습니다. 시크릿이 발견되면 해당 데이터를 애플리케이션에서 사용할 수 있습니다.

  1. 보안 마운트에서 재귀적으로 읽기
  2. 애플리케이션 이름( spring.application.name참조)
  3. 일부 라벨 일치

기본적으로 API(위 2 및 3)를 통해 Secrets를 사용하는 것은 활성화되지 않습니다.

9.4.1. 시크릿 설정 예

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

amq.username
amq.password
pg.username
pg.password

이러한 보안은 YAML 형식의 시크릿 으로 외부화할 수 있습니다.

ActiveMQ Secrets
apiVersion: v1
kind: Secret
metadata:
  name: activemq-secrets
  labels:
    broker: activemq
type: Opaque
data:
  amq.username: bXl1c2VyCg==
  amq.password: MWYyZDFlMmU2N2Rm
PostreSQL 시크릿
apiVersion: v1
kind: Secret
metadata:
  name: postgres-secrets
  labels:
    db: postgres
type: Opaque
data:
  pg.username: dXNlcgo=
  pg.password: cGdhZG1pbgo=

9.4.2. 보안 사용

다음과 같은 여러 가지 방법으로 사용할 보안을 선택할 수 있습니다.

  • 보안이 매핑되는 디렉터리를 나열하여 다음을 수행하십시오.

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets/activemq,etc/secrets/postgres

    공통 루트에 매핑된 모든 보안이 있는 경우 다음과 같이 설정할 수 있습니다.

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets
  • 이름이 지정된 보안을 설정하면 다음을 수행합니다.

    -Dspring.cloud.kubernetes.secrets.name=postgres-secrets
  • 라벨 목록을 정의하여 다음을 수행합니다.

    -Dspring.cloud.kubernetes.secrets.labels.broker=activemq
    -Dspring.cloud.kubernetes.secrets.labels.db=postgres

9.4.3. Secrets PropertySource의 구성 속성

다음 속성을 사용하여 Secrets 속성 소스를 구성할 수 있습니다.

spring.cloud.kubernetes.secrets.enabled
Secrets 속성 소스를 활성화합니다. type은 부울 이며 기본값은 true 입니다.
spring.cloud.kubernetes.secrets.name
조회할 시크릿 이름을 설정합니다. type은 문자열 이며 기본값은 ${spring.application.name} 입니다.
spring.cloud.kubernetes.secrets.labels
보안을 조회하는 데 사용되는 레이블을 설정합니다. 이 속성은 Map 기반 바인딩에 의해 정의된 대로 작동합니다. type은 java.util.Map 이며 기본값은 null 입니다.
spring.cloud.kubernetes.secrets.paths
보안이 마운트된 경로를 설정합니다. 이 속성은 컬렉션 기반 바인딩에 의해 정의된 대로 작동합니다. type은 java.util.List 이며 기본값은 null 입니다.
spring.cloud.kubernetes.secrets.enableApi
API를 통해 보안 사용을 활성화/비활성화합니다. type은 부울 이며 기본값은 false 입니다.
참고

보안상의 이유로 API를 통해 시크릿에 대한 액세스가 제한될 수 있습니다. 즉, 권장되는 방법은 POD에 시크릿을 마운트하는 것입니다.