피드로 돌아가기
Kubernetes BlogKubernetes Blog
DevOps

Kubernetes v1.34에서 EnvFiles 기능 게이트를 통해 initContainer가 생성한 파일 기반 환경 변수 주입으로 ConfigMap/Secret 관리 복잡성 제거

Kubernetes v1.34: Use An Init Container To Define App Environment Variables

2025년 9월 10일8intermediate

Context

Kubernetes는 환경 변수 설정을 위해 ConfigMaps과 Secrets를 사용하는데, 이는 추가 API 호출과 관리 복잡성을 초래한다. 워크로드 Pod와 구성 요소를 별도로 관리하면서 두 항목 모두에 대한 순차적 업데이트를 보장해야 한다. 또한 벤더 제공 컨테이너가 라이선스 키나 일회용 토큰 같은 환경 변수를 요구할 때, 하드코딩이나 볼륨 마운팅 없이 이를 주입할 방법이 제한적이었다.

Technical Solution

  • emptyDir 볼륨에서 파일 기반 환경 변수 로딩: EnvFiles 기능 게이트 활성화 시 kubelet이 Pod의 emptyDir 볼륨에 저장된 파일에서 환경 변수를 직접 읽음
  • initContainer를 통한 환경 변수 파일 생성: initContainer가 KEY=VALUE 형식의 .env 파일을 emptyDir 볼륨의 /config 디렉토리에 작성
  • fileKeyRef 필드를 통한 변수 참조: 메인 컨테이너의 env 스펙에서 fileKeyRef를 사용하여 파일 경로, 볼륨 이름, 추출할 키를 명시
  • 메인 컨테이너의 볼륨 마운트 불필요: initContainer만 emptyDir 볼륨을 마운트하고, 메인 컨테이너는 kubelet이 startupTime에 변수를 주입하므로 마운트할 필요 없음
  • emptyDir 전용 지원: 현재 alpha 단계에서는 emptyDir 볼륨 타입만 지원되며, 다른 볼륨 타입은 미지원

Key Takeaway

Kubernetes의 EnvFiles 기능은 ConfigMap/Secret 기반 접근법의 관리 복잡성을 제거하고 동적 환경 변수 생성을 단순화하지만, emptyDir은 Pod 수명 동안만 존재하고 노드 파일시스템 접근 권한이 있는 운영자에게 민감 데이터가 노출될 수 있으므로 클러스터 보안 정책으로 노드 접근을 제한해야 한다.


Kubernetes 워크로드를 운영하는 팀에서 라이선스 키나 토큰 같은 동적 환경 변수를 주입할 때, initContainer가 파일을 생성하고 fileKeyRef로 참조하는 패턴을 적용하면 ConfigMap/Secret 별도 관리 단계를 제거하고 Pod 스펙 내에서 완전히 자체 포함된 구성을 달성할 수 있다. 단, 민감 데이터의 경우 노드 접근 제어 정책이 필수다.

원문 읽기