kubernetes의 API를 호출했을때 요청내용을 검증하고 변형할 수 있는 플러그인들의 모음
API를 통한 요청이 실제 실행이가기전에 다음과 같은 행위를 수행할 수 있다.
구체적으로 진행할 수 있는 내역은 공식 페이지를 참조하자. (https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#what-does-each-admission-controller-do)
PodSecurityPolicy? k8s의 내장형 Admission Controller로 주로 권한 제한을 위해 사용이 되었음 하지만 현재는 deprecated https://kubernetes.io/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/
kubeapi에서 명시적으로 지정하여 사용한다. 관련된 옵션은 '--enable-admission-plugins'와 '--disable-admission-plugins'이다. (예전의 흔적인 '--admission-control'도 현재 1.22버전까지는 deprecated 상태로 살아있다. )
가능한 plugin 리스트 (v1.22 기준) [ NamespaceLifecycle, LimitRanger, ServiceAccount, TaintNodesByCondition, PodSecurity, Priority, DefaultTolerationSeconds, DefaultStorageClass, StorageObjectInUseProtection, PersistentVolumeClaimResize, RuntimeClass, CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, MutatingAdmissionWebhook, ValidatingAdmissionWebhook, ResourceQuota). Comma-delimited list of admission plugins: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, DenyServiceExternalIPs, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodSecurity, PodSecurityPolicy, PodTolerationRestriction, Priority, ResourceQuota, RuntimeClass, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook ]
위와 같이 다양한 plugin을 제공하지 있고 대부분의 시나리오에 수정없이 사용할 수 있지만 필요에 따라 추가할 수 있는데 이때 사용하는 것이 'MutatingAdmissionWebhook', 'ValidatingAdmissionWebhook'이다. 이를 통해 admission controller에 동작을 추가할 수 있다.
이를 사용하여 Gatekeeper도 동작 중이다.