설명
hostPath는 노드 파일 시스템의 일부를 컨테이너에 연결합니다. 실제 마운트와 파일 권한에 따라 애플리케이션이 호스트 파일을 읽거나 변경할 수 있어 노드와 컨테이너 사이의 경계가 약해집니다.
특별한 운영 목적이 아닌 일반 워크로드에서는 사용을 피하세요. Pod를 kube-system으로 옮기는 것만으로 호스트 접근이 안전해지지는 않습니다.
잠재적 영향
- 호스트 로그나 설정에 포함된 민감 정보가 노출될 수 있습니다.
- 쓰기 권한까지 허용되면 노드 파일이나 다른 워크로드에 영향을 줄 수 있습니다.
해결 방법
- 불필요한
hostPath마운트를 제거하고 적절한 CSI·관리형 스토리지로 대체하세요. PVC를 사용하더라도 실제 볼륨이 hostPath인지 확인하세요. - 호스트 접근이 필수라면 최소 경로와 읽기 전용 권한으로 제한하고 별도 노드 격리를 검토하세요.
- 워크로드를 만들거나 변경하는 권한도 제한해 호스트 접근 범위가 다시 넓어지지 않도록 하세요.
예시
hostPath 선언을 비교하는 부분 예시입니다. 첫 예시는 볼륨 이름과 컨테이너의 마운트 연결 등이 생략되어 있어 그대로 배포할 수 없습니다. 이미지 버전도 실제 배포에는 지원되는 값으로 바꾸세요.
변경 전
hcl
resource "kubernetes_pod" "app_pod" {
metadata {
name = "terraform-example"
namespace = "default"
}
spec {
volume {
host_path {
path = "/var/log"
}
}
}
}
노드의 /var/log를 볼륨 소스로 선언합니다. 컨테이너에서 사용하려면 해당 볼륨을 연결하는 마운트 구성이 추가로 필요합니다.
변경 후
hcl
resource "kubernetes_pod" "app_pod" {
metadata {
name = "terraform-example"
namespace = "default"
}
spec {
container {
image = "nginx:1.7.9"
name = "app-container"
}
}
}
hostPath 선언을 제거했습니다. 다른 볼륨과 권한에서도 호스트 접근이 남아 있는지 확인하세요.