Skip to main content

ConfigMap, Secret & Configuration

설정과 시크릿을 컨테이너 이미지에서 분리


1. ConfigMap

1.1 비민감 설정 데이터를 Pod에 주입

# literal로 생성
kubectl create configmap app-config \
--from-literal=DB_HOST=db-service \
--from-literal=LOG_LEVEL=info

# 파일로 생성
kubectl create configmap nginx-conf --from-file=nginx.conf

1.2 주입 방법

환경변수:

env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: app-config
key: DB_HOST
# 또는 전체 주입
envFrom:
- configMapRef:
name: app-config

볼륨 마운트:

volumes:
- name: config
configMap:
name: nginx-conf
volumeMounts:
- name: config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf

볼륨 마운트 시 ConfigMap이 업데이트되면 자동 반영 (환경변수는 Pod 재시작 필요).


2. Secret

2.1 민감한 데이터 관리

# 생성
kubectl create secret generic db-secret \
--from-literal=password=MyP@ssw0rd \
--from-literal=username=admin

# TLS Secret
kubectl create secret tls tls-secret \
--cert=tls.crt --key=tls.key
유형용도
Opaque (기본)일반 키-값 (비밀번호, API 키)
kubernetes.io/tlsTLS 인증서
kubernetes.io/dockerconfigjsonDocker Registry 인증
kubernetes.io/service-account-tokenSA 토큰

2.2 보안 주의사항

⚠️ Secret은 기본적으로 Base64 인코딩일 뿐 암호화가 아님.

보안 레벨방법
기본Base64 (누구나 디코딩 가능)
etcd 암호화EncryptionConfiguration으로 etcd에 저장 시 암호화
Sealed Secrets클러스터 공개키로 암호화, Git에 커밋 가능
External SecretsAWS Secrets Manager, Vault 등에서 동적으로 가져옴
VaultHashiCorp Vault CSI Provider

3. Resource Requests & Limits

3.1 리소스 관리

resources:
requests: # 최소 보장량 (스케줄러가 참고)
cpu: "250m" # 0.25 코어
memory: "256Mi"
limits: # 최대 사용량 (초과 시 제한/OOMKill)
cpu: "500m"
memory: "512Mi"
requestslimits
CPU 초과스로틀링 (느려짐)
메모리 초과OOMKill (강제 종료)
스케줄링✅ 기준

3.2 QoS (Quality of Service)

QoS 클래스조건축출 우선순위
Guaranteedrequests = limits (모든 컨테이너)마지막 (가장 안전)
Burstablerequests < limits (일부라도)중간
BestEffortrequests/limits 없음첫 번째 (가장 먼저 축출)

3.3 LimitRange & ResourceQuota

오브젝트범위역할
LimitRange네임스페이스Pod/Container 기본 requests/limits 설정, 최소/최대 제한
ResourceQuota네임스페이스전체 리소스 상한 (총 CPU, 메모리, Pod 수, PVC 수)
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
namespace: dev
spec:
hard:
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "8"
limits.memory: 16Gi
pods: "20"

다음 글

→ #7 RBAC & Security


📝 참고 자료