説明
NodeRestriction admission plugin は、kubelet が変更できる Node と Pod オブジェクトを制限します。自身の 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を有効にします。適切なノード認証主体と認可設定も必要です。