심심한 개발자의 취미생활

ConfigMap (컨피그맵), Secret (비밀값)

  • 쿠버네티스에서 컨테이너에 설정값을 주입하는 데 쓰는 리소스는 컨피그맵과 비밀값이 있다.
  • 두 리소스는 모두 포맷 제한 없이 데이터를 보유할 수 있으며 이 데이터는 클러스터 속에서 다른 리소스와 독립적인 장소에 보관된다.

ConfigMap

  • 컨피그맵은 파드에서 읽어 들이는 데이터를 저장하는 리소스이다.

  • 데이터 형태는 한개 이상의 키-값 쌍, 텍슽, 바이너리 파일까지 다양한다.

  • 키-값 쌍을 저장했다면 파드에서 이를 환경 변수 형태로 주입할 수 있고, 텍스트를 저장했다면 json, xml, yaml, toml, ini 등 설정 파일을 파드에 전달할 수 있다.

  • 환경 변수의 이름이 중복 되는 경우 env 항목에서 정의된 값이 envFrom 항목에서 정의 된 값에 우선한다.

  1. 명령어로 컨피그맵 생성

    • kubectl create configmap [configmap-name] --from-literal=[path value in setting]='value'
  2. 파일을 기반으로 컨피그맵 생성

    • kubectl create configmap [configmap-name] --from-env-file=[filepath]

컨피그맵에 담긴 설정값 데이터 주입하기

  • 환경 변수 외에 설정값을 전달하는 또 다른 방법은 컨테이너 파일 시스템 속 파일로 설정값을 주입하는 것이다. 컨테이너 파일 시스템은 컨테이너 이미지와 그 외 출처에서 온 파일로 구성되는 가상 구조다. 쿠버네티스는 컨테이너 파일 시스템 구성에 컨피그맵도 추가할 수 있다.
  • 컴피그맵은 디렉터리, 각 항목은 파일 형태로 컨테이너 파일 시스템에 추가된다.

Volume (볼륨) / Volume Mount (볼륨 마운트)

Secret (비밀값)

  • 비밀값은 컴피그맵과 비슷한 API를 가진 별개의 리소스다. 사용 방법은 컨피그맵과 크게 다르지 않다. 컨피그맵과 다른 점이 있다면 비밀값은 민감한 정보를 다루므로 클러스터 내부에서 별도로 관리된다는 것이다.
  • 컨피그맵과 추된 차이점은 노출이 최소화된다. 비밀값은 해당 값을 사용해야 하는 노드에만 전달되며, 노드에서도 디스크에 저장하지 않고 메모리에만 담긴다. 그리고 전달 과정과 저장할 때 모두 암호화가 적용된다.
  • 그렇다고 항상 암호화 상태가 유지되는 것은 아니다. 비밀값 객체에 접근할 권한이 있다면 비밀값의 평문을 읽을 수 있다.