Kubernetes 환경에서 Application을 운영할 때 Container Image와 설정 데이터를 분리하는 것은 매우 중요합니다.
Application마다 환경 설정 값, Database 주소, API Key, 인증 정보 등이 필요하지만 이러한 데이터를 Image 내부에 직접 저장하면 관리와 보안 측면에서 문제가 발생할 수 있습니다.
Kubernetes에서는 이러한 문제를 해결하기 위해 ConfigMap과 Secret 기능을 제공합니다.
ConfigMap은 일반적인 설정 데이터를 관리하고 Secret은 Password, Token, 인증서 같은 민감한 데이터를 안전하게 관리하는 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| ConfigMap | 일반 Application 설정 관리 |
| Secret | 민감한 데이터 관리 |
| Pod | 설정 데이터 사용 |
| API Server | Resource 관리 |
ConfigMap과 Secret을 활용하면 동일한 Container Image를 다양한 환경에서 재사용하고 안전하게 운영할 수 있습니다.
Kubernetes ConfigMap이란 무엇인가?
ConfigMap은 Kubernetes에서 Application 설정 정보를 저장하는 Resource입니다.
Application 코드와 설정 데이터를 분리하여 관리할 수 있도록 제공합니다.
저장 가능한 데이터:
| 데이터 | 예시 |
|---|---|
| 환경 변수 | Application 설정 값 |
| Configuration File | 설정 파일 |
| Command Option | 실행 옵션 |
| Service 주소 | 내부 연결 정보 |
예:
개발 환경:
DATABASE_HOST=dev-db
운영 환경:
DATABASE_HOST=prod-db
같은 Image를 사용하면서 설정만 변경할 수 있습니다.
Kubernetes ConfigMap이 필요한 이유
Application 설정을 Container Image 내부에 포함하면 환경 변경이 어려워집니다.
문제:
| 문제 | 설명 |
|---|---|
| 환경 변경 어려움 | Image 재생성 필요 |
| 설정 관리 복잡 | 파일 관리 증가 |
| 배포 속도 저하 | 변경 과정 증가 |
ConfigMap을 사용하면 설정 데이터를 외부에서 관리할 수 있습니다.
Kubernetes ConfigMap 동작 구조
ConfigMap은 Pod와 연결되어 Application에 설정 값을 제공합니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| ConfigMap | 설정 저장 |
| Pod | 설정 사용 |
| Container | Application 실행 |
| API Server | 정보 관리 |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | ConfigMap 생성 |
| 2단계 | Pod 설정에 연결 |
| 3단계 | Container 시작 |
| 4단계 | 설정 값 전달 |
Application은 Kubernetes 환경에 맞는 설정을 사용할 수 있습니다.
Kubernetes ConfigMap 사용 방법
ConfigMap은 여러 방식으로 Container에 전달할 수 있습니다.
주요 방식:
| 방식 | 설명 |
|---|---|
| Environment Variable | 환경 변수 전달 |
| Volume Mount | 파일 형태 제공 |
| Command Option | 실행 옵션 전달 |
환경 변수 방식:
Application
↓
환경 변수 확인
↓
설정 적용
파일 방식:
ConfigMap
↓
Volume Mount
↓
Configuration File 사용
Kubernetes Secret이란 무엇인가?
Secret은 민감한 정보를 저장하기 위한 Kubernetes Resource입니다.
Password, Token, Certificate 같은 보안 데이터를 관리하는 목적으로 사용됩니다.
저장 데이터:
| 데이터 | 예시 |
|---|---|
| Password | Database 비밀번호 |
| Token | API 인증 Token |
| Certificate | TLS 인증서 |
| SSH Key | 접근 Key |
Secret을 사용하면 민감한 정보를 Application 코드와 분리할 수 있습니다.
Kubernetes Secret이 필요한 이유
민감한 데이터를 Container Image 또는 YAML 파일에 직접 작성하면 보안 위험이 발생합니다.
문제:
| 방식 | 위험 |
|---|---|
| Image 내부 저장 | 노출 위험 |
| Git 저장소 저장 | 정보 유출 가능 |
| 공유 파일 사용 | 접근 제어 어려움 |
Secret을 활용하면 권한 기반으로 접근을 제한할 수 있습니다.
Kubernetes Secret 동작 구조
Secret은 API Server를 통해 관리됩니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| Secret | 보안 데이터 저장 |
| API Server | 접근 관리 |
| Pod | Secret 사용 |
| RBAC | 권한 제어 |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | Secret 생성 |
| 2단계 | Pod와 연결 |
| 3단계 | Container 시작 |
| 4단계 | 인증 정보 사용 |
Secret은 Application 실행 시 필요한 보안 데이터를 제공합니다.
Kubernetes Secret 종류
Kubernetes는 다양한 Secret Type을 제공합니다.
| Type | 용도 |
|---|---|
| Opaque | 일반 Secret 데이터 |
| kubernetes.io/tls | TLS 인증서 |
| dockerconfigjson | Container Registry 인증 |
| service-account-token | ServiceAccount Token |
환경에 맞는 Secret Type을 선택할 수 있습니다.
Kubernetes ConfigMap과 Secret 차이
두 Resource는 데이터를 저장한다는 점은 비슷하지만 목적이 다릅니다.
| 구분 | ConfigMap | Secret |
|---|---|---|
| 목적 | 일반 설정 관리 | 보안 데이터 관리 |
| 저장 데이터 | 환경 설정 | Password, Token |
| 암호화 | 기본 제공 아님 | 추가 보안 설정 가능 |
| 사용 예 | Application 설정 | 인증 정보 |
간단히 정리하면 ConfigMap은 설정 관리, Secret은 민감 정보 관리입니다.
Kubernetes Secret 보안 방식
Secret은 기본적으로 Base64 Encoding 형태로 저장됩니다.
하지만 Base64는 암호화가 아니라 인코딩 방식입니다.
추가 보안 방법:
| 방법 | 설명 |
|---|---|
| Encryption at Rest | etcd 저장 데이터 암호화 |
| RBAC | 접근 권한 제한 |
| External Secret | 외부 Secret Manager 연동 |
| Audit Log | 접근 기록 확인 |
Production 환경에서는 추가 보안 설정이 필요합니다.
Kubernetes ConfigMap과 Secret Volume Mount
ConfigMap과 Secret은 Volume 형태로 Container에 연결할 수 있습니다.
구조:
ConfigMap / Secret
↓
Volume Mount
↓
Container File System
활용:
| 방식 | 사용 사례 |
|---|---|
| ConfigMap File | Application 설정 파일 |
| Secret File | 인증서, Key 파일 |
파일 기반 Application에서 많이 사용됩니다.
Kubernetes ConfigMap과 Secret 운영 시 고려사항
운영 환경에서는 설정 데이터 관리 정책이 필요합니다.
| 항목 | 설명 |
|---|---|
| Version 관리 | 변경 기록 관리 |
| Access Control | 권한 제한 |
| Backup | 중요 데이터 보호 |
| Rotation | Secret 변경 관리 |
특히 Secret은 정기적인 변경 관리가 중요합니다.
Kubernetes ConfigMap과 Secret 활용 사례
| 활용 사례 | 사용 기능 |
|---|---|
| Database 연결 | Secret |
| Application 설정 | ConfigMap |
| API Key 관리 | Secret |
| 환경별 설정 | ConfigMap |
| TLS 인증서 | Secret |
대부분의 Production Application은 두 기능을 함께 사용합니다.
Kubernetes ConfigMap과 Secret 장점
| 장점 | 설명 |
|---|---|
| 설정 분리 | Image 재사용 가능 |
| 보안 강화 | 민감 데이터 보호 |
| 운영 편의 | 환경별 관리 가능 |
| 자동화 지원 | Kubernetes 방식 적용 |
ConfigMap과 Secret은 Kubernetes Application 운영에서 필수적인 설정 관리 기능입니다.
자주 묻는 질문
ConfigMap과 Secret 중 어떤 것을 사용해야 하나요?
일반 설정 값은 ConfigMap을 사용하고 Password, Token 같은 민감 데이터는 Secret을 사용합니다.
Secret은 완전히 암호화되어 있나요?
기본적으로 Base64 Encoding 방식이며 추가 Encryption 설정을 적용해야 더욱 안전하게 보호할 수 있습니다.
ConfigMap 변경 시 Pod가 자동으로 재시작되나요?
일반적으로 자동 재시작되지 않으며 Application 구조에 따라 Reload 방식이 필요합니다.
마무리
Kubernetes ConfigMap과 Secret은 Application 설정과 보안 데이터를 분리하여 관리하는 핵심 Resource입니다.
| 구성 요소 | 역할 |
|---|---|
| ConfigMap | 일반 설정 관리 |
| Secret | 민감 데이터 관리 |
| Volume Mount | 파일 제공 |
| RBAC | 접근 권한 관리 |
ConfigMap과 Secret을 활용하면 Kubernetes 환경에서 Application을 유연하고 안전하게 운영할 수 있습니다.
다음 글에서는 Kubernetes Network 보안과 Traffic 제어를 위한 Kubernetes Network Policy 완벽 가이드! Pod 간 통신 제어와 보안 구조 이해하기를 알아보겠습니다.