ABOUT ME

Today
Yesterday
Total
  • [쿠버네티스] Configmap, Secret
    카테고리 없음 2025. 6. 8. 20:52

    Kubernetes에서 애플리케이션을 환경에 맞게 유연하게 구성하기 위해 사용되는 대표 리소스 두 가지:

    • ConfigMap: 환경변수, 설정 파일 등 민감하지 않은 정보
    • Secret: 비밀번호, API 키 등 민감한 정보 (Base64 인코딩)

    ConfigMap과 Secret 비교

    구분 용도 특징
    ConfigMap 환경 설정 정보 (환경변수, 설정 파일 등) 일반 텍스트 저장
    Secret 민감 정보 (비밀번호, 토큰 등) Base64 인코딩되어 저장

    Pod에 주입하는 방법

    1. 환경변수로 주입 (envFrom)

    # ConfigMap과 Secret을 환경변수로 주입
    envFrom:
      - configMapRef:
          name: my-config     # ConfigMap의 이름 참조
      - secretRef:
          name: my-secret     # Secret의 이름 참조

    2. 파일로 주입 (volumes)

    # ConfigMap과 Secret을 파일로 마운트하기 위한 volumes 정의
    volumes:
      - name: config-volume
        configMap:
          name: my-config     # configMap의 내용을 파일로 주입
      - name: secret-volume
        secret:
          secretName: my-secret # secret의 내용을 파일로 주입
    
    # 위에서 정의한 volumes를 실제 컨테이너 내에 mount
    volumeMounts:
      - mountPath: "/app/config"  # /app/config 경로에 ConfigMap 내용 주입
        name: config-volume
      - mountPath: "/app/secret"  # /app/secret 경로에 Secret 내용 주입
        name: secret-volume

     

    ConfigMap 예시

    apiVersion: v1                  # Kubernetes API 버전
    kind: ConfigMap                 # ConfigMap 리소스 정의
    metadata:
      name: my-config               # 이 ConfigMap의 이름
      namespace: default            # 배포 대상 네임스페이스 (Pod도 동일 네임스페이스여야 참조 가능)
    data:
      spring_profiles_active: "dev"     # Spring Boot에서 사용할 profile (예: dev, qa, prod)
      application_role: "ALL"           # 앱에서 부여받은 권한 또는 역할 (예: ADMIN, USER, ALL)
      postgresql_filepath: "/usr/src/myapp/datasource/postgresql-info.yaml"
                                        # DB 설정 파일이 mount되는 위치. Secret으로 주입한 파일 참조

    Secret 예시

    apiVersion: v1                  # Kubernetes 리소스 버전
    kind: Secret                    # Secret 오브젝트 정의
    metadata:
      name: my-secret               # Secret 이름 (Pod에서 참조할 이름)
      namespace: default            # 네임스페이스 (같은 네임스페이스 안에서만 참조 가능)
    type: Opaque                    # 일반 키-값 쌍을 담는 기본 타입
    stringData:
      postgresql-info.yaml: |       # 실제 파일로 마운트할 내용 (YAML 형식 설정파일)
        driver-class-name: "org.postgresql.Driver"           # JDBC 드라이버 클래스
        url: "jdbc:postgresql://postgresql:5431"             # 연결할 DB URL
        username: "dev"                                      # DB 계정 (민감정보)
        password: "dev123"                                   # DB 비밀번호 (민감정보, 반드시 Secret 사용)

     

    Spring Boot 실행 시 사용 예시

    java \
      -Dspring.profiles.active=${spring_profiles_active} \  # 환경 변수에서 프로파일 설정
      -Dapplication.role=${application_role} \              # 환경 변수에서 역할 설정
      -Ddb.config.path=${postgresql_filepath} \             # 환경 변수에서 DB 설정파일 경로 주입
      -jar /usr/src/myapp/app.jar

    환경마다 ConfigMap 값만 바꾸면 되므로 다음이 가능합니다

    • dev, qa, prod 환경 분리
    • 하나의 이미지로 다양한 환경에서 재사용

    댓글

Designed by Tistory.