4. ConfigMap, Secret
개발환경과 운영환경마다 필요한 설정 값(예: 접근 유저, 인증 키, SSH 설정 등)이 다르다.
이런 값들을 이미지에 하드코딩하면, 환경이 바뀔 때마다 이미지를 새로 만들어야 해서 비효율적이다.
그래서 설정 값을 관리하는 ConfigMap과 Secret을 활용하면, 운영/개발 환경별로 필요한 값(예: 접근 모드, 사용자 계정, 인증키 등)을 이미지와 분리해 효율적으로 관리할 수 있다.
ConfigMap : 애플리케이션의 일반 환경설정(예: 접근 모드, 사용자 이름, SSH 설정 등)처럼 민감하지 않은 데이터를 외부에서 관리하는 Kubernetes 오브젝트
Secret : 비밀번호, 인증키, SSH Key 등 보안이 필요한 민감한 정보를 외부에서 안전하게 관리하는 Kubernetes 오브젝트
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 은 노드 임시 디스크에 작성 후 마운트
- 읽기 전용이므로 컨테이너가 파일을 수정해도 원본에는 반영되지 않음
'IT_Study > Ops' 카테고리의 다른 글
[Kubernetes] Object : Volume (2) | 2025.04.18 |
---|---|
[Kubernetes] Object : Service (0) | 2025.04.17 |
[Kubernetes] Object : Pod (0) | 2025.04.17 |
[Kubernetes] Kubernetes 구조 및 기능과 역할 (0) | 2025.04.15 |
[Kubernetes] 가상화 기술의 history 및 Virtual Machine과 Container의 차이 (0) | 2025.04.14 |