쿠버네티스에서 애플리케이션의 설정을 분리하여 관리하는 두 가지 주요 리소스가 ConfigMap과 Secret입니다. 이 두 가지는 환경 설정 값을 Pod에 주입하는 데 사용되지만, 중요한 차이점이 있습니다. 이번 포스팅에서는 ConfigMap과 Secret의 차이점, 사용 방법, 주의할 점 등을 정리해 보겠습니다.
🔹 1. ConfigMap이란?
ConfigMap은 애플리케이션에서 사용하는 설정 데이터를 저장하는 쿠버네티스 리소스입니다. 일반적으로 환경 변수, 설정 파일, 커맨드라인 인자 등을 저장하는 용도로 사용됩니다.
✅ 특징
- 비밀 데이터가 아닌 일반적인 설정 값을 저장함 (예: 데이터베이스 URL, 서비스 포트)
- Key-Value 형태로 데이터를 저장
- Pod 내에서 환경 변수, 파일, 커맨드라인 인자로 주입 가능
📌 ConfigMap 생성 방법
1️⃣ YAML 파일을 이용한 생성
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
APP_ENV: "production"
DATABASE_URL: "mysql://user:password@db:3306/mydb"
📌 ConfigMap을 Pod에 적용하는 방법
1️⃣ 환경 변수로 주입
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
env:
- name: APP_ENV
valueFrom:
configMapKeyRef:
name: my-config
key: APP_ENV
🔹 2. Secret이란?
Secret은 민감한 데이터를 저장하는 쿠버네티스 리소스입니다. ConfigMap과 유사하지만, 비밀번호, API 키, 인증 토큰 등 보안이 필요한 데이터를 저장하는 용도로 사용됩니다.
✅ 특징
- ConfigMap과 유사하지만, Base64 인코딩을 사용하여 데이터를 저장함
- 민감한 정보를 보호하기 위해 Pod에 주입될 때 특정한 보안 메커니즘이 적용됨
- Pod 내에서 환경 변수, 파일, 커맨드라인 인자로 주입 가능
- kubectl get secret을 사용하면 값이 ***로 표시되어 직접 볼 수 없음
📌 Secret 생성 방법
1️⃣ YAML 파일을 이용한 생성
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
DB_PASSWORD: bXlwYXNzd29yZA== # "mypassword"를 Base64 인코딩한 값
API_KEY: dG9wLXNlY3JldC1rZXk=
📌 Secret을 Pod에 적용하는 방법
1️⃣ 환경 변수로 주입
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: DB_PASSWORD
🔹 3. ConfigMap과 Secret의 차이점 비교
| 비교 항목 | ConfigMap | Secret |
| 목적 | 환경 설정값 저장 | 비밀번호, API 키 등 보안 정보 저장 |
| 데이터 저장 방식 | 일반 텍스트 | Base64 인코딩 |
| 데이터 보안 | 보안 없음 | 보안 강화 (Base64 인코딩 + RBAC 적용) |
| 사용 방법 | 환경 변수, 볼륨 마운트 | 환경 변수, 볼륨 마운트 |
| kubectl get 출력 | 평문 표시 | 값이 ***로 숨겨짐 |
🔹 4. ConfigMap과 Secret 사용 시 주의할 점
✅ ConfigMap
- 어플리케이션 설정을 코드에서 분리하여 관리할 수 있음.
- 보안이 필요한 정보는 ConfigMap이 아닌 Secret을 사용할 것.
- Pod가 실행 중일 때 ConfigMap이 변경되면, 즉시 반영되지 않을 수도 있음.
✅ Secret
- Base64는 암호화가 아님! Base64 인코딩된 값은 쉽게 디코딩할 수 있음. (echo "bXlwYXNzd29yZA==" | base64 --decode)
- 보안이 필요한 경우 Kubernetes RBAC(Role-Based Access Control)를 활용하여 접근을 제한할 것.
- 파일 시스템 볼륨 마운트를 이용하면 Secret이 자동으로 업데이트됨 (환경 변수 주입 방식은 Pod 재시작 필요).
🔥 결론
- ConfigMap은 일반적인 설정 정보, Secret은 보안이 필요한 정보를 저장하는 용도!
- ConfigMap과 Secret을 활용하면 코드와 설정을 분리하여 관리할 수 있음.
- Secret은 Base64로 인코딩되지만, 보안 강화를 위해 RBAC 및 암호화 솔루션(KMS 등)과 함께 사용하는 것이 중요!
'DevOps > k8s' 카테고리의 다른 글
| Kubernetes에서 MySQL과 연동하여 볼륨(Persistent Volume) 사용하기 (0) | 2025.02.06 |
|---|---|
| Kubernetes에서 Service란? (0) | 2025.02.04 |
| Docker + GitHub Actions 배포 vs 쿠버네티스 배포 비교 (0) | 2025.02.04 |
| Kubernetes Deployment를 사용하여 여러 개의 Pod 실행하기 (0) | 2025.02.04 |
| 쿠버네티스 기초 명령어 (0) | 2025.01.22 |