11.4. Secrets PropertySource 사용
Kubernetes에는 암호, OAuth 토큰 등과 같은 중요한 데이터를 저장하기 위한 시크릿 개념이 있습니다. Spring 클라우드 Kubernetes 플러그인은 Secrets
와의 통합을 제공하여 Spring Boot에서 시크릿에 액세스할 수 있도록 합니다.
활성화된 Secrets
속성 소스는 다음 소스에서 Kubernetes for Secrets
를 찾습니다. 시크릿이 발견되면 해당 데이터를 애플리케이션에 사용할 수 있습니다.
- 시크릿 마운트에서 재귀적으로 읽기
-
애플리케이션 뒤에 이름이 지정됨(
spring.application.name
참조) - 일부 라벨 일치
기본적으로 API를 통해 시크릿을 사용하는 경우 (위의 2점과 3점) 는 사용할 수 없습니다.
11.4.1. 보안 설정 예
속성을 사용하여 ActiveMQ 및 PostreSQL 구성을 읽는 demo
라는 Spring Boot 애플리케이션이 있다고 가정하겠습니다.
amq.username amq.password pg.username pg.password
이러한 보안은 YAML 형식의 시크릿
으로 외부화될 수 있습니다.
- ActiveMQ 보안
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=
11.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
11.4.3. Secrets PropertySource의 구성 속성
다음 속성을 사용하여 Secrets 속성 소스를 구성할 수 있습니다.
- spring.cloud.kubernetes.secrets.enabled
-
Secrets 속성 소스를 활성화합니다. type은
Boolean
이고 기본값은true
입니다. - spring.cloud.kubernetes.secrets.name
-
검색할 시크릿의 이름을 설정합니다. type은
String
이고 기본값은${spring.application.name}
입니다. - spring.cloud.kubernetes.secrets.labels
-
시크릿을 조회하는 데 사용되는 레이블을 설정합니다. 이 속성은 맵 기반 바인딩에 정의된 대로 작동합니다. type은
java.util.Map
이며 기본값은null
입니다. - spring.cloud.kubernetes.secrets.paths
-
보안이 마운트된 경로를 설정합니다. 이 속성은 컬렉션 기반 바인딩에 정의된 대로 작동합니다. type은
java.util.List
이며 기본값은null
입니다. - spring.cloud.kubernetes.secrets.enableApi
-
API를 통해 시크릿 사용 활성화/비활성화. type은
Boolean
이고 기본값은false
입니다.
보안상의 이유로 API를 통한 시크릿에 대한 액세스가 제한될 수 있습니다. 기본 방법은 POD에 시크릿을 마운트하는 것입니다.