쿠버네티스 (Kubernetes) 주요 개념 컨피그맵(ConfigMap)과 시크릿(Secret)
쿠버네티스에서 컨피그맵(ConfigMap)과 시크릿(Secret)은 파드(Pod)나 컨테이너가 동작할 때 필요한 설정값이나 민감 정보를 코드와 분리하여 안전하고 유연하게 관리하기 위한 리소스입니다.
1. 컨피그맵(ConfigMap)
1.1 개념
- 정의
컨피그맵은 애플리케이션 설정 정보를 저장하기 위한 오브젝트입니다.
예: 데이터베이스 접속 정보(호스트, 포트), 환경 변수(ENV), 설정 파일 내용 등 - 특징
    
- 민감하지 않은 일반 설정 정보를 저장합니다.
 - 파드에서 파일, 환경 변수, 커맨드 라인 인수 등 다양한 형태로 주입 가능
 - 컨테이너 이미지를 다시 빌드하지 않고, 설정 정보만 교체하여 재시작해도 반영이 가능
 
 
1.2 사용 예시
apiVersion: v1
kind: ConfigMap
metadata:
  name: example-config
data:
  # 단순 키-값 형태
  APP_ENV: "production"
  # 파일 형태도 저장 가능
  config.json: |
    {
      "debug": false,
      "max_retry": 5
    }
- data 섹션에 키-값 쌍 형태로 설정을 보관
 - JSON, properties, plain text 등 다양한 형식으로 설정 가능
 
1.3 파드에서 사용하는 방법
- 
    
환경 변수로 주입하기
env: - name: APP_ENV valueFrom: configMapKeyRef: name: example-config key: APP_ENV - 
    
볼륨(파일)로 마운트하기
volumes: - name: config-volume configMap: name: example-config volumeMounts: - name: config-volume mountPath: "/etc/config" - 
    
커맨드 라인 인수로 전달하기 등
 
2. 시크릿(Secret)
2.1 개념
- 정의
시크릿은 민감 정보(패스워드, API 키, 인증서 등)를 안전하게 저장하고 파드에 전달하기 위한 오브젝트입니다. - 특징
    
- 컨피그맵과 유사하지만, 정보가 base64 인코딩되어 저장
 - 예를 들어 GitHub 액세스 토큰, DB 비밀번호 등 외부에 노출되면 안 되는 정보
 - 일반 컨피그맵보다 접근 권한(RBAC, ACL 등)을 더욱 엄격하게 제어하는 것이 바람직
 
 
2.2 사용 예시
apiVersion: v1
kind: Secret
metadata:
  name: example-secret
type: Opaque
data:
  username: YWRtaW4=    # "admin"을 base64 인코딩
  password: cGFzc3dvcmQ= # "password"를 base64 인코딩
- data 필드에 key-value 형태로 base64 인코딩된 데이터를 저장
 - type은 
Opaque가 일반적이며, TLS 인증서 시크릿의 경우kubernetes.io/tls등도 가능 
2.3 파드에서 사용하는 방법
- 
    
환경 변수로 사용
env: - name: DB_USER valueFrom: secretKeyRef: name: example-secret key: username - name: DB_PASS valueFrom: secretKeyRef: name: example-secret key: password - 
    
파일로 마운트 (볼륨)
volumes: - name: secret-volume secret: secretName: example-secret volumeMounts: - name: secret-volume mountPath: "/etc/secret" readOnly: true - 
    
TLS 인증서로 사용 (Ingress, HTTPS 서버 등)
 
3. 컨피그맵(ConfigMap)과 시크릿(Secret) 비교
| 구분 | 컨피그맵(ConfigMap) | 시크릿(Secret) | 
|---|---|---|
| 주요 목적 | 민감하지 않은 설정정보 저장 및 관리 | 민감 정보(패스워드, 인증서 등) 안전하게 관리 | 
| 데이터 저장 형태 | 일반 텍스트 (base64 인코딩 없이 평문) | base64로 인코딩하여 저장 | 
| 대표 사용 예 | 일반 설정, 환경 변수, 설정 파일(JSON, properties, etc.) | DB 비밀번호, API 토큰, TLS 인증서, SSH 키 등 | 
| 암호화/권한 | 일반적으로 Secret보다 보안 요구 사항이 낮음 | 접근 권한(RBAC) 철저하게 관리, KMS/Encryption 사용 권장 | 
| 파드 적용 방법 | 환경 변수, 볼륨, 커맨드 인수 등 | 환경 변수, 볼륨(읽기 전용), 인증서로도 사용 가능 | 
4. 보안 및 운영 팁
- RBAC(롤/롤바인딩) 활용
    
- 시크릿이나 컨피그맵에 대한 접근 권한을 최소화(Least Privilege)
 - 시크릿은 특히 민감 정보이므로 접근 가능한 대상(사용자, 서비스 계정 등)을 엄격히 제한
 
 - Encryption at Rest
    
- 쿠버네티스 1.7+ 버전에서는 etcd에 저장되는 Secret 데이터를 암호화할 수 있음
 - 클러스터에서 암호화 기능을 켜서 시크릿이 평문으로 노출되지 않도록 함
 
 - GitOps 환경에서의 관리
    
- 시크릿은 민감 정보를 담고 있으므로 코드 저장소에 평문(plain text)으로 보관하지 않도록 주의
 - Sealed Secrets(주키퍼, HashiCorp Vault 등) 같은 솔루션을 사용해 암호화된 형태로 저장 가능
 
 - 주기적인 로테이션(Rotation)
    
- 비밀번호, 토큰 등은 주기적으로 갱신하여 보안을 강화
 - 자동 로테이션 방법: 외부 비밀 관리 시스템(Vault) 연동
 
 
5. 요약
- 
    
컨피그맵(ConfigMap):
- 일반 설정을 애플리케이션 로직과 분리
 - 컨테이너 이미지를 재빌드하지 않고도 설정 변경 가능
 - 주로 환경 변수, 설정 파일 등을 담음
 
 - 
    
시크릿(Secret):
- 민감 정보를 안전하게 보관하고 파드에 주입
 - base64로 인코딩해 저장하므로 GitHub 등에서 평문 노출을 방지
 - 주로 비밀번호, 인증 토큰, TLS 인증서 등을 담음
 
 
두 리소스 모두 파드와 독립적으로 변경 가능한 동적 설정이라는 점이 핵심이며, 이를 통해 CI/CD 파이프라인에서 설정 변경 최소화, 보안 강화 등을 달성할 수 있습니다.
이처럼 컨피그맵과 시크릿은 쿠버네티스가 애플리케이션 설정·비밀 관리를 유연하고 안전하게 처리하도록 해주는 중요한 도구입니다.
댓글남기기