Kubernetes ‐ 컨피그맵(ConfigMap), 시크릿(Secret)을 활용해 환경변수 관리하기 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 Spring Boot 서버에 환경변수 등록해 사용하기
apiVersion: apps/v1
kind: Deployment
# Deployment 기본 정보
metadata:
name: spring-deployment # Deployment 이름
# Deployment 세부 정보
spec:
replicas: 3 # 생성할 파드의 복제본 개수
selector:
matchLabels:
app: backend-app # 아래에서 정의한 Pod 중 'app: backend-app'이라는 값을 가진 파드를 선택
# 배포할 Pod 정의
template:
metadata:
labels: # 레이블 (= 카테고리)
app: backend-app
spec:
containers:
- name: spring-container # 컨테이너 이름
image: spring-server # 컨테이너를 생성할 때 사용할 이미지
imagePullPolicy: IfNotPresent # 로컬에서 이미지를 먼저 가져온다. 없으면 레지스트리에서 가져온다.
ports:
- containerPort: 8080 # 컨테이너에서 사용하는 포트를 명시적으로 표현
env: # 환경변수 등록
- name: MY_ACCOUNT
value: jaeseong
- name: MY_PASSWORD
value: pwd1234
- 쿠버네티스에서는 파드, 디플로이먼트, 서비스가 각각의 역할을 가지고 있는 것처럼 환경 변수를 관리하는 역할을 가진 오브젝트가 따로 존재한다. 이것을 바로 컨피그맵이라고 한다.
apiVersion: v1
kind: ConfigMap
# ConfigMap 기본 정보
metadata:
name: spring-config # ConfigMap 이름
# Key, Value 형식으로 설정값 저장
data:
my-account: jwj
my-password: password123
apiVersion: apps/v1
kind: Deployment
# Deployment 기본 정보
metadata:
name: spring-deployment # Deployment 이름
# Deployment 세부 정보
spec:
replicas: 5 # 생성할 파드의 복제본 개수
selector:
matchLabels:
app: backend-app # 아래에서 정의한 Pod 중 'app: backend-app'이라는 값을 가진 파드를 선택
# 배포할 Pod 정의
template:
metadata:
labels: # 레이블 (= 카테고리)
app: backend-app
spec:
containers:
- name: spring-container # 컨테이너 이름
image: spring-server # 컨테이너를 생성할 때 사용할 이미지
imagePullPolicy: IfNotPresent # 로컬에서 이미지를 먼저 가져온다. 없으면 레지스트리에서 가져온다.
ports:
- containerPort: 8080 # 컨테이너에서 사용하는 포트를 명시적으로 표현
## 이 부분!
env:
- name: MY_ACCOUNT
valueFrom:
configMapKeyRef:
name: spring-config # ConfigMap의 이름
key: my-account # ConfigMap에 설정되어 있는 Key값
- name: MY_PASSWORD
valueFrom:
configMapKeyRef:
name: spring-config
key: my-password
📚 시크릿(Secret)을 사용해 '민감한 값'을 환경변수로 분리하기
- 시크릿(Secret)은 컨피그맵과 비슷하게 환경 변수를 분리해서 관리하는 오브젝트이다.
- 시크릿과 컨피그맵의 차이점은 비밀번호와 같이 보안적으로 중요한 값을 관리하기 위해서 시크릿이 사용된다고 이해하면 된다.
apiVersion: v1
kind: Secret
# Secret 기본 정보
metadata:
name: spring-secret # Secret 이름
# Key, Value 형식으로 값 저장
stringData:
my-password: my-secret-password
apiVersion: apps/v1
kind: Deployment
# Deployment 기본 정보
metadata:
name: spring-deployment # Deployment 이름
# Deployment 세부 정보
spec:
replicas: 5 # 생성할 파드의 복제본 개수
selector:
matchLabels:
app: backend-app # 아래에서 정의한 Pod 중 'app: backend-app'이라는 값을 가진 파드를 선택
# 배포할 Pod 정의
template:
metadata:
labels: # 레이블 (= 카테고리)
app: backend-app
spec:
containers:
- name: spring-container # 컨테이너 이름
image: spring-server # 컨테이너를 생성할 때 사용할 이미지
imagePullPolicy: IfNotPresent # 로컬에서 이미지를 먼저 가져온다. 없으면 레지스트리에서 가져온다.
ports:
- containerPort: 8080 # 컨테이너에서 사용하는 포트를 명시적으로 표현
env:
- name: MY_ACCOUNT
valueFrom:
configMapKeyRef:
name: spring-config # ConfigMap의 이름
key: my-account # ConfigMap에 설정되어 있는 Key값
- name: MY_PASSWORD
valueFrom:
## 이 부분!
secretKeyRef:
name: spring-secret
key: my-password