IT_Study/Ops

[Kubernetes] Object : ConfigMap, Secret

__Vivacé__ 2025. 6. 9. 02:11

4. ConfigMap, Secret

개발환경과 운영환경마다 필요한 설정 값(예: 접근 유저, 인증 키, SSH 설정 등)이 다르다.

이런 값들을 이미지에 하드코딩하면, 환경이 바뀔 때마다 이미지를 새로 만들어야 해서 비효율적이다.

 

그래서 설정 값을 관리하는 ConfigMap과 Secret을 활용하면, 운영/개발 환경별로 필요한 값(예: 접근 모드, 사용자 계정, 인증키 등)을 이미지와 분리해 효율적으로 관리할 수 있다.

 

ConfigMap : 애플리케이션의 일반 환경설정(예: 접근 모드, 사용자 이름, SSH 설정 등)처럼 민감하지 않은 데이터를 외부에서 관리하는 Kubernetes 오브젝트

 

Secret : 비밀번호, 인증키, SSH Key 등 보안이 필요한 민감한 정보를 외부에서 안전하게 관리하는 Kubernetes 오브젝트

 

ConfigMap, Secret과 관련된 개념 ❘ https://inf.run/yW34

 

 

 

ConfigMap과 Secret의 데이터는 Pod에 환경변수(env), 파일 환경변수, 또는 볼륨 마운트 방식으로 전달할 수 있다.

 

 


1. Env (Literal)

가장 기본적인 형태로, ConfigMap과 Secret의 키-값 상수 데이터를 환경변수로 전달하는 방식

특징
- 환경변수 방식은 디스크에 파일로 저장되지 않아 상대적으로 보안에 유리함
    - Pod가 k8s API 서버(etcd)에 저장된 Secret 데이터를 실제 사용 시, 데이터를 파일 형태가 아닌 환경변수로 전달하여 Pod 컨테이너 내부 메모리에 로드
        - 저장 용량은 1MB 이하 제한 (너무 많으면 시스템 자원에 영향을 끼침)
    - Secret은 API 서버에 base64 인코딩된 상태로 저장되며, 컨테이너에서는 자동 디코딩됨
        - 값 생성 시 base64로 수동 변환해서 저장해야 함
- 여러 key=value를 한 번에 주입하려면 `envFrom`(configMapRef / secretRef) 사용

 

YAML 파일로 작성 후, kubectl 명령어로 apply 진행

 


2. Env (File)

 

로컬 파일 내용 전체를 ConfigMap·Secret 에 저장하고, 그 값을 환경변수로 주입하는 방식  

특징
- 파일 이름이 key, 내부 텍스트가 value 문자열로 저장됨
    - 만들 때 **--from-file** 옵션 사용 (대시보드에서 지원 x)
        (예) `kubectl create configmap cm-file --from-file=./file.txt`
        (예) `kubectl create secret generic sec-file --from-file=./file.txt`
- Secret 은 커맨드가 내용을 자동 Base64 인코딩 → 이미 Base64 파일이면 이중 인코딩에 주의
- 주입은 Env(Literal) 과 동일한 `env:`/`valueFrom` 패턴
- 파드가 뜨면 값은 컨테이너 메모리(환경변수) 로만 존재 → 디스크에 파일 미생성
- 1 MB 제한은 그대로 적용; 파일이 크거나 여러 개면 Volume Mount 방식을 권장

 


3. Volume Mount (File)

ConfigMap과 Secret 안에 저장된 파일을 Pod 컨테이너 파일시스템에 볼륨(읽기 전용)으로 마운트해 사용하는 방식

*읽기 전용이라는 뜻은 컨테이너 프로세스가 파일 write 권한이 없다는 것을 의미

특징
- 컨테이너는 진짜 파일을 읽듯 사용하므로 ini, yaml, cert 등 다중/대용량 설정에 적합
- ConfigMap&Secret을 수정하면 자동으로 파일 내용이 교체
    - `env` 방식은 원본을 수정해도 실행 중인 Pod에는 반영되지 않음 (재시작해야 반영)
- Secret 은 tmpfs(메모리 파일시스템), ConfigMap 은 노드 임시 디스크에 작성 후 마운트
- 읽기 전용이므로 컨테이너가 파일을 수정해도 원본에는 반영되지 않음