[Scenario Playbook Ep.15] 🚀 ConfigMap & Secret 편 #2 | 볼륨 마운트 및 애플리케이션 설정 파일 적용
쿠버네티스에서 ConfigMap과 Secret은 환경 변수를 넘어서, 설정 파일을 관리하는 용도로도 활용될 수 있습니다.
이번 글에서는 ConfigMap과 Secret을 볼륨 마운트하여 애플리케이션 설정 파일을 직접 제공하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1️⃣ ConfigMap을 볼륨 마운트하여 설정 파일 적용
2️⃣ Secret을 볼륨 마운트하여 보안 파일 적용
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ ConfigMap을 볼륨 마운트하여 설정 파일 적용
❓ 문제 상황
운영팀에서 애플리케이션의 환경 설정을 ConfigMap 파일로 관리해야 하는 요구사항이 생겼습니다.
이 설정 파일은 Pod 내부의 특정 디렉터리에 마운트되어 애플리케이션이 참조할 수 있도록 구성해야 합니다.
• ConfigMap의 이름은 app-config-file이어야 합니다.
• config.json 파일을 ConfigMap에 저장해야 합니다.
• Pod 내부의 /etc/config/ 디렉터리에 설정 파일을 마운트해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. ConfigMap을 생성하여 JSON 설정 파일을 저장해야 합니다.
• config.json 파일을 key-value 형식으로 저장
2. Pod에서 ConfigMap을 볼륨으로 마운트하여 설정 파일을 제공해야 합니다.
• volumes 섹션을 사용하여 특정 디렉터리에 ConfigMap을 마운트
✅ 정답 Manifest (ConfigMap 파일을 마운트하는 Deployment & ConfigMap)
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config-file # ConfigMap 이름
data:
config.json: |
{
"database_url": "mysql://db:3306/mydatabase",
"log_level": "info"
}
---
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
volumeMounts:
- name: config-volume
mountPath: /etc/config # 설정 파일을 마운트할 디렉터리
volumes:
- name: config-volume
configMap:
name: app-config-file # ConfigMap을 볼륨으로 마운트
📌 적용 후 예상 결과 값
1. ConfigMap 생성 확인
kubectl get configmap
💡 예상 출력 값
NAME DATA AGE
app-config-file 1 5s
2. Pod 내부에서 설정 파일 확인
kubectl exec -it <POD_NAME> -- cat /etc/config/config.json
💡 예상 출력 값
{
"database_url": "mysql://db:3306/mydatabase",
"log_level": "info"
}
2️⃣ Secret을 볼륨 마운트하여 보안 파일 적용
❓ 문제 상황
운영팀에서 보안 관련 설정을 Secret 파일로 관리해야 하는 요구사항이 생겼습니다.
이 보안 파일은 Pod 내부의 특정 디렉터리에 마운트되어 애플리케이션이 참조할 수 있도록 구성해야 합니다.
• Secret의 이름은 db-credentials이어야 합니다.
• db-password.txt 파일을 Secret에 저장해야 합니다.
• Pod 내부의 /etc/credentials/ 디렉터리에 마운트해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Secret을 생성하여 보안 파일을 저장해야 합니다.
• db-password.txt 파일을 key-value 형식으로 저장
2. Pod에서 Secret을 볼륨으로 마운트하여 보안 파일을 제공해야 합니다.
• volumes 섹션을 사용하여 특정 디렉터리에 Secret을 마운트
✅ 정답 Manifest (Secret 파일을 마운트하는 Deployment & Secret)
apiVersion: v1
kind: Secret
metadata:
name: db-credentials # Secret 이름
type: Opaque
data:
db-password.txt: "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
volumeMounts:
- name: credentials-volume
mountPath: /etc/credentials # 보안 파일을 마운트할 디렉터리
readOnly: true # 보안 파일이므로 읽기 전용 설정
volumes:
- name: credentials-volume
secret:
secretName: db-credentials # Secret을 볼륨으로 마운트
📌 적용 후 예상 결과 값
1. Secret 생성 확인
kubectl get secret
💡 예상 출력 값
NAME TYPE DATA AGE
db-credentials Opaque 1 5s
2. Pod 내부에서 보안 파일 확인
kubectl exec -it <POD_NAME> -- cat /etc/credentials/db-password.txt
💡 예상 출력 값
secretpassword