[쿠버네티스 어나더 클래스 (지상편) - Sprint 1] 06. Application 기능으로 이해하기 - ConfigMap, SecretTech/Kubernetes(K8s)2025. 6. 3. 18:42
Table of Contents
* 본 게시물은 쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 강의와 강의 자료를 바탕으로 작성되었습니다.
강의 내용
- ConfigMap과 Secret의 차이와 진실(?)
ConfigMap

* 위 데이터는 요구되는 데이터가 아닌, 시뮬레이션을 위한 데이터
- spring_profile_active: "dev"
인프라 환경(개발, 운영, 테스트 등)에 따른 값 -> App이 기동될 때 알려줌 - application_role: "ALL"
App의 기능을 제어하기 위한 값으로 예시에서는 HTTP Method를 제어하기 위함 - postgresql_filepath: {DB_PATH}
외부 환경을 App으로 주입시키기 위한 값으로, DB 설정 파일을 가져와 구동하는데 사용
Secret

- Secret을 작성할 때, '쓰기 전용' 속성인 stringData에 원하는 데이터를 정의
- Secret에 정의된 데이터는 '읽기 전용' 속성인 data에 Base64로 Encoding 된 상태로 저장
- 실제로 파일에는 Decoding 되어 YAML에 정의된 데이터 그대로 저장됨
- 때문에, 해당 Container에 접근만 할 수 있다면 누구나 조회할 수 있음
* Secret에는 type이라는 속성이 하나 더 있음
- Opaque (기본값)
- ConfigMap의 데이터에서 중요한 데이터는 Secret에 작성하여 관리할 수 있음
- 형식만 다를 뿐, ConfigMap과 유사
- Docker-registry
- Private Docker-Registry에서 Image를 가져오고 싶을 때 사용
- Pod에서는 imagePullSecrets 속성을 이용해 연결하며, 이 정보를 가지고 Image를 다운로드
- Secret의 data에는 [docker-username, docker-password, docker-email]을 Key로 두고 작성되어야 함
- Tls
- Pod마다 각각 다른 보안 인증서를 사용하고 싶을 때 사용
- Secret의 data에는 [tls.crt, tls.key]을 Key로 두고 작성되어야 함
전체 흐름

- Secret은 Volume과 연결되어 VolumeMounts에 정의된 mountPath 위치에 데이터를 담은 파일을 생성
- ConfigMap은 Pod의 envFrom과 연결되어 Pod 실행 시, 최초로 환경 변수가 주입
(때문에, ConfigMap이 수정되어도 Pod가 재시작되지 않으면 반영되지 않음)
- Container가 실행 될 때 App의 설정 파일에 환경 변수가 적용되어 App이 기동되어 생성 파일이 달라짐
- 환경 변수에 정의된 DB 설정 파일 경로에서 데이터를 읽어 데이터베이스 연결
[미션 3]
더보기



▶ 응용1 : Configmap의 환경변수들을 Secret을 사용해서 작성하고, App에서는 같은 결과가 나오도록 확인해 보세요.
# ConfigMap의 기존 데이터
{
"application_role": "GET",
"postgresql_filepath": "/usr/src/myapp/datasource/postgresql-info.yaml",
"spring_profiles_active": "dev"
}
- 위 정보를 바탕으로 Secret(YAML)파일 작성
apiVersion: v1
kind: Secret
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
stringData:
application_role: "ALL" # 구분을 위해 role만 다르게 해줌
postgresql_filepath: "/usr/src/myapp/datasource/postgresql-info.yaml"
spring_profiles_active: "dev"
- Secret을 envFrom과 연결하기 위해 Deployment(YAML) 일부 수정
containers:
- name: api-tester-1231
image: 1pro/api-tester:v1.0.0
ports:
- name: http
containerPort: 8080
protocol: TCP
envFrom:
#- configMapRef:
- secretRef:
name: api-tester-1231-properties

Secret에 작성된 데이터가 환경 변수에 주입된 것을 확인
▶ 응용2 : 반대로 Secret의 DB정보를 Configmap으로 만들어보고 App을 동작시켜 보세요
- 기존 Secret에서 작성된 데이터

- 기존 데이터를 바탕으로 ConfigMap(YAML) 파일 작성
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=dev12345
- 작성된 ConfigMap과 Volume을 연결해야 하므로, Deployment(YAML) 파일 일부 수정
volumes:
- name: files
persistentVolumeClaim:
claimName: api-tester-1231-files
- name: secret-datasource
configmap:
name: api-tester-1231-postgresql
# secret:
# secretName: api-tester-1231-postgresql
# defaultMode: 420

지정된 경로의 파일에 작성해둔 데이터가 들어간 것을 확인
'Tech > Kubernetes(K8s)' 카테고리의 다른 글
@ONE_ :: 정호원
잘못된 정보가 있다면 말씀해주세요!