Kubernetes · Concepts ·
[Kubernetes] ConfigMap과 Secret 완벽 이해 (환경변수, 설정 관리)
☸️ Kubernetes ConfigMap & Secret 이해하기 #
컨테이너 기반 애플리케이션을 운영하다 보면
애플리케이션 코드와 **설정(Configuration)**을 분리해야 하는 상황이 자주 발생합니다.
예를 들어 다음과 같은 설정들이 있습니다.
- 데이터베이스 주소
- API Endpoint
- 환경 변수
- 인증 키
이러한 설정을 이미지에 포함시키면 문제가 발생합니다.
- 환경별 설정 관리 어려움
- 이미지 재빌드 필요
- 보안 문제 발생
Kubernetes에서는 이 문제를 해결하기 위해 ConfigMap과 Secret을 제공합니다.
Kubernetes 설정 관리 구조 #
ConfigMap과 Secret은 Pod 외부에서 설정을 관리하는 리소스입니다.
graph TD A[ConfigMap] B[Secret] A --> C[Pod] B --> C
Pod는 실행될 때 ConfigMap과 Secret 값을 주입받아 사용합니다.
ConfigMap #
ConfigMap은 일반적인 설정 데이터를 저장하는 Kubernetes 리소스입니다.
예를 들어
- 환경 변수
- 설정 파일
- application.yml
등을 저장할 수 있습니다.
ConfigMap 생성 방법 #
CLI 방식 #
1kubectl create configmap app-config \
2 --from-literal=APP_ENV=productionYAML 방식 #
1apiVersion: v1
2kind: ConfigMap
3metadata:
4 name: app-config
5
6data:
7 APP_ENV: production
8 LOG_LEVEL: infoConfigMap 사용 방법 #
ConfigMap은 Pod에서 다음 방식으로 사용할 수 있습니다.
- 환경 변수
- 파일 마운트
환경 변수로 사용 #
1apiVersion: v1
2kind: Pod
3metadata:
4 name: example-pod
5
6spec:
7 containers:
8 - name: app
9 image: nginx
10
11 env:
12 - name: APP_ENV
13 valueFrom:
14 configMapKeyRef:
15 name: app-config
16 key: APP_ENVPod 실행 시 다음 환경 변수가 생성됩니다.
APP_ENV=productionConfigMap 파일 마운트 #
ConfigMap을 파일 형태로 마운트할 수도 있습니다.
graph TD A[ConfigMap] A --> B[Volume] B --> C[Pod Container]
YAML 예시
1volumes:
2- name: config-volume
3 configMap:
4 name: app-configSecret #
Secret은 민감한 정보를 저장하는 Kubernetes 리소스입니다.
대표적인 예
- DB Password
- API Key
- TLS Certificate
- OAuth Token
ConfigMap vs Secret 차이 #
| 항목 | ConfigMap | Secret |
|---|---|---|
| 데이터 | 일반 설정 | 민감 정보 |
| 인코딩 | 평문 | Base64 |
| 보안 | 낮음 | 상대적으로 높음 |
Secret 생성 방법 #
CLI 방식 #
1kubectl create secret generic db-secret \
2 --from-literal=password=mysecretpasswordYAML 방식 #
Secret은 Base64 인코딩을 사용합니다.
예시
1echo -n "mypassword" | base64결과
bXlwYXNzd29yZA==YAML 예시
1apiVersion: v1
2kind: Secret
3metadata:
4 name: db-secret
5
6type: Opaque
7
8data:
9 password: bXlwYXNzd29yZA==Secret 사용 방법 #
Secret도 ConfigMap과 동일하게 Pod에 주입할 수 있습니다.
1env:
2- name: DB_PASSWORD
3
4 valueFrom:
5 secretKeyRef:
6 name: db-secret
7 key: passwordSecret 파일 마운트 #
Secret을 파일 형태로도 사용할 수 있습니다.
graph TD A[Secret] A --> B[Volume] B --> C[Pod Container]
대표적인 사용 사례
- TLS 인증서
- SSH Key
Kubernetes 설정 관리 흐름 #
전체 구조는 다음과 같습니다.
graph TD A[ConfigMap] B[Secret] A --> C[Pod] B --> C C --> D[Application]
즉 애플리케이션은 Pod 환경 변수나 파일을 통해 설정을 읽습니다.
정리 #
Kubernetes 설정 관리 핵심
ConfigMap #
- 일반 설정 데이터 저장
- 환경 변수 / 파일 형태 사용
Secret #
- 민감 정보 저장
- Base64 인코딩 사용
사용 목적 #
- 애플리케이션 설정 분리
- 보안 관리
- 환경별 설정 관리
Advertisement