Cloud Architect 꿈꾸기

Cloud Computing/Kubernetes

Kubernetes Object - ConfigMap, Secret

HwanJae 2021. 1. 13. 16:42

이번 포스팅에서는 Pod에 환경 변수를 설정해주기 위한 ConfigMap, Secret 두 가지의 오브젝트에 대해 알아보겠다.


개발 환경상용 환경에 따라서는 보안접근, 접근 유저, 키 등 세팅값이 변경되기 마련인데, 컨테이너 내부 서비스에 설정된 값을 각각의 이미지로 별도 관리하기에는 필요치 않은 용량 소모가 발생하게 된다.

이를 방지하기 위해 환경에 따라 변하는 값들을 외부에 결정할 수 있게 도와주기 위한 기능으로써 ConfigMap과 Secret을 사용하곤 한다.

ConfigMap과 Secret을 만들 때 데이터를 저장하는 방법으로는

  • 상수를 저장하는 방법
  • 파일을 환경 변수에 저장하는 방법

이 있다.


1. 상수를 저장하는 방법

ConfigMap은 Key:Value로 구성되어있다.

이러한 구성으로 상수들을 정의해두면, Pod를 생성할 때 컨테이너 안 환경변수에 ConfigMap을 적용할 수 있다.

Secret은 Password, 인증키 등의 보안적인 요소를 주로 저장한다.

Secret는 value를 저장할 때 base64로 인코딩해서 저장시키고, Pod에 주입될 때는 자동으로 디코딩되어 Pod에서는 원래 값으로 보이게 된다.

일반적인 Object 값들은 쿠버네티스 DB에 저장되지만 Secret은 보안을 위해 파일이 아닌 메모리에 저장된다.

또한 ConfigMap의 경우 Key:Value값을 무한히 저장할 수 있지만 Secret은 1MB까지만 저장가능하다.

다만, 메모리를 사용하기 때문에 시크릿을 많이 만들면 시스템 자원에 영향을 끼칠 가능성이 있으므로 주의가 필요하다.


2. 파일을 환경 변수에 저장하는 방법

ConfigMap에서 파일 이름이 Key가되고 파일 내용이 Value가 되어 생성된다.

Secret을 파일로 저장할 때는 자동으로 base64로 인코딩되어 저장되기 때문에 파일 안의 내용이 base64로 저장되어 있다면 이중으로 인코딩이 되므로 주의해야 한다.


3. 파일을 마운팅하는 방법

Pod를 만들 때 컨테이너 안에 mountPath를 지정하고 파일을 마운팅하는 방식으로 설정이 가능하다.

파일을 환경 변수에 저장하는 방식은 ConfigMap의 데이터가 변경되어도 Pod 내부 값에는 영향이 없다.

반면, 파일을 마운팅하게 되면 원본과 파일이 서로 연결되어있기 때문에, ConfigMap이 변하면 Pod에 마운팅된 내용도 변경되게 된다.