애플리케이션 설정 관리는 애플리케이션 컨테이너화 및 배포 시 중요한 부분이다.
Kubernetes에서는 ConfigMap과 Secret을 사용하여 설정값을 관리한다.
- ConfigMap: 환경설정 등의 비밀이 아닌 데이터를 키-값 형태로 저장하는 객체.
- 예를 들면 애플리케이션 설정 파일, 환경 변수 등등
- Secret: 비밀번호, API 키 등 민감한 정보를 저장하는 객체이다.
- Secret의 데이터는 base64로 인코딩되어 저장되지만 기본적으로 암호화되진 않으므로 적절한 권한 관리와 필요 시 암호화 설정이 필요하다.
ConfigMap과 Secret 모두 Pod에 주입할 수 있다.
- 환경변수로 노출하거나
- 파일로 마운트하여
컨테이너 내에서 읽도록 할 수 있다.
이번 섹션에서는 ConfigMap과 Secret을 생성하고 Pod에 적용하는 과정을 실습한다.
ConfigMap – 애플리케이션 설정 저장
예제로 간단한 웹 애플리케이션이 환영 메시지를 ConfigMap에서 읽어 출력한다고 가정해보자.
ConfigMap 생성
다음과 같이 example-config.yaml을 작성하자.

- data 필드 아래에 여러 키-값을 넣을 수 있다.
- 위에서는 WELCOME_MESSAGE라는 키에 문자열 값을 넣고, app.properties라는 키에는 멀티라인 텍스트(파이프 | 사용)를 넣었다.
- ConfigMap은 텍스트 기반 설정을 저장하며 1MiB까지 저장 가능하다.
- ConfigMap의 키는 파일명처럼 사용할 수도 있다.
- 예: app.properties 키의 값은 나중에 파일로 마운트 가능
적용

ConfigMap이 정상 생성되었다.
Secret 생성
민감 정보 예제로 데이터베이스 비밀번호를 Secret에 저장해보자.
Secret은 base64 인코딩된 데이터를 저장한다.
간단하게 kubectl 명령으로 만들어보자.

이 값은 다음과 같이 확인한다.

- bXktcGFzc3dvcmQ=는 "my-password"의 base64 결과이다.
- (Opaque는 일반적인 키-값 Secret 유형)
주의
Secret은 민감한 정보이므로 평문 출력/로그에 유의해야 한다.
확인한다고 함부로 로그 찍지 않도록 조심하자!
ConfigMap/Secret을 Pod에 주입하기
이제 위에서 만든 ConfigMap과 Secret을 Pod에 연동시켜보자.
Pod의 컨테이너에 환경 변수로 ConfigMap/Secret 값을 넣거나, 파일로 마운트할 수 있다.
두 가지 방식을 모두 예제로 진행할 것이다.
(A) 환경 변수로 주입
Deployment를 하나 만들어서, 컨테이너 환경변수에 ConfigMap과 Secret 값을 주입해보자.
애플리케이션은 없지만, Nginx 환경에서 변수를 활용해 로그라도 찍어보자.
Deployment 매니페스트 (cm-secret-demo.yaml)

- env 아래 각 항목은 컨테이너에 주입될 환경변수 정의이다.
- valueFrom.configMapKeyRef를 사용하여 ConfigMap의 특정 키를 환경변수로 주입. name은 ConfigMap 이름, key는 가져올 키.
- valueFrom.secretKeyRef를 사용하여 Secret의 특정 키를 환경변수로 주입.
- 이렇게 하면 컨테이너 시작 시 해당 환경변수가 설정되어, 애플리케이션이 os.getenv("WELCOME_MESSAGE") 등으로 읽어 사용할 수 있게 된다.
여기서는 alpine 컨테이너에서 echo $(WELCOME_MESSAGE)로 그 값을 출력만 하고 1시간 대기(sleep)하게 했다. (Demo 용도)
적용하고 로그를 확인해보자.

