미션 #3. Configmap, Secret 응용과제

미션 #3. Configmap, Secret 응용과제

문제 1
Configmap의 환경변수들을 Secret을 사용해서 작성하고, App에서는 같은 결과가 나오도록 확인해 보세요.

 

방법 1: dashborad에서 생성

# Secret 리소스 정의
apiVersion: v1
kind: Secret
metadata:
  namespace: anotherclass-123         # Secret이 생성될 네임스페이스
  name: api-tester-1231-properties    # Secret 이름
  labels:                             # 리소스 식별 레이블
    part-of: k8s-anotherclass         # 소속 프로젝트
    component: backend-server         # 구성 요소(백엔드 서버)
    name: api-tester                  # 애플리케이션 이름
    instance: api-tester-1231         # 인스턴스 식별자
    version: 1.0.0                    # 버전 정보
    managed-by: dashboard             # 관리 도구
stringData:                           # 암호화되지 않은 상태로 값을 입력 (쿠버네티스가 자동으로 base64 인코딩)
  spring_profiles_active: "dev"       # 스프링 프로필 설정
  application_role: "ALL"             # 애플리케이션 역할
  postgresql_filepath: "/usr/src/myapp/datasource/dev/postgresql-info.yaml"  # PostgreSQL 설정 파일 경로

 

방법 2: kubectl 명령어로 생성(YAML 파일)

# 인라인 YAML을 사용하여 Secret 생성
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  namespace: anotherclass-123         # Secret이 생성될 네임스페이스
  name: api-tester-1231-properties    # Secret 이름
  labels:                             # 리소스 식별 레이블
    part-of: k8s-anotherclass         # 소속 프로젝트
    component: backend-server         # 구성 요소
    name: api-tester                  # 애플리케이션 이름
    instance: api-tester-1231         # 인스턴스 식별자
    version: 1.0.0                    # 버전 정보
    managed-by: dashboard             # 관리 도구
data:                                 # base64로 인코딩된 값을 직접 지정
  spring_profiles_active: $(echo -n "dev" | base64 -w0)                       # base64로 인코딩된 스프링 프로필
  application_role: $(echo -n "ALL" | base64 -w0)                             # base64로 인코딩된 애플리케이션 역할
  postgresql_filepath: $(echo -n "/usr/src/myapp/datasource/dev/postgresql-info.yaml" | base64 -w0)  # base64로 인코딩된 파일 경로
EOF

 


문제 2

반대로 Secret의 DB정보를 Configmap으로 만들어보고 App을 동작시켜 보세요.

 

방법 1: dashborad에서 생성

# PostgreSQL 정보를 담은 ConfigMap 생성
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: anotherclass-123        # ConfigMap이 위치할 네임스페이스
  name: api-tester-1231-postgresql   # ConfigMap 이름
  labels:                            # 리소스 식별 레이블
    part-of: k8s-anotherclass        # 소속 프로젝트
    component: backend-server        # 구성 요소
    name: api-tester                 # 애플리케이션 이름
    instance: api-tester-1231        # 인스턴스 식별자
    version: 1.0.0                   # 버전 정보
    managed-by: dashboard            # 관리 도구
data:
  # 여러 줄의 YAML 데이터를 ConfigMap에 포함 (파이프 문자 | 사용)
  postgresql-info.yaml: |
    driver-class-name: "org.postgresql.Driver"
    url: "jdbc:postgresql://postgresql:5431"
    username: "dev"
    password: "dev123"               # 주의: ConfigMap은 암호화되지 않으므로 중요 정보는 Secret 사용 권장

 

방법 2: Deployment에 ConfigMap 볼륨 마운트하기

# kubectl edit 명령어로 Deployment를 직접 수정
kubectl edit -n anotherclass-123 deployments.apps api-tester-1231

# Deployment 리소스 업데이트
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: anotherclass-123     # Deployment가 위치한 네임스페이스
  name: api-tester-1231           # Deployment 이름
spec:
  template:
    spec:
      nodeSelector:
        kubernetes.io/hostname: k8s-master   # 특정 노드에 배포
      containers:
        - name: api-tester-1231    # 컨테이너 이름
          image: 1pro/api-tester:v1.0.0   # 컨테이너 이미지
          volumeMounts:            # 볼륨 마운트 설정
            - name: configmap-datasource   # 마운트할 볼륨 이름(아래 volumes 항목과 일치해야 함)
              mountPath: /usr/src/myapp/datasource/dev   # 컨테이너 내부 마운트 경로
      volumes:                     # Pod 레벨 볼륨 정의
        - name: configmap-datasource   # 볼륨 이름
          configMap:               # ConfigMap을 볼륨으로 사용
            name: api-tester-1231-postgresql   # 사용할 ConfigMap 이름

 

ConfigMap을 볼륨으로 마운트하면 ConfigMap의 각 키가 파일로 생성

위 예시에는 /usr/src/myapp/datasource/dev/postgresql-info.yaml 파일 생성

댓글을 작성해보세요.

채널톡 아이콘