궁금한게 많은 개발자 노트

[ K8S ] CKS - API Server TroubleShooting (Node Resctriction, RBAC) 본문

DevOps/CKS

[ K8S ] CKS - API Server TroubleShooting (Node Resctriction, RBAC)

궁금한게 많은 개발자 2026. 3. 25. 20:56
Someone modified the /etc/kubernetes/manifests/kube-apiserver.yaml and now the API server is down. Fix the configuration so that the API server starts successfully. Ensure that the authorization-mode includes Node and RBAC (in the correct order), and that the NodeRestriction admission plugin is enabled.

 

[ 포함된 개념 ]

  • API Server는 Static Pod로 실행되며, /etc/kubernetes/manifests/아래에 static pod yaml존재
  • Admission Controller: NodeRestriction은 kubelet이 자신이 관리하는 노드와 파드에 대해서만 수정 권한을 갖도록 제한하는 필수 플러그인
    • --enable-admission-plugins=NodeRestriction
  • Authorization Mode: Node,RBAC 순서로 적어야 함 > 노드 권한을 먼저 체크하고 나머지 요청을 RBAC으로 넘김
    • --authorization-mode: API서버로 들어오는 요청의 인가 방식을 지정
      • Node > kubelet이 자신의 노드 리소스만 접근하도록 제한
      • RBAC > Role/ClusterRole 기반 일반 인가

[ 풀이 방법 ]

# 원인 파악 > API서버 컨테이너 로그 확인
$ crictl ps -a | grep kube-apiserver

# Exited 상태인 컨테이너의 ID를 복사한 후
$ crictl logs <컨테이너ID>

# 백업
$ cp /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/kube-apiserver.yaml.bak

# 편집
$ vi /etc/kubernetes/manifests/kube-apiserver.yaml

# 아래 두 줄 정확히 존재하는지 파악
- --authorization-mode=Node,RBAC
- --enable-admission-plugins=NodeRestriction

# kubelet이 kube-apiserver를 재기동할 때까지 대기
# 파일 저장 후 kubelet이 자동으로 Static Pod를 재생성합니다.
# kube-apiserver Pod 상태 확인 (직접 감시)
$ watch crictl pods --name kube-apiserver

# kubectl get nodes정상 동작 시 성공
Comments