환경 변수 및 시크릿 관리 가이드
이 문서는 서비스 운영 중 새로운 환경 변수를 추가하거나 기존 변수를 수정할 때, 그리고 Kubernetes Secret을 다룰 때 발생하는 문제와 해결 방법을 다룹니다.
1. Kubernetes Secret에 새로운 민감 정보 추가하기
백엔드나 워커에서 API Key, DB 접속 정보 등 민감한 정보를 사용해야 할 때의 절차입니다.
상황
새로운 기능 구현을 위해 BLOCKCHAIN_RPC_URL과 같은 민감한 키가 필요함.
절차
-
Secret YAML 파일 수정
backend-vivid-ai/backend-secret-dev.yaml(또는 prod) 파일을 엽니다.data섹션에 새로운 키를 추가합니다. 이때 값은 반드시 Base64로 인코딩되어야 합니다.
-
Base64 인코딩 (macOS 기준)
# 줄바꿈 없이 인코딩하여 클립보드에 복사
echo -n "실제_값_여기에_입력" | base64 | pbcopy- 복사된 값을 YAML 파일의
data섹션에 붙여넣습니다.
- 복사된 값을 YAML 파일의
-
Secret 적용
# 로컬 파일을 클러스터에 바로 적용할 때 (비권장, 임시 조치)
kubectl apply -f backend-vivid-ai/backend-secret-dev.yaml
# [권장] GitHub Actions Secret 업데이트
# 위 파일을 Base64로 한 번 더 인코딩하여 GitHub Repository Secrets에 업데이트합니다.
base64 -i backend-vivid-ai/backend-secret-dev.yaml | pbcopy
# 복사된 값을 KUBERNETES_BACKEND_SECRET_YAML_B64_DEV 로 저장
2. Deployment에 환경 변수 연결하기 (Mapping)
상황
Secret에는 MY_API_KEY_DEV로 저장되어 있는데, 코드(process.env.MY_API_KEY)에서는 MY_API_KEY를 찾아서 undefined 에러가 발생함.
해결 방법
Deployment YAML 파일(backend-deployment-dev.yaml)에서 이름 매핑을 정확히 수행해야 합니다.
env:
- name: MY_API_KEY # <--- 중요: 코드(Node.js/Python)에서 사용하는 변수명
valueFrom:
secretKeyRef:
name: vivid-ai-secret-dev
key: MY_API_KEY_DEV # <--- Secret에 저장된 실제 키 이름
주의 사항
name을MY_API_KEY_DEV로 설정하면 코드는 해당 변수를 찾지 못해 에러가 발생합니다.- 수정 후에는 반드시
kubectl apply -f ...명령어로 배포를 업데이트해야 합니다.
3. Frontend에 공개 환경 변수 추가하기
상황
프론트엔드(NEXT_PUBLIC_...)에 지갑 주소 등 공개되어도 되는 설정을 추가해야 함. Frontend는 별도의 Secret이 없는 경우가 많음.
해결 방법
frontend-deployment-dev.yaml 파일의 env 섹션에 value를 사용하여 직접 값을 입력합니다.
env:
- name: NEXT_PUBLIC_TREASURY_ADDRESS
value: "0x1234..." # <--- 직접 값 입력
4. 에러 발생 시 확인 방법
Pod가 CrashLoopBackOff 상태이거나 동작이 이상할 때 로그를 확인합니다.
# 1. Pod 목록 및 상태 확인
kubectl get pods
# 2. 특정 Pod 로그 확인 (에러 원인 파악)
kubectl logs <pod-name>
- "Configuration key ... does not exist": 환경 변수 매핑(
namevskey)이 잘못된 경우입니다.