Nodejs

 

Kubernetes ConfigMap & Secret 튜토리얼

 

1. ConfigMap과 Secret 개념 정리

Kubernetes에서 애플리케이션을 배포할 때, 환경 설정 값은 코드와 분리해서 관리하는 것이 원칙입니다. 왜냐하면:

  • 설정 값은 배포 환경(dev, staging, prod)에 따라 달라질 수 있고,

  • 민감한 정보(API 키, 비밀번호)는 코드에 직접 넣으면 보안상 취약하기 때문입니다.

이를 위해 쿠버네티스는 두 가지 리소스를 제공합니다.

  • ConfigMap: 일반적인 환경 변수나 설정 값 저장용 (민감하지 않은 데이터)

  • Secret: 민감한 데이터 저장용 (Base64로 인코딩 처리)

쉽게 말해:

  • ConfigMap = “메뉴판” 같은 일반 설정

  • Secret = “금고” 안에 보관해야 하는 중요한 비밀

 

 

2. ConfigMap 실습

먼저 ConfigMap을 만들어봅시다. 아래 YAML은 config_map.yml입니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config

data:
  HOST: "nginx"
  PORT: "80"

이 설정은 nginx-config라는 이름의 ConfigMap에 HOST와 PORT 값을 넣어둔 것입니다.

이제 이 ConfigMap을 Pod에서 사용해보겠습니다. config_map_pod.yml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx-app
    type: back-end

spec:
  containers:
    - name: nginx-container
      image: nginx
      ports:
        - containerPort: 80
      envFrom:
        - configMapRef:
            name: nginx-config

여기서 핵심은 envFrom 부분입니다. nginx-config에 정의된 환경 변수들이 컨테이너 안에 자동으로 주입됩니다.

즉, 컨테이너 내부에서 echo $HOST 를 하면 nginx, echo $PORT 를 하면 80이 출력되게 됩니다.

실행 결과 확인 시:

HOST=nginx
PORT=80

 

 

3. Secret 실습

민감한 데이터는 Secret으로 관리해야겠죠. secret.yml을 보겠습니다.

apiVersion: v1
kind: Secret
metadata:
  name: nginx-secret
data:
  HOST: bmdpbng=
  PORT: ODA=

여기서 값이 이상하게 보이죠? 사실은 Base64 인코딩된 값입니다.

  • nginx → bmdpbng=

  • 80 → ODA=

Pod에서 이 Secret을 사용하는 방법은 ConfigMap과 거의 똑같습니다. secret_pod.yml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-secret
  labels:
    app: nginx-app
    type: back-end
spec:
  containers:
    - name: nginx-container
      image: nginx
      ports:
        - containerPort: 80
      envFrom:
        - secretRef:
            name: nginx-secret

여기서 secretRef를 사용해서 Secret을 불러옵니다.

Pod 안에서 echo $HOST 하면 nginx, echo $PORT 하면 80이 나오는데, 외부에서는 그대로 노출되지 않으니 보안이 강화됩니다.

실행 결과 확인 시:

HOST=nginx
PORT=80

 

 

4. ConfigMap vs Secret 비교 정리

 

즉, 평범한 환경 변수라면 ConfigMap, 중요한 데이터라면 Secret을 선택하면 됩니다.

 

 

5. 응용 포인트

  • 환경별 설정 분리: dev, stage, prod 별로 ConfigMap/Secret을 따로 두면 유연하게 관리 가능

  • 재배포 없이 업데이트: ConfigMap/Secret을 수정하면 Pod 재시작 시 반영되어 코드 수정 없이 환경을 바꿀 수 있음

  • Secret 관리 도구 연동: Vault 같은 비밀 관리 솔루션과 연동하면 운영 환경에서도 안전하게 관리 가능

 

 

전체 내용 요약

  1. ConfigMap은 일반 환경 설정 값을 관리하는 리소스, Secret은 민감한 정보를 Base64로 안전하게 저장하는 리소스입니다.

  2. Pod에서 envFrom을 이용해 ConfigMap/Secret을 환경 변수로 불러올 수 있습니다.

  3. ConfigMap과 Secret을 잘 구분해서 사용하면, 코드와 설정을 분리하고 보안을 강화할 수 있습니다.

 

 

 

 

about author

PHRASE

Level 60  라이트

성경에 기록된 건강의 규칙들을 연구하고 실천하라. -건강십계-

댓글 ( 0)

댓글 남기기

작성