
Kubernetes의 Admission Controller는 크게 두 가지 유형으로 나뉜다.
NamespaceExists 또는 NamespaceLifecycle Admission ControllerDefaultStorageClass예제:
NamespaceAutoProvisioning(네임스페이스가 없으면 자동 생성) → Mutating Admission ControllerNamespaceExists(네임스페이스가 없으면 요청 거부) → Validating Admission Controller⚠️ 만약 실행 순서가 반대로 된다면?
NamespaceExists가 먼저 실행되면 네임스페이스가 없는 요청은 바로 거부됨.NamespaceAutoProvisioning이 실행되지 못하고 네임스페이스도 생성되지 않음.그래서 항상 Mutating Admission Controller가 먼저 실행됨.
기본적으로 Kubernetes에 내장된 Admission Controller만 사용할 수 있지만, Webhook을 이용하면 사용자가 직접 Admission Controller를 만들 수 있다.
AdmissionReview JSON 형식으로 요청을 받고, 허용 여부를 응답.allowed: true → 요청 허용allowed: false → 요청 거부user1)가 자신의 이름과 같은 객체를 생성하려 하면 거부.user 라벨을 자동 추가.Webhook을 Kubernetes에 등록하려면 Webhook Configuration 객체를 생성해야 한다.
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: my-validation-webhook
webhooks:
- name: pod-policy.example.com
clientConfig:
service:
name: webhook-service
namespace: default
path: "/validate"
rules:
- apiGroups: [""]
apiVersions: ["v1"]
operations: ["CREATE"]
resources: ["pods"]
admissionReviewVersions: ["v1"]
sideEffects: None
설명
webhooks: 여러 개의 Webhook을 설정 가능.clientConfig: Webhook 서버의 위치 (클러스터 내부 webhook-service 사용).rules: 특정 리소스(Pod) 생성 시에만 Webhook 실행.admissionReviewVersions: API 버전 지정.