애플리케이션을 배포할 때 환경 변수는 중요한 설정 요소입니다.
특히, 설정 값(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