Killer Shell CKS - Apiserver NodeRestriction

Jmnote (토론 | 기여)님의 2025년 11월 19일 (수) 19:39 판 (새 문서: ==개요== ;Killer Shell CKS - Apiserver NodeRestriction * https://killercoda.com/killer-shell-cks/scenario/apiserver-node-restriction * 목적: node01의 Kubelet 신분으로,...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

1 개요

Killer Shell CKS - Apiserver NodeRestriction

2 배경

  • NodeRestriction 어드미션 플러그인이 활성화되어 있으면, Kubelet(주체: system:node:<노드명>, 그룹: system:nodes)은 자신(Node, 자신이 생성한 Pod) 범위를 벗어난 변경이나 특정 예약 접두어 레이블(node-restriction.kubernetes.io/*) 변경이 거부된다.
  • 본 단계의 목표는 “현재는 제한이 적용되지 않음”을 증명하는 것이다. 따라서 node01의 kubelet 신분으로 위 접두어 레이블을 추가해 보고 성공한다면, 제한이 꺼져 있음을 확인할 수 있다.

3 사전 확인(선택)

어드미션 플러그인 설정을 미리 훑어본다.

controlplane:~$ sudo grep -n -- --enable-admission-plugins /etc/kubernetes/manifests/kube-apiserver.yaml
# 출력에 NodeRestriction 이 없다면 비활성화 상태일 가능성이 높음

4 검증 절차

node01 호스트에서 Kubelet 자격증명으로 API 서버에 접근해, 제한 접두어 레이블 추가를 시도한다.

controlplane:~$ ssh node01
node01:~$ export KUBECONFIG=/etc/kubernetes/kubelet.conf
node01:~$ k get node
NAME     STATUS   ROLES           AGE   VERSION
controlplane   Ready    control-plane   ...   v1.xx.x
node01         Ready    <none>          ...   v1.xx.x

레이블 추가 시도:

node01:~$ k label node node01 node-restriction.kubernetes.io/one=123
node/node01 labeled

레이블이 실제로 적용되었는지 확인:

node01:~$ k get node node01 --show-labels | tr ',' '\n' | grep node-restriction.kubernetes.io/one
node-restriction.kubernetes.io/one=123

위와 같이 Kubelet 자격으로 제한 접두어 레이블이 성공적으로 추가되었다면, 현재 NodeRestriction이 적용되지 않았음을 확인한 것이다.

참고: 만약 제한이 올바르게 적용된 환경이라면, 아래와 유사한 거부 메시지가 나타난다.

Error from server (Forbidden): nodes "node01" is forbidden:
node "node01" cannot modify labels with prefix "node-restriction.kubernetes.io/"

5 정리(선택)

다음 단계(제한 활성화 실습)를 위해 레이블을 제거해 둔다.

node01:~$ k label node node01 node-restriction.kubernetes.io/one-

6

  • kubelet 자격으로 호출: 환경변수 KUBECONFIG=/etc/kubernetes/kubelet.conf 사용
    • 또는 명령별로 --kubeconfig=/etc/kubernetes/kubelet.conf 지정 가능
  • kubelet.conf는 각 노드에 존재하므로, 본 실습은 node01에서 수행하는 것이 안전하다.

7 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}