설명
레거시 PodSecurityPolicy의 hostNetwork: true는 Pod가 노드의 네트워크 네임스페이스를 사용하도록 허용합니다. 실제로 사용하는 Pod는 노드의 네트워크 인터페이스와 포트 공간을 공유하므로 일반 Pod와 다른 접근 범위와 포트 충돌 위험이 생깁니다. NetworkPolicy의 적용 방식도 네트워크 플러그인에 따라 달라집니다.
PSP는 Kubernetes 1.21에서 사용 중단되고 1.25에서 제거되었습니다. 현재 클러스터에서는 Pod Security Admission이나 대체 정책으로 불필요한 호스트 네트워크 공유를 제한하세요.
잠재적 영향
- 노드의 네트워크 경로를 이용하면서 의도하지 않은 서비스에 접근할 수 있습니다.
- 애플리케이션이 여는 포트가 노드의 다른 서비스와 충돌하거나 노출 범위를 넓힐 수 있습니다.
- 일반 Pod에 적용한 네트워크 제어가 동일하게 동작하지 않을 수 있습니다.
해결 방법
- 레거시 정책의
hostNetwork를false로 제한하고 일반 워크로드는 별도 Pod 네트워크를 사용하세요. hostPorts,hostIPC,hostPID와 특권도 함께 검토하세요.- 예외가 필요한 시스템 구성은 사용 범위를 제한하고 실제 방화벽, NetworkPolicy와 서비스 연결을 확인하세요.
예시
다음은 Kubernetes 1.25 이전 PSP에서 관련 필드만 발췌한 예제입니다. 다른 필수 정책 필드는 생략했습니다.
변경 전
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: privileged
spec:
hostNetwork: true
정책을 사용할 수 있는 Pod가 호스트 네트워크 공유를 요청할 수 있습니다. 정책의 허용만으로 모든 Pod가 호스트 네트워크를 사용하는 것은 아닙니다.
변경 후
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: privileged
spec:
hostNetwork: false
이 정책에서는 호스트 네트워크 공유를 허용하지 않습니다. 일반 Pod 네트워크의 접근 제어는 별도로 구성해야 합니다.