Skip to content

Kubernetes ‐ ConfigMap, Secret

woojin.jang edited this page May 17, 2026 · 2 revisions

ConfigMap vs Secret 핵심 개념 비교

항목 ConfigMap (컨피그맵) Secret (시크릿)
주요 목적 민감하지 않은 일반 설정 데이터 관리 패스워드, API 키, SSH 키, TLS 인증서 등 민감 정보 보호
데이터 형태 Plain Text (평문 Key-Value 또는 파일 전체) Base64 인코딩된 스트링 (Key-Value)
보안 수준 누구나 조회 가능 (설정 분리 목적) RBAC을 통한 접근 제어, 메모리(tmpfs) 기반 저장으로 보안 강화
용량 제한 오브젝트당 최대 1MB 오브젝트당 최대 1MB

Pod에 데이터를 주입하는 2가지 방식 및 동적 반영(Hot-Reload)의 비밀

  • ConfigMap과 Secret 데이터를 파드 내부의 컨테이너로 가져오는 방법은 크게 환경 변수(Environment Variables) 방식과 볼륨 마운트(Volume Mount) 방식으로 나뉜다.
  • 이 방식의 선택에 따라 설정 변경 시 앱에 즉시 반영되는지 여부(Hot-Reload)가 결정된다.

환경 변수 주입 방식(env, envFrom)

  • 메커니즘 : 파드가 생성(시작)될 때 컨테이너의 OS 환경 변수로 값을 주입한다.
  • 장점 : 소스코드에서 System.getenv() 등으로 가져다 쓰기 매우 직관적이고 편리하다.
  • 동적 반영 불가능(중요) : 컨피그맵이나 시크릿의 값이 변경되어도, 이미 실행 중인 파드 내의 환경 변수 값은 절대 변하지 않는다. 프로세스가 뜰 때 딱 한 번만 로드되기 때문이다. 값을 변경하려면 파드를 재시작(Rolling Update 등)해야만 한다.

볼륨 마운트 방식(volumes, volumeMounts)

  • 메커니즘 : 컨피그맵/시크릿 내용을 가상 파일 시스템으로 만들어 컨테이너 내부의 특정 디렉터리에 파일 형태로 마운트한다.
  • 장점 : 대용량 설정 파일(application.yml, nginx.conf 등)을 통째로 주입할 때 유리하다.
  • 동적 반영 가능(Kubelet 주기적 동기화): 컨피그맵이나 시크릿의 데이터가 변경되면, kubelet이 이를 감지하여 파드 내부에 마운트된 파일의 내용을 실시간(대략 수십 초 내)으로 업데이트해 준다.
  • 단, 애플리케이션의 지원 필요 : 파일 자체는 실시간으로 변하지만, 애플리케이션(예: Spring Boot, Go 등)이 그 파일의 변경을 감지하고 재로드(Watch 메커니즘)하는 로직이 구현되어 있어야 진정한 의미의 Hot-Reload가 작동한다.

애플리케이션 배포 및 주입

apiVersion: apps/v1
kind: Deployment
metadata:
  name: finance-service
spec:
  replicas: 2
  selector:
    matchLabels:
      app: finance-service
  template:
    metadata:
      labels:
        app: finance-service
    spec:
      containers:
      - name: main-app
        image: financial-platform/api:v2.0.0
        
        # [방식 1] 환경 변수 주입 (Secret 적용 - 재시작 필요)
        env:
        - name: DATABASE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: app-secret
              key: DB_PASSWORD
        - name: APP_LOG_LEVEL
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: LOG_LEVEL

        # [방식 2] 볼륨 마운트 주입 (ConfigMap 적용 - 실시간 동기화 지원)
        volumeMounts:
        - name: config-volume
          mountPath: /app/config  # 컨테이너 내부에 /app/config/application.yml 파일이 생성됨
          readOnly: true

      volumes:
      - name: config-volume
        configMap:
          name: app-config
          items:
          - key: application.yml
            path: application.yml

📖 Java🔥

📖 Kotlin⭐

📖 Coroutine📎

📖 Spring🔥

📖 Spring Security⭐

📖 Spring Security OAuth2⭐

📖 Spring Batch📎

📖 Database🔥

📖 MySQL🔥

📖 Redis⭐

