3.4. 설정 데이터
어떨 때 쓰는가
- 개발·검증·운영에서 접속 주소나 설정값만 다르게 하고 싶을 때
- 비밀번호를 이미지 안에 넣지 않고 관리하고 싶을 때
- 설정을 바꿀 때마다 이미지를 다시 만들고 싶지 않을 때
설정을 이미지 밖에 두는 이유
컨테이너 이미지에 설정을 넣으면 환경마다 이미지를 새로 만들어야 합니다.
| 이미지에 넣으면 | 밖에 두면 | |
|---|---|---|
| 환경별 배포 | 개발용·운영용 이미지를 따로 만듭니다 | 같은 이미지를 씁니다 |
| 설정 변경 | 이미지를 다시 만들고 다시 배포합니다 | 값만 고칩니다 |
| 검증한 것과 운영에 뜨는 것 | 다른 이미지입니다 | 같은 이미지입니다 |
| 비밀번호 | 이미지에 박혀 누구나 볼 수 있습니다 | 권한이 있는 사람만 봅니다 |
"검증한 것과 운영에 뜨는 것이 같다" 는 점이 가장 중요합니다. 이미지가 다르면 검증에서 통과한 것이 운영에서 실패할 수 있습니다.
ConfigMap 이란
감출 필요 없는 설정값을 담는 자원 입니다.
키와 값의 쌍으로 저장하며, 값은 짧은 문자열일 수도 있고 설정 파일 전체일 수도 있습니다.
| 담는 예 | 형태 |
|---|---|
| 접속 주소 | DB_HOST=db.example.local |
| 로그 수준 | LOG_LEVEL=info |
| 기능 켬·끔 | FEATURE_NEW_UI=true |
| 설정 파일 통째로 | application.yml 의 내용 전체 |
Secret 이란
감춰야 하는 값을 담는 자원 입니다. 구조는 ConfigMap 과 같지만 다루는 방식이 다릅니다.
| ConfigMap | Secret | |
|---|---|---|
| 화면 표시 | 그대로 보입니다 | 가려져 있습니다. 눌러야 보입니다 |
| 조회 권한 | view 롤에 포함 | view 롤에서 제외 (7.1 장) |
| 저장 형식 | 평문 | base64 인코딩 |
| 유형 구분 | 없음 | 있습니다 (아래 참고) |
Secret 은 암호화가 아니다
Secret 은 암호화되어 저장되지 않습니다. base64 로 인 코딩만 되어 있고, 인코딩은 누구나 되돌릴 수 있습니다.
Secret 이 제공하는 보호는 이런 것입니다.
| 있는 것 | 없는 것 |
|---|---|
| 조회 권한을 따로 관리할 수 있습니다 | 값 자체의 암호화 |
| 화면과 로그에 실수로 노출되는 것을 줄입니다 | 저장소가 뚫렸을 때의 보호 |
| 파드에 파일로 주입할 때 메모리에만 둡니다 |
따라서 Secret 조회 권한은 꼭 필요한 사람에게만 주십시오. 클러스터 저장소(etcd)의 암호화는 운영 담당자가 별도로 설정합니다.
ConfigMap 목록
워크로드 > 구성 맵 으로 들어갑니다.

| 열 | 설명 |
|---|---|
| 이름 | ConfigMap 이름 |
| 네임스페이스 | 속한 네임스페이스 |
| 데이터 | 담긴 키 개수 |
| 경과 시간 | 만든 뒤 지난 시간 |
ConfigMap 과 Secret 은 네임스페이스 단위 자원입니다. 다른 네임스페이스의 파드는 쓸 수 없습니다. 여러 네임스페이스에서 같은 설정이 필요하면 각각 만들어야 합니다.