NodeRestriction Admission Plugin 미설정

NodeRestriction과 올바른 노드 인증으로 kubelet의 객체 변경 권한을 제한하세요.

설명

NodeRestriction admission plugin은 kubelet이 변경할 수 있는 Node와 Pod 객체를 제한합니다. 해당 노드의 객체와 그 노드에 배치된 파드만 제한된 범위에서 변경하도록 하며, 일부 보호된 노드 레이블의 변경도 막습니다.

노드는 클러스터 안에서 중요한 실행 주체이기 때문에 권한 범위를 엄격히 제한해야 합니다. 플러그인의 제한을 받으려면 kubelet이 system:nodes 그룹과 system:node:<nodeName> 형식의 사용자 이름으로 인증되어야 합니다.

잠재적 영향

  • 노드가 다룰 수 있는 리소스 범위 통제가 약해질 수 있습니다.
  • 잘못된 노드 권한 사용이나 오남용을 더 쉽게 허용할 수 있습니다.
  • 제어면 보안 정책이 기대보다 느슨하게 동작할 수 있습니다.

해결 방법

  • kube-apiserver의 --enable-admission-plugins에 NodeRestriction을 포함하세요.
  • Node authorizer, RBAC와 올바른 노드 인증 주체를 함께 구성하세요. NodeRestriction 자체에는 별도의 플러그인 설정 파일이 필요하지 않습니다.
  • 실제 활성화된 admission plugin과 노드 작업을 점검하고, 허용되지 않은 객체·레이블 변경이 거부되는지 확인하세요.

예시

API 서버 인자 발췌입니다. 이미지는 실제 클러스터 버전에 맞추세요. 다른 admission plugin과 노드 인증·인가 설정은 생략했습니다.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: registry.k8s.io/kube-apiserver:v1.34.0
      command: ["kube-apiserver"]
      args: ["--disable-admission-plugins=NodeRestriction"]

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: registry.k8s.io/kube-apiserver:v1.34.0
      command: ["kube-apiserver"]
      args: ["--enable-admission-plugins=NodeRestriction"]

설명:

  • 변경 전: NodeRestriction을 명시적으로 비활성화하여 kubelet 변경 요청에 대한 추가 제한이 빠집니다.
  • 변경 후: NodeRestriction을 활성화합니다. 올바른 노드 인증 주체와 인가 설정이 함께 필요합니다.

참조