📖 JPA⭐

📖 QueryDsl📎

📖 MSA⭐

📖 Kafka⭐

📖 Apache Flink📎

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP🔥

📖 AWS⭐

📖 Docker⭐

📖 Kubernetes⭐

📖 Github Actions📎

📖 Jenkins📎

📖 Nginx⭐

📖 Monitoring📎

📖 Test(feat. Load Testing)📎

📖 Test(feat. Java)⭐

📖 Spring AI📎

📖 gRPC📎

  • [gRPC - Writing .proto Files with Protocol Buffers]
  • [gRPC - Various Communication Patterns in gRPC]
  • [gRPC - gRPC Optimization Techniques and Advanced Features]

📖 Spring Cloud Microservice Application📎

📖 TDD(Test-Driven-Development)⭐

📖 PostgreSQL📎

  • [PostgreSQL - Docker만을 사용하는 경량화된 환경 구성 방법]
  • [PostgreSQL - PostgreSQL에서 제공하는 데이터 타입]
  • [PostgreSQL - PostgreSQI의 JSONB, 역인덱싱과 활용 방법]
  • [PostgreSQL - 데이터베이스 성능을 위한 최적화 패턴 및 전략]
  • [PostgreSQL - 트랜잭션과 ACID, Isolation 수준별 차이]
  • [PostgreSQL - Database Lock 교착상태와 읽기/쓰기 성능을 보장하는 MVCC 모델]
  • [PostgreSQL - pgvector와 벡터 저장, 유사도 검색 패턴 개념]
  • [PostgreSQL - 벡터 인덱스 최적화와 벡터 검색과 전문 검색 결합 패턴]
  • [PostgreSQL - PostgreSQL 플러그인]
  • [PostgreSQL - PostGIS - 공간 쿼리와 GIST 인덱스, 지리 타입과 공간 쿼리를 위한 타입과 기본 함수]
  • [PostgreSQL - pg_search - 검색 엔진 없이 텍스트 검색 구현과 주의사항]
  • [PostgreSQL - 단일 인스턴스 한계를 극복하는 분산 패턴과 스케줄링, 분산 환경 구축 방법]
  • [PostgreSQL - Citus - 분산 테이블과 분산 쿼리를 위한 Extension과 데이터 분산 처리]
  • [PostgreSQL - pg_cron - PostgreSQL로 구성하는 CronJob]
  • [PostgreSQL - 스케줄러 + 분산 처리를 동시에 도입하는 주기적 집계 쿼리 패턴]

📖 Workflow-Driven Techniques for Large-Scale Traffic Processing📎

  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Kafka + Debezium을 활용한 CDC 패턴 설계]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Temporal을 활용한 워크플로우 패턴]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Docker와 경량 이미지를 활용한 환경 구축 방법]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Kafka에서의 메시지 Delivery Guarantee]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - 실시간 동기화의 핵심 CDC]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - MySQL Binary Log 기반의 CDC]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Binary Log 기반의 CDC 구현 플랫폼 Debezium이란?]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Debezium Architecture]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Debezium Architecture Best Practice와 주의사항]

📖 Reactive Programming📎

📖 ElasticSearch📎

📖 Design Pattern📎

📖 Clean Spring📎

  • [Real MySQL 8.0 - 인덱스]
  • [Real MySQL 8.0 - 실행 계획]
  • [Real MySQL 8.0 - 아키텍처]
  • [Real MySQL 8.0 - 트랜잭션과 잠금]
  • [도메인 주도 설계의 사실과 오해 - DDD 요약]
  • [도메인 주도 설계의 사실과 오해 - Preface, Entity & VO]
  • [도메인 주도 설계의 사실과 오해 - 연관 관계와 애그리거트]
  • [도메인 주도 설계의 사실과 오해 - 애그리거트 구현]
  • [도메인 주도 설계의 사실과 오해 - 레포지토리와 기타 패턴]
  • [도메인 주도 설계의 사실과 오해 - 통찰력을 향한 리팩터링]
  • [도메인 주도 설계의 사실과 오해 - 유연한 설계를 향한 리팩터링]
  • [도메인 주도 설계의 사실과 오해 - 모델의 경계를 긋고, 핵심에 집중하라]

Clone this wiki locally