Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Low Level #4] 환경 변수(ConfigMap, Secret)를 활용한 애플리케이션 설정 관리

ygtoken 2025. 3. 16. 18:53
728x90

 

애플리케이션을 배포할 때 환경 변수는 중요한 설정 요소입니다.

특히, 설정 값(ConfigMap)과 보안 정보(Secret)를 안전하게 관리하는 방법이 필요합니다.

이 글에서는 환경 변수를 활용하여 애플리케이션을 설정하는 다양한 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. 환경 변수를 직접 설정하여 애플리케이션에 주입하기

2. ConfigMap을 활용한 애플리케이션 설정값 관리

3. Secret을 활용한 민감한 데이터(비밀번호, API 키 등) 보호

 

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

 


1️⃣ 환경 변수를 직접 설정하여 애플리케이션에 주입하기

 

❓ 문제 상황

 

운영팀에서 애플리케이션이 실행될 때 특정 환경 변수를 주입해야 합니다.

Pod 내부에서 환경 변수를 확인할 수 있도록 설정해야 합니다.

환경 변수:

APP_ENV=production

APP_DEBUG=false

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Pod 내에서 환경 변수를 직접 설정하여 애플리케이션이 접근할 수 있도록 합니다.

 

2. kubectl exec 명령어를 사용하여 환경 변수가 정상적으로 적용되었는지 확인합니다.

 


✅ 정답 Manifest (환경 변수 직접 설정)

apiVersion: v1
kind: Pod
metadata:
  name: env-pod
spec:
  containers:
  - name: app-container
    image: nginx
    env:
    - name: APP_ENV
      value: "production"  # 환경 변수 설정
    - name: APP_DEBUG
      value: "false"  # 디버그 모드 비활성화

 

 


📌 적용 후 예상 결과 값

 

1. Pod 내 환경 변수 확인

kubectl exec env-pod -- printenv | grep APP_

 

💡 예상 출력 값

APP_ENV=production
APP_DEBUG=false

 

 


2️⃣ ConfigMap을 활용한 애플리케이션 설정값 관리

 

❓ 문제 상황

 

운영팀에서 애플리케이션 설정값을 환경 변수로 관리해야 합니다.

Pod에 직접 값을 설정하지 않고, ConfigMap을 활용하여 설정을 동적으로 관리해야 합니다.

ConfigMap 이름: app-config

설정 값:

DATABASE_HOST=db.example.com

DATABASE_PORT=5432

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. ConfigMap을 생성하여 설정 값을 저장합니다.

 

2. Pod에서 ConfigMap 값을 환경 변수로 참조하도록 설정합니다.

 


✅ 정답 Manifest (ConfigMap 생성 및 Pod 적용)

 

🔹 ConfigMap 생성

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DATABASE_HOST: db.example.com
  DATABASE_PORT: "5432"

 

🔹 Pod에서 ConfigMap 값을 환경 변수로 참조

apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
  - name: app-container
    image: nginx
    envFrom:
    - configMapRef:
        name: app-config  # ConfigMap 참조

 

 


📌 적용 후 예상 결과 값

 

1. Pod 내 환경 변수 확인

kubectl exec configmap-pod -- printenv | grep DATABASE_

 

💡 예상 출력 값

DATABASE_HOST=db.example.com
DATABASE_PORT=5432

 

 


3️⃣ Secret을 활용한 민감한 데이터(비밀번호, API 키 등) 보호

 

❓ 문제 상황

 

운영팀에서 데이터베이스 비밀번호와 API 키를 보안상 안전하게 저장해야 합니다.

ConfigMap이 아닌 Secret을 사용하여 민감한 정보를 관리해야 합니다.

Secret 이름: app-secret

저장할 값:

DB_PASSWORD=SuperSecurePass!

API_KEY=123456789abcdef

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Secret을 생성하여 민감한 데이터를 안전하게 저장합니다.

 

2. Pod에서 Secret 값을 환경 변수로 참조하도록 설정합니다.

 


✅ 정답 Manifest (Secret 생성 및 Pod 적용)

 

🔹 Secret 생성

apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
data:
  DB_PASSWORD: U3VwZXJTZWN1cmVQYXNzIQ==  # Base64 인코딩된 값 (SuperSecurePass!)
  API_KEY: MTIzNDU2Nzg5YWJjZGVm  # Base64 인코딩된 값 (123456789abcdef)

 

💡 Base64 인코딩 방법 (Linux/Mac)

echo -n "SuperSecurePass!" | base64
echo -n "123456789abcdef" | base64

 

🔹 Pod에서 Secret 값을 환경 변수로 참조

apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
  - name: app-container
    image: nginx
    envFrom:
    - secretRef:
        name: app-secret  # Secret 참조

 

 


📌 적용 후 예상 결과 값

 

1. Pod 내 환경 변수 확인

kubectl exec secret-pod -- printenv | grep DB_PASSWORD

 

💡 예상 출력 값

DB_PASSWORD=SuperSecurePass!

 

2. Secret 값 직접 조회

kubectl get secret app-secret -o yaml

 

💡 예상 출력 값 (Base64 인코딩 값이 출력됨)

data:
  DB_PASSWORD: U3VwZXJTZWN1cmVQYXNzIQ==
  API_KEY: MTIzNDU2Nzg5YWJjZGVm
728x90