Docker, K8s

K8s 환경변수는 컨테이너에서 동작하는 모든 프로세스에서 접근 가능하다?

shuotudou 2025. 3. 5. 17:31

이해가 안됨

Secret값의 데이터를 환경변수로 사용할때는 주의해야한다. 환경변수는 컨테이너에서 동작하는 모든 프로세스에서 접근가능하기 때문이다.

-> 왜, 어떻게 접근이 가능한 것인가?

 

 

확인한 내용

리눅스의 fork()에 대한 이해에서부터 출발함.

 

1. 배경

프로세스 상속 구조와 환경변수: 리눅스, 유닉스 계열 OS에서는 프로세스가 fork() 시스템 콜을 통해 자식 프로세스를 생성할 때, 부모 프로세스의 환경변수를 자식 프로세스가 '상속' 받습니다. 즉, 부모 프로세스에서 설정된 환경변수는 자식 프로세스에서도 그대로 접근 가능하게 됩니다.

 

 

  • 프로세스, 프로그램의 '실행' 단위: 운영체제에서 프로그램이 실행되면 '프로세스(Process)' 라는 단위로 관리됩니다. 프로세스는 프로그램 코드, 데이터, 그리고 실행 상태를 담고 있는 '실행 중인 프로그램' 이라고 생각하시면 됩니다.
  • fork() 시스템 콜, '자식' 프로세스 탄생: 리눅스, 유닉스 계열 OS에서는 fork() 라는 특별한 '시스템 콜 (System Call)' 을 사용하여 새로운 프로세스를 만듭니다. fork() 는 마치 '분신술' 처럼 현재 프로세스를 '복제' 하여 새로운 프로세스, 즉 '자식 프로세스(Child Process)' 를 생성합니다. fork() 를 호출한 원래 프로세스는 '부모 프로세스(Parent Process)' 가 됩니다.
  • '상속': fork() 를 통해 자식 프로세스가 생성될 때, 자식 프로세스는 부모 프로세스의 '거의 모든 것' 을 복사해서 물려받습니다. 코드, 데이터는 물론이고, '환경변수 (Environment Variable)' 도 예외 없이 '그대로' 상속받습니다. 마치 자녀가 부모로부터 재산, 가치관, 습관 등을 물려받는 것처럼, 자식 프로세스는 부모 프로세스의 '실행 환경' 을 구성하는 중요한 요소인 환경변수를 물려받는 것입니다.

 

2. 리눅스 위에서 실행되는 컨테이너

 

  • 컨테이너, 격리된 '미니 OS' 환경: 컨테이너는 호스트 OS 위에 격리된 독립적인 '미니 운영체제 (OS)' 와 같은 환경을 제공합니다. 컨테이너 내부에서는 마치 자신만의 OS를 사용하는 것처럼 느낄 수 있지만, 실제로는 호스트 OS 커널을 공유하고 리눅스 네임스페이스, cgroup 등의 기술로 격리된 환경을 제공하는 것입니다.
  • 컨테이너 시작 시 환경변수 설정: 쿠버네티스, Docker 와 같은 컨테이너 런타임 환경에서 컨테이너를 시작할 때, 컨테이너에게 '환경변수' 를 설정할 수 있습니다. 이 설정된 환경변수는 컨테이너가 시작되는 순간부터 컨테이너 환경에 '적용' 됩니다.
  • 상속 관계, 컨테이너 '전체' 로 확장: 컨테이너 내부에서 어떤 프로세스가 시작되든 (메인 애플리케이션, 쉘, 유틸리티 등), 모든 프로세스는 '컨테이너 시작 시 설정된' 환경변수를 '상속' 받습니다. 프로세스 상속 구조가 컨테이너 '전체' 로 확장되는 것입니다. 마치 컨테이너라는 '집' 에 사는 모든 '식구' 들이 집 주인이 정해놓은 '가훈' (환경변수) 을 공유하고 따르는 것과 같습니다.
  • '누구나' 접근 가능, 보안에 주의: 컨테이너 내부에서는 메인 애플리케이션 프로세스 뿐만 아니라, 쉘 스크립트, 유틸리티 프로그램, 심지어 악의적인 목적으로 침투한 프로세스까지 '모두' 동일한 환경변수에 '자유롭게' 접근할 수 있습니다

 

3. 결론

 

 

  • 프로세스 상속 구조 (원인): 리눅스/유닉스 OS의 fork() 시스템 콜 기반 프로세스 상속 구조는 자식 프로세스가 부모 프로세스의 환경변수를 물려받는 것을 '기본' 으로 합니다.
  • 컨테이너 환경변수 접근성 (결과): 컨테이너는 리눅스 커널 기능을 사용하여 격리된 환경을 제공하므로, 컨테이너 내부 프로세스 역시 기본적인 프로세스 상속 구조를 따릅니다. 따라서 컨테이너 시작 시 설정된 환경변수는 컨테이너 내부의 모든 프로세스에서 '상속' 되어 접근 가능하게 됩니다.