Scheduling/82/Admission Controllers

Admission Controllers의 개념
kubectl을 사용하여 Kubernetes API Server에 요청을 보내면, 요청이 인증(Authentication)과 인가(Authorization)를 거쳐야 한다.
- Role-Based Access Control(RBAC)을 이용하여 특정 사용자에게 특정 리소스에 대한 접근 권한을 부여할 수 있다.

- 하지만 RBAC만으로는 특정 세부 정책을 적용하기 어렵다. 예를 들어, 퍼블릭 Docker Hub에서 이미지를 가져오는 것을 제한하거나,
latest 태그 사용을 방지하는 등의 정책을 적용할 수 없다.
- 이러한 제한을 적용하기 위해 Admission Controllers가 필요하다.
Admission Controllers

- AlwaysPullImages: Pod가 생성될 때마다 이미지를 항상 pull하도록 강제.
- DefaultStorageClass: PVC(Persistent Volume Claim)가 생성될 때 기본 Storage Class를 자동으로 추가.
- EventRateLimit: API Server가 처리할 수 있는 요청 수를 제한하여 과부하 방지.
- NamespaceExists: 존재하지 않는 네임스페이스에 대한 요청을 거부.
- NamespaceAutoProvision(기본적으로 비활성화됨): 존재하지 않는 네임스페이스에 대해 자동으로 네임스페이스를 생성.
Admission Controllers 활성화 및 비활성화
kube-apiserver에서 --enable-admission-plugins 플래그를 설정하여 활성화할 수 있다.
kubectl exec 명령을 사용하여 API Server 컨테이너 내에서 활성화된 Admission Controller 목록을 확인할 수 있다.
- Namespace Lifecycle Admission Controller
NamespaceExists 및 NamespaceAutoProvision Admission Controller는 Namespace Lifecycle Admission Controller로 통합되었다.
- 특정 네임스페이스(
default, kube-system, kube-public) 삭제 방지 기능을 제공.