- Published on
6단계: ConfigMap & Secret
ConfigMap이란?
- 환경 변수, 설정 파일 등 비민감 구성 데이터를 외부에서 주입하기 위한 리소스
- 애플리케이션 코드 수정 없이 설정만 바꿔서 재배포 가능
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
APP_MODE: production
LOG_LEVEL: debug
Secret이란?
- DB 비밀번호, API 토큰 등 민감 정보를 저장하고 주입하는 리소스
- base64로 인코딩하여 저장
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
DB_USER: cG90ZW4=
DB_PASS: cG90ZW4uY28ua3I=
Pod에 적용하기
containers:
- name: app
image: myapp
env:
- name: APP_MODE
valueFrom:
configMapKeyRef:
name: my-config
key: APP_MODE
- name: DB_PASS
valueFrom:
secretKeyRef:
name: my-secret
key: DB_PASS
실습 흐름
kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml
kubectl apply -f deployment.yaml
kubectl exec
로 Pod 내부에서 env 값 확인
요약
- ConfigMap: 민감하지 않은 구성값
- Secret: 민감한 정보
- 둘 다 Pod 환경 변수나 볼륨으로 주입 가능하며, 보안 및 설정 분리 목적에 맞게 구분해서 사용
심화학습
Q1: ConfigMap과 Secret은 YAML 구조상 어떤 차이가 있는가?
A: ConfigMap은 data
키에 일반 문자열을 사용하고, Secret은 type: Opaque
와 함께 data
필드에 base64로 인코딩된 값을 사용한다.
Q2: Secret이 base64 인코딩만으로는 안전하지 않은 이유는?
A: base64는 암호화가 아닌 단순 인코딩이기 때문에 쉽게 디코딩 가능하다. 암호화나 접근 제어(예: RBAC)를 병행해야 한다.
Q3: ConfigMap이나 Secret이 변경되면 실행 중인 Pod는 자동으로 반영될까?
A: 기본적으로는 반영되지 않으며, 변경사항을 적용하려면 Pod를 재시작해야 한다. 단, 볼륨 마운트로 연결한 경우에는 자동 갱신도 가능하다.