설명
hostPath 볼륨을 컨테이너에 마운트하면 노드 파일시스템에 직접 접근할 수 있습니다. 시스템 에이전트처럼 꼭 필요한 경우가 아니라면 일반 애플리케이션에서는 사용을 피하고 목적에 맞는 저장소를 사용해야 합니다.
kube-system으로 옮기는 것만으로 파일 접근이 제한되지는 않습니다. 위험은 실제 호스트 경로, 컨테이너의 마운트 설정과 파일 권한에 따라 달라집니다.
잠재적 영향
- 노드의 설정, 로그나 자격 증명이 컨테이너에 노출될 수 있습니다.
- 쓰기 권한이 있으면 호스트 파일을 변경해 다른 워크로드나 노드 동작에 영향을 줄 수 있습니다.
- 노드별 파일 상태에 의존해 워크로드의 동작이 달라질 수 있습니다.
해결 방법
- 일반 데이터는 적절한 저장소의 PVC, 설정은 ConfigMap, 비밀정보는 Secret 등으로 대체할 수 있는지 검토하세요.
- 필수 시스템 워크로드만 필요한 호스트 경로를 사용하도록 제한하고, 읽기만 필요하면
readOnly: true를 설정하세요. - 해당 워크로드를 생성하거나 변경할 수 있는 권한도 제한하세요. 네임스페이스 이름만을 보안 경계로 삼지 마세요.
예시
다음은 볼륨 선언을 보여 주는 발췌입니다. 선택자, Pod 레이블과 volumeMounts 등은 생략했습니다. 실제 사용 시 필요한 항목과 지원되는 이미지를 구성하세요.
변경 전
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
template:
spec:
containers:
- name: nginx
image: nginx:1.14.2
volumes:
- name: static-page-dir
hostPath:
path: /var/local/static
type: DirectoryOrCreate
일반 애플리케이션에 /var/local/static 호스트 디렉터리를 제공하는 구성입니다. 이 볼륨을 마운트하면 애플리케이션이 노드의 파일에 의존하게 됩니다.
변경 후
yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
spec:
template:
spec:
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
volumes:
- name: varlog
hostPath:
path: /var/log
시스템 로그 수집기의 /var/log 접근은 정당한 사용 사례가 될 수 있습니다. 하지만 kube-system에 있다는 이유로 보호되는 것은 아니며, 실제 volumeMounts를 읽기 전용으로 제한하고 로그 접근 권한을 검토해야 합니다.