쿠버네티스에서 ConfigMap과 Secret은 애플리케이션의 설정을 외부에서 관리하는 핵심 기능입니다.
이번 글에서는 ConfigMap을 활용한 환경 변수 설정 방법과 Secret을 이용한 보안 정보 관리 방법을 다룹니다.
📌 글에서 다루는 상황들
1️⃣ ConfigMap을 활용한 환경 변수 설정
2️⃣ Secret을 이용한 보안 정보 관리
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ ConfigMap을 활용한 환경 변수 설정
❓ 문제 상황
운영팀에서 애플리케이션이 실행될 때 특정 환경 변수를 외부에서 설정할 수 있도록 구성해야 합니다.
애플리케이션의 설정 값을 직접 코드에 넣지 않고 ConfigMap을 통해 관리해야 합니다.
• ConfigMap의 이름은 app-config이어야 합니다.
• DATABASE_URL과 APP_MODE 환경 변수를 설정해야 합니다.
• app-config를 Pod의 환경 변수로 주입해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. ConfigMap을 생성하여 환경 변수를 정의해야 합니다.
• DATABASE_URL, APP_MODE 값을 설정
2. Pod에서 ConfigMap을 환경 변수로 사용하도록 설정해야 합니다.
• envFrom.configMapRef.name을 사용하여 환경 변수 전체 적용
✅ 정답 Manifest (ConfigMap 적용된 Deployment & ConfigMap)
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config # ConfigMap 이름
data:
DATABASE_URL: "mysql://db:3306/mydatabase" # 데이터베이스 주소
APP_MODE: "production" # 운영 모드
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment # Deployment 이름
spec:
replicas: 1 # 단일 인스턴스 실행
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest # 애플리케이션 이미지
envFrom:
- configMapRef:
name: app-config # ConfigMap을 환경 변수로 사용
📌 적용 후 예상 결과 값
1. ConfigMap 생성 확인
kubectl get configmap
💡 예상 출력 값
NAME DATA AGE
app-config 2 5s
2. Pod 내부에서 환경 변수 확인
kubectl exec -it <POD_NAME> -- env | grep DATABASE_URL
💡 예상 출력 값
DATABASE_URL=mysql://db:3306/mydatabase
2️⃣ Secret을 이용한 보안 정보 관리
❓ 문제 상황
운영팀에서 애플리케이션이 중요한 보안 정보를 안전하게 관리할 수 있도록 설정해야 합니다.
애플리케이션이 데이터베이스 접속 정보를 환경 변수로 사용할 수 있어야 합니다.
• Secret의 이름은 db-secret이어야 합니다.
• DB_USER와 DB_PASSWORD 값을 설정해야 합니다.
• db-secret을 Pod의 환경 변수로 주입해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Secret을 생성하여 보안 정보를 저장해야 합니다.
• DB_USER, DB_PASSWORD 값을 Base64 인코딩하여 저장
2. Pod에서 Secret을 환경 변수로 사용하도록 설정해야 합니다.
• envFrom.secretRef.name을 사용하여 환경 변수 적용
✅ 정답 Manifest (Secret 적용된 Deployment & Secret)
apiVersion: v1
kind: Secret
metadata:
name: db-secret # Secret 이름
type: Opaque
data:
DB_USER: "dXNlcm5hbWU=" # Base64 인코딩된 "username"
DB_PASSWORD: "c2VjcmV0cGFzc3dvcmQ=" # Base64 인코딩된 "secretpassword"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment-secure # Deployment 이름
spec:
replicas: 1 # 단일 인스턴스 실행
selector:
matchLabels:
app: secure-app
template:
metadata:
labels:
app: secure-app
spec:
containers:
- name: secure-app
image: secure-app:latest # 애플리케이션 이미지
envFrom:
- secretRef:
name: db-secret # Secret을 환경 변수로 사용
📌 적용 후 예상 결과 값
1. Secret 생성 확인
kubectl get secret
💡 예상 출력 값
NAME TYPE DATA AGE
db-secret Opaque 2 5s
2. Pod 내부에서 환경 변수 확인 (Base64 디코딩된 값)
kubectl exec -it <POD_NAME> -- env | grep DB_USER
💡 예상 출력 값
DB_USER=username