개요
- K8s Admission Control
- k8s 어드미션 컨트롤, k8s 어드미션 제어
- K8s API 접근 제어의 세 단계(인증, 인가, 어드미션 제어) 중 마지막 단계
- API 서버가 요청을 etcd에 영구 저장하기 전에 개입하여 객체를 검증·수정하거나 요청을 거부할 수 있는 메커니즘
- 요청은 인증과 인가 단계를 통과한 뒤 Admission 단계로 전달되며, 이 과정에서 여러 Admission Controller가 순차적으로 실행된다.
용어
| 용어 | 설명 | Kubernetes에서 (예시) |
|---|---|---|
| Admission 단계 | 인증·인가 이후, 요청이 etcd에 저장되기 전 최종 검토 절차 | 요청 파이프라인의 Admission 단계 |
| Admission Control | Admission 단계에서 요청을 검증·수정·거부하는 메커니즘 | Admission Controller들의 동작 집합 |
| Admission Controller | Admission Control을 실제로 수행하는 개별 플러그인 | NamespaceLifecycle, ResourceQuota, LimitRanger 등 |
| ┗ 내장 Admission Controller | API 서버에 기본 포함된 고정 기능 | NamespaceLifecycle, ServiceAccount, ResourceQuota |
| 웹훅 | API 서버가 외부 HTTP 서버를 호출하여 확장 로직을 수행하는 메커니즘 | Admission Controller, Audit Backend 등에서 활용 |
| ┗ Webhook Admission Controller | 외부 웹훅 서버를 호출하여 요청을 검증·수정 | MutatingAdmissionWebhook, ValidatingAdmissionWebhook |
| ┗┗ Mutating Webhook | 요청 객체를 수정하기 위해 호출되는 웹훅 | MutatingAdmissionWebhook, MutatingWebhookConfiguration |
| ┗┗ Validating Webhook | 요청 객체를 검증하기 위해 호출되는 웹훅 | ValidatingAdmissionWebhook, ValidatingWebhookConfiguration |
| ┗┗ Validating Webhook Policy | Validating Webhook의 정책 리소스 | ValidatingWebhookConfiguration (웹훅 서버 엔드포인트·규칙 정의) |
| ┗ 정책 기반 Admission Controller | 외부 서버 호출 없이 API 리소스로 선언적 정책 정의 (v1.26+) | ValidatingAdmissionPolicy, ValidatingAdmissionPolicyBinding (CEL 기반) |
동작
Admission Controller는 생성(create), 수정(update), 삭제(delete) 요청에 적용되며, 읽기(get, list, watch)는 제외된다.
| 구분 | 설명 |
|---|---|
| 동작 유형 | Mutating → 요청 객체 수정 Validating → 요청 객체 검증 |
| 동작 단계 | 1단계: Mutating Admission Controller 실행 2단계: Validating Admission Controller 실행 |
| 거부 처리 | 어느 단계에서든 거부되면 요청은 즉시 실패 Mutating 단계에서 객체가 수정되면 일부 컨트롤러가 다시 실행될 수 있음 |
컨트롤러
Admission Controller는 API 서버에 내장되어 있으며, 활성화 여부는 설정으로 제어한다.
| 확장 포인트 | 리소스 | 설명 |
|---|---|---|
| MutatingAdmissionWebhook | MutatingWebhookConfiguration | 외부 웹훅 서버 호출로 요청 수정 |
| ValidatingAdmissionWebhook | ValidatingWebhookConfiguration | 외부 웹훅 서버 호출로 요청 검증 |
| ValidatingAdmissionPolicy | ValidatingAdmissionPolicy, ValidatingAdmissionPolicyBinding | 외부 서버 없이 API 리소스로 선언적 검증 (CEL 기반, v1.26+) |
설정
Admission Controller는 API 서버 실행 시 플러그인으로 제어한다.
| 동작 | 플래그 |
|---|---|
| 활성화 | --enable-admission-plugins
|
| 비활성화 | --disable-admission-plugins
|
kube-apiserver \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger \
--disable-admission-plugins=PodNodeSelector
※ 일부 Admission Controller(NamespaceLifecycle, ServiceAccount 등)는 항상 활성화되어 있으며 비활성화할 수 없다.
필요성
- PodSecurity, ResourceQuota, LimitRange 등 핵심 기능은 Admission Controller 활성화가 필수이다.
- 적절히 설정하지 않으면 보안·자원 관리 기능이 제한되어 API 서버가 불완전하게 동작할 수 있다.