들어가며: Pod에 환경 정보를 전달하려면?
쿠버네티스를 운영하다 보면 **애플리케이션 설정값(환경변수)**이나 비밀번호, API 키 같은 민감한 정보를 Pod에 전달해야 할 때가 많습니다.
이런 데이터를 Pod 이미지 안에 하드코딩하거나 YAML에 직접 넣는 것은 보안과 유지보수 측면에서 매우 위험합니다.
이 문제를 해결하는 Kubernetes의 솔루션이 바로 ConfigMap과 Secret입니다.
이번 글에서는 다음 내용을 다룹니다:
- ConfigMap과 Secret의 차이점
- 환경변수, 파일 마운트를 통한 정보 전달 방법
- 보안 정보를 안전하게 관리하는 팁
- 실습 가능한 YAML 예시
1. ConfigMap이란?
ConfigMap은 비민감한 설정 데이터를 Key-Value 형태로 관리하는 리소스입니다.
- 애플리케이션의 설정값(예:
DB_HOST
,APP_MODE
)을 Pod와 분리하여 관리 가능 - 환경변수나 설정파일로 Pod에 전달 가능
- 이미지 변경 없이 설정 변경 가능
ConfigMap 생성 예시
kubectl create configmap app-config \
--from-literal=APP_MODE=production \
--from-literal=DB_HOST=db-service
또는 YAML로 정의:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
APP_MODE: "production"
DB_HOST: "db-service"
2. Secret이란?
Secret은 **민감한 데이터(비밀번호, 토큰, 인증서 등)**를 저장하기 위한 리소스입니다.
- ConfigMap과 사용법은 거의 같지만, 데이터는 Base64로 인코딩되어 저장됩니다.
- Kubernetes 내에서 etcd를 통해 암호화 가능(보안성 강화).
Secret 생성 예시
kubectl create secret generic db-secret \
--from-literal=DB_USER=admin \
--from-literal=DB_PASS=securepass
또는 YAML로 정의:
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
DB_USER: YWRtaW4= # base64 인코딩된 'admin'
DB_PASS: c2VjdXJlcGFzcw== # base64 인코딩된 'securepass'
3. Pod에 ConfigMap/Secret 전달하기
1) 환경변수로 전달
apiVersion: v1
kind: Pod
metadata:
name: env-pod
spec:
containers:
- name: app
image: nginx
env:
- name: APP_MODE
valueFrom:
configMapKeyRef:
name: app-config
key: APP_MODE
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-secret
key: DB_USER
2) 파일로 마운트하기 (Volume 사용)
apiVersion: v1
kind: Pod
metadata:
name: file-pod
spec:
containers:
- name: app
image: nginx
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: app-config
Pod 내부 /etc/config
디렉토리에 ConfigMap 데이터가 파일 형태로 저장됩니다.
4. ConfigMap vs Secret 비교
항목 | ConfigMap | Secret |
---|---|---|
데이터 종류 | 일반 설정 데이터 | 민감 데이터 (비번 등) |
저장 형태 | 평문 | Base64 인코딩 |
사용 방법 | 환경변수/파일 | 환경변수/파일 |
보안 수준 | 낮음 | 높음 (etcd 암호화 가능) |
5. ConfigMap & Secret 관리 팁
- 민감한 데이터는 무조건 Secret 사용
- Git 저장소에 평문 비밀번호를 넣지 말고, kubectl 명령어 또는 Secret Manager를 활용
- ConfigMap/Secret 변경 시 Rolling Update가 자동 적용되도록 Deployment와 함께 관리
- Helm, Kustomize 등을 이용해 ConfigMap과 Secret을 환경별로 템플릿화하는 것을 추천
6. FAQ (Answer Engine Optimization)
Q1. ConfigMap과 Secret을 동시에 사용할 수 있나요?
A. 네, 일반 설정은 ConfigMap, 민감 정보는 Secret으로 분리해 Pod에 동시에 전달할 수 있습니다.
Q2. Secret 값은 안전한가요?
A. 기본적으로 Base64 인코딩이지만, etcd 암호화 및 RBAC(Role-Based Access Control)로 접근을 제한해 보안을 강화할 수 있습니다.
Q3. ConfigMap이나 Secret이 변경되면 Pod가 자동으로 갱신되나요?
A. 기본 Pod는 자동 갱신되지 않습니다. Deployment와 함께 Rolling Update 또는 재배포를 통해 반영하는 것이 일반적입니다.
7. 핵심 요약
개념 | 설명 |
---|---|
ConfigMap | 일반 설정 데이터 저장용 |
Secret | 민감 정보 저장용 |
전달 방식 | 환경변수, 파일 마운트 |
보안 관리 | RBAC, etcd 암호화 활용 |
운영 팁 | Helm/Kustomize로 환경별 템플릿화 |
마무리
Pod에 정보를 전달하는 ConfigMap과 Secret은 Kubernetes 환경에서 유연하고 안전한 애플리케이션 배포의 핵심입니다.
'개발 창고 > Server' 카테고리의 다른 글
Pod 살펴보기 - Part6: 컨테이너 한 개로는 부족해 (2) | 2025.07.24 |
---|---|
Pod 리소스 관리: Requests, Limits, QoS 완벽 이해하기 (2) | 2025.07.23 |
Pod 데이터 저장소 연결하기: Kubernetes 볼륨(Volume) 완벽 가이드 (2) | 2025.07.21 |
Pod 라벨링 시스템 이해하기: 왜 Kubernetes에서 라벨이 중요한가? (3) | 2025.07.20 |
핵심 리소스, Pod: 쿠버네티스 기본 단위 이해하기 (3) | 2025.07.19 |