Alpine 컨테이너의 표준 출력에 우리가 ConfigMap에 넣었던 메시지가 찍혔다!
Secret의 DB_PASSWORD는 출력하지 않았지만, 동일하게 환경변수로 들어가 있다.
주의
환경변수로 주입 시 Secret의 민감 정보도 컨테이너 내 평문 환경변수가 된다.
따라서 컨테이너 로그 등에 비밀정보를 출력하지 않도록 조심하고, 이미지 내에서 환경변수가 노출되지 않게 신경써야 한다.
필요하면 kubectl delete -f cm-secret-demo.yaml로 정리한다.
(B) 볼륨 파일로 마운트
두 번째 방법은 ConfigMap이나 Secret의 내용을 파일로 마운트하는 것이다.
이 경우 애플리케이션이 특정 경로의 파일을 읽도록 개발되어 있다면, 이미지를 수정하지 않고도 설정을 주입할 수 있어 유용하다.
예를 들어 Nginx의 HTML 파일을 ConfigMap으로 만들어 마운트하는 시나리오를 해보겠다.
ConfigMap에 파일 데이터 저장
HTML 한 파일을 ConfigMap으로 만들어보겠다.

- 이렇게 하면 html-config 라는 ConfigMap이 생성되고, key는 index.html, value는 파일 내용이 된다.
확인

Pod에 마운트
간단히 Nginx Pod 하나를 실행하면서, 위 ConfigMap을 볼륨으로 마운트한다.

설명
- volumes에 ConfigMap을 지정하고 name: html-config으로 연결한다. items로 어떤 키를 어떤 경로로 마운트할지 정했다.
- volumeMounts에서 mountPath: /usr/share/nginx/html/index.html로 Nginx 기본 페이지 위치에 마운트했다.
- subPath: index.html 옵션은 ConfigMap의 index.html 키 하나만 파일로 마운트하기 위해 사용했다.
- (subPath를 쓰지 않으면 디렉토리로 마운트됨)
- 이렇게 하면 nginx 컨테이너의 /usr/share/nginx/html/index.html 파일이 ConfigMap의 내용으로 대체된다.
적용 후 확인

브라우저로 http://localhost:8050 을 열어보면 "ConfigMap Volume Test" 라는 문구가 출력될 것이다. Nginx 기본 페이지가 우리가 준 HTML로 교체되었기 때문이다.

Secret도 비슷하게 volumes.secret으로 마운트 가능하다.
예를 들어 TLS 인증서/키를 Secret에 담아 /etc/ssl 등에 마운트하여 사용 가능하다.
Pod 종료

요약
ConfigMap과 Secret을 통해 환경 설정을 분리하고 Kubernetes에서 이를 주입하는 방법을 실습했다.
- ConfigMap은 평문 구성 데이터를 저장하며, 애플리케이션 설정을 컨테이너 이미지와 분리하여 관리하게 해준다.
- Secret은 민감 데이터를 저장하며, ConfigMap과 유사하게 사용하되 기밀을 다룰 때 활용한다. (base64 인코딩으로 저장, 필요시 at-rest 암호화 권장).
- 두 리소스 모두 Pod에 환경변수나 Volume 파일 형태로 주입 가능하여 유연한 설정 관리가 가능했다.
배운 개념
- 애플리케이션 설정의 컨테이너 외부화(12-factor app 원칙 중 config 분리)
- Kubernetes에서의 설정 관리 패턴
- ConfigMap vs Secret 용도 차이.
'WEB BE Repository > kubernetes, k8s' 카테고리의 다른 글
| [쿠버네티스 튜토리얼] 5. 쿠버네티스 네트워크 동작원리 (0) | 2025.12.21 |
|---|---|
| [쿠버네티스 튜토리얼] 3. 서비스 노출: ClusterIP, NodePort, Ingress (0) | 2025.12.19 |
| [쿠버네티스 튜토리얼] 2. Deployment 생성과 ReplicaSet 이해 (0) | 2025.12.18 |
| [쿠버네티스 튜토리얼] 1. k3s로 배워보자. (0) | 2025.12.17 |