Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.15] 🚀 ConfigMap & Secret 편 #2 | 볼륨 마운트 및 애플리케이션 설정 파일 적용

ygtoken 2025. 3. 16. 14:28
728x90

 

쿠버네티스에서 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
728x90