Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.14] 🚀 ConfigMap & Secret 편 #1 | 환경 설정 관리

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

 

쿠버네티스에서 ConfigMap과 Secret은 애플리케이션의 설정을 외부에서 관리하는 핵심 기능입니다.

이번 글에서는 ConfigMap을 활용한 환경 변수 설정 방법과 Secret을 이용한 보안 정보 관리 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1️⃣ ConfigMap을 활용한 환경 변수 설정

2️⃣ Secret을 이용한 보안 정보 관리

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ ConfigMap을 활용한 환경 변수 설정

 

❓ 문제 상황

 

운영팀에서 애플리케이션이 실행될 때 특정 환경 변수를 외부에서 설정할 수 있도록 구성해야 합니다.

애플리케이션의 설정 값을 직접 코드에 넣지 않고 ConfigMap을 통해 관리해야 합니다.

ConfigMap의 이름은 app-config이어야 합니다.

DATABASE_URLAPP_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_USERDB_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
728x90