[Kubernetes] ConfigMap과 Secret의 차이는 인코딩 뿐일까?

berry·2025년 8월 2일

이 글은 기본적인 쿠버네티스 지식이 있는 사람들을 대상으로 작성된 문서입니다.

ConfigMap과 Secret

쿠버네티스의 ConfigMap과 Secret은 주로 애플리케이션의 설정 값을 저장하기 위해 사용된다. 생성과 사용법도 크게 다르지 않다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: berry
data:
  name: Berry
  nationality: Korean
  age: "32"
  simple_key_val: |
    desksetup.keyboard=keychron
    desksetup.mouse=logitec

ConfigMap은 일반적인 설정 데이터를 저장할 때 사용된다. 도메인주소, 포트 번호, 환경 변수 등이 그 예이다.

apiVersion: v1
kind: Secret
metadata:
  name: berry
type: Opaque
data:
  secretname: YmVycnktaW8tZXVyb3BhCg==
  password: dGVzdDEyMzQK

Secret은 비밀번호, API 키, 인증서 등 외부에 노출되면 안되는 민감정보를 저장하는데 사용된다. 일반 텍스트로 저장하는 것이 아닌 base64로 인코딩 된 데이터를 저장하여 옆에서 슬쩍 봤을 때는(?) 바로 값을 알기 힘들다.

하지만 암호화(encrypted)가 아닌, 인코딩(encoded)되었다는 점에서 정말 데이터 보호가 안전하다고는 할 수 없다. 기본적으로 쿠버네티스에서 Secret 리소스를 암호화하진 않는다. 그래서 encrypt at rest를 권장한다.(링크)

물론 secret이 TLS나 dockercred 등을 저장할 수 있고 자잘한 차이점이 있긴 하지만 기본적으로 보안 측면에서 큰 차이가 보이진 않는다.

Base64가 끝?

ConfigMap과 Secret 모두 환경변수로 선언하거나 파일로 마운트하여 사용할 수 있다는 점에서 매우 유사하다. 단지 base64 하나 먹이려고 Secret을 나눈 것인가에 대한 생각이 들어 더 자세히 찾아보니... 아주 중요한 차이점이 있었다.

바로 Secret이 노드 내에 저장되는 방식에서의 차이점이다.

tmpfs

굉장히 익숙한 단어이다.
df -h라는 익숙한 명령어를 치면 보이는 unix-like의 OS에서 거의 볼 수 있는 파일시스템이다.

tmpfs는 RAM 기반의 휘발성 파일 시스템으로 데이터가 디스크에 물리적으로 기록되지 않고 메모리(RAM)에만 존재한다.

Secret은 마운트되어 사용될 때 tmpfs에 저장된다.

secret이 파드에서 마운트되어 사용될 때 해당 파드가 위치한 노드의 tmpfs에 저장된다.
이로 인해 노드가 재부팅되거나 파드가 삭제되면 tmpfs에 저장된 Secret 데이터는 자동으로 사라져 ConfigMap에 비해서 훨씬 안전하다.

물론 volume에 마운트 될 때만의 차이점이긴 하지만 단지 base64로 인코딩한 것 이외에 이런 차이가 있다는 것을 알고 조금 놀랐다. 많은 포스트에서 이 얘기가 없기 때문이다.

민감 정보는 꼭! Secret에 두고 쓰자.

0개의 댓글