인프런 워밍업 클럽 4기 DevOps - 2주차 (2)

sanghyun·2025년 6월 9일
1
post-thumbnail

모든 강의 이미지 출처는 [인프런] 쿠버네티스 어나더 클래스(지상편) - Spring 1,2 입니다.

Section 9. Application 기능으로 이해하기 - Configmap, Secret

Configmap

  • Configmap은 환경별로 필요한 환경변수들을 관리하기 위한 Object다.
  • Pod를 생성할 때 Configmap으로 부터 환경변수 값을 주입받아 사용할 수 있다.
  • 환경변수를 주입받는 방법에는 다음과 같은 방법이 있다.
    • 상수를 통한 주입 : Pod를 생성할 때 미리 생성해둔 Configmap을 활용하여 환경변수를 주입받는 방식이다.
    • File을 통한 주입 : 설정이 정의된 파일을 통해 Configmap을 생성하고 Pod가 생성될 때 이를 활용하여 환경변수를 주입받는 방식이다. 이 때, Configmap 설정이 변경되어도 Pod가 재생성되지 않는 한 Pod에는 변경된 환경변수가 적용 되지 않는다.
    • VolumeMount를 통한 주입 : 볼륨 마운트를 통해 Configmap 환경변수를 주입받는 방식으로 설정이 변경되면 Pod에도 변경사항이 반영된다.

Secret

  • 보안과 관련된 설정을 저장할 때 사용하는 Object이다.
  • 단, 이름과 달리 실제로는 Base64 인코딩된 데이터로 언제든 평문으로 복호화 할 수 있기에 보안적인 기능을 기대해서는 안된다.
  • Secret에 기재된 설정값을 주입받는 방법은 Configmap과 동일하다. 단, 방식에 따라 Base64 인코딩 필요 여부가 달라지니 참고하도록 하자.

[미션] Configmap 환경변수를 Secret으로 변환

Quiz) Configmap의 환경변수들을 Secret을 사용해서 작성하고, App에서는 같은 결과가 나오도록 확인해 보세요.
기존 Configmap 정보는 아래와 같습니다.

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: anotherclass-123
  name: api-tester-1231-properties
  labels:
    part-of: k8s-anotherclass
    component: backend-server
    name: api-tester
    instance: api-tester-1231
    version: 1.0.0
    managed-by: dashboard
data:
  spring_profiles_active: "dev"
  application_role: "ALL"
  postgresql_filepath: "/usr/src/myapp/datasource/postgresql-info.yaml"

▶ 기존 Secret과 동일한 설정의 Configmap 생성

apiVersion: v1
kind: Secret
metadata:
  namespace: anotherclass-123
  name: api-tester-1231-properties
  labels:
    component: backend-server
    instance: api-tester-1231
    managed-by: dashboard
    name: api-tester
    part-of: k8s-anotherclass
    version: 1.0.0
stringData:
  application_role: GET
  postgresql_filepath: /usr/src/myapp/datasource/postgresql-info.yaml
  spring_profiles_active: dev

▶ Deployment 내 Pod 설정에 configmapRef 대신 secretRef 로 변경

      containers:
        - name: api-tester-1231
          image: 1pro/api-tester:v1.0.0
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
          envFrom:
            - secretRef: # configmapRef => secretRef 로 변경
                name: api-tester-1231-properties

▶ 결과

# Pod에 설정된 환경변수 목록 조회 
[root@k8s-master ~] env

  • env 명령어 호출 시, Secret에 기재된 설정값들이 정상적으로 주입된 것을 확인할 수 있다.

[미션] Secret의 DB 정보를 Configmap으로 변환

Quiz) 반대로 Secret의 DB정보를 Configmap으로 만들어보고 App을 동작시켜 보세요.
기존 Secret 설정은 다음과 같습니다.

apiVersion: v1
kind: Secret
metadata:
  namespace: anotherclass-123
  name: api-tester-1231-postgresql
  labels:
    part-of: k8s-anotherclass
    component: backend-server
    name: api-tester
    instance: api-tester-1231
    version: 1.0.0
    managed-by: dashboard
stringData:
  postgresql-info.yaml: |
    driver-class-name: "org.postgresql.Driver"
    url: "jdbc:postgresql://postgresql:5431"
    username: "dev"
    password: "dev123"

▶ 기존 Configmap과 동일한 설정의 Secret 생성

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: anotherclass-123
  name: api-tester-1231-postgresql
  labels:
    part-of: k8s-anotherclass
    component: backend-server
    name: api-tester
    instance: api-tester-1231
    version: 1.0.0
    managed-by: dashboard
data:
   postgresql-info.yaml: |
    driver-class-name: "org.postgresql.Driver"
    url: "jdbc:postgresql://postgresql:5431"
    username: "dev"
    password: "dev123"

▶ Deployment 내 Pod volumes 설정에 secret 대신 configmap 로 변경

    spec:
      volumes:
        - name: files
          persistentVolumeClaim:
            claimName: api-tester-1231-files
        - name: configmap-datasource
          configMap: # secret => configmap으로 변경
            name: api-tester-1231-postgresql

▶ Deployment 내 Pod volumeMounts 설정에 변경된 configmap volume 사용하도록 변경

          volumeMounts:
            - name: files
              mountPath: /usr/src/myapp/files/dev
            - name: configmap-datasource # 위에서 변경한 volume명으로 설정
              mountPath: /usr/src/myapp/datasource

▶ 결과

  • dashboard 내에서 Deployment가 configmap-datasource 를 사용하는 것을 확인할 수 있다.
profile
안하는 건 있어도, 못하는 건 없다

0개의 댓글