설정값을 입력하면 ConfigMap 또는 Secret YAML을 만듭니다. 입력한 값은 브라우저 밖으로 나가지 않습니다.
기능은 거의 같습니다. 둘 다 키-값을 저장하고 파드에 환경변수나 파일로 주입합니다. 차이는 용도 구분과 접근 제어입니다.
Secret의 data 값이 알아보기 힘든 문자열이라 안전해 보이지만, echo '값' | base64 -d 한 줄이면 누구나 원문을 볼 수 있습니다. base64는 바이너리를 YAML에 안전하게 담기 위한 인코딩일 뿐 암호화가 아닙니다.
그래서 Secret YAML은 Git에 커밋하면 안 됩니다. 실제 값이 필요한 저장소에서는 SealedSecrets, External Secrets Operator, SOPS 같은 도구를 쓰거나, 아예 키 이름만 적힌 템플릿 파일을 두고 실제 값은 수동으로 넣는 방식을 씁니다.
Secret을 직접 작성할 때는 stringData를 쓰면 훨씬 편합니다. 평문으로 적으면 쿠버네티스가 저장 시 알아서 base64로 바꿔 줍니다. 조회할 때는 data로 보입니다.
# 전체를 환경변수로
envFrom:
- configMapRef:
name: myapp-config
- secretRef:
name: myapp-secret
# 특정 키 하나만
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: myapp-secret
key: DB_PASSWORD
envFrom으로 주입한 값은 파드가 시작할 때 한 번만 읽습니다. ConfigMap을 수정해도 실행 중인 파드의 환경변수는 그대로입니다. 반영하려면 파드를 다시 시작해야 합니다.
kubectl rollout restart deployment/이름 -n 네임스페이스
볼륨으로 마운트한 경우에는 잠시 후 파일 내용이 자동으로 갱신되지만, 애플리케이션이 그 파일을 다시 읽어야 실제로 적용됩니다.