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

실습 흐름

  1. kubectl apply -f configmap.yaml
  2. kubectl apply -f secret.yaml
  3. kubectl apply -f deployment.yaml
  4. 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를 재시작해야 한다. 단, 볼륨 마운트로 연결한 경우에는 자동 갱신도 가능하다.