설명
--read-only-port가 0이 아니면 kubelet에 인증과 인가가 없는 읽기 전용 포트가 열릴 수 있습니다. 접근 가능한 클라이언트에게 노드와 워크로드 정보가 불필요하게 노출될 수 있습니다.
읽기 전용이라고 해도 공격자 입장에서는 유용한 정보 수집 경로가 될 수 있습니다. 운영 환경에서는 비활성화하고 필요한 모니터링을 인증·인가가 적용되는 TLS 경로로 전환하세요.
잠재적 영향
- 인증 없는 정보 조회 경로가 남아 노드 정보가 노출될 수 있습니다.
- 공격자가 노드와 워크로드 상태를 정찰하는 데 활용할 수 있습니다.
- kubelet 관리 표면이 불필요하게 넓어질 수 있습니다.
해결 방법
readOnlyPort: 0또는 기존--read-only-port=0을 설정하세요.- 의존하는 모니터링 수집기는 인증·인가가 적용되는 TLS 경로로 전환하세요.
- 실제 노드 설정과 실행 인수를 확인하고 읽기 전용 포트가 더 이상 열려 있지 않은지 점검하세요.
예시
명령 인수를 비교하는 발췌입니다. foo/bar는 예시 이미지이며, 이 Pod를 배포하는 것만으로 노드 kubelet이 재설정되지는 않습니다. 실제 노드의 지원되는 버전과 설정 방식에 적용하세요.
변경 전
yaml
apiVersion: v1
kind: Pod
metadata:
name: command-demo
spec:
containers:
- name: command-demo-container
image: foo/bar
command: ["kubelet"]
args: ["--read-only-port=1"]
변경 후
yaml
apiVersion: v1
kind: Pod
metadata:
name: kubelet-demo
spec:
containers:
- name: kubelet-demo-container
image: foo/bar
command: ["kubelet"]
args: ["--read-only-port=0"]
설명:
- 변경 전: 읽기 전용 포트를 1로 지정합니다. 연결 가능한 클라이언트에게 인증 없는 정보 조회를 허용할 수 있습니다.
- 변경 후: 포트를
0으로 설정해 읽기 전용 서비스를 비활성화합니다. 필요한 모니터링 경로도 함께 확인하세요.