概念:Admission Controllers(准入控制器)


什么是Admission Controllers(准入控制器)

Admission Controllers(准入控制器) 拦截对 k8s API 的请求, 拦截时刻点是在请求被认证和授权之后.
Admission Controllers(准入控制器) 有很多, 被编译到了 kube-apiserver二进制程序 中, 且只能被集群管理员配置.
Admission Controllers(准入控制器) 中有两个特殊的 controllers , 没错, 就是 MutatingAdmissionWebhookValidatingAdmissionWebhook .
Admission Controllers(准入控制器) 可以执行 validatingmutating 或二者都执行.
Admission Controllers(准入控制器)createdeletemodifyconnect to(proxy) 请求有效, 对 read 请求无效
Admission Controllers(准入控制器) 控制过程分2个阶段, 第一个阶段为 mutating , 然后是SchemaValidation(这步不是 Admission Controllers(准入控制器) 的工作), 然后是 validating . 再次提醒, 有些 Admission Controllers(准入控制器) 是即执行 validating 也执行 mutating
有时, 执行 mutating 的控制器会有 "side effects" , 例如 增加quota就是个典型的例子. 这种 "side effects" 需要相应的 reclamation or reconciliation process(回收或调谐过程) , 因为控制器不知道请求是否会通过后续的控制器

通过后面的介绍, 我们会看到 Admission Controllers(准入控制器) 不只是 MutatingAdmissionWebhookValidatingAdmissionWebhook , 除了这两个最常见的控制器, 还有许多其他控制器
例如 LimitRanger , 为什么我们创建的 LimitRange 对象能生效, 就是因为这个控制器
例如 ResourceQuota , 为什么我们创建的 ResourceQuota 对象能生效, 就是因为这个控制器
例如 NamespaceAutoProvision , 为什么我们创建的对象所在的 namespace 不存在会自动被创建, 就是因为这个控制器
例如 NamespaceExists , 为什么我们创建的对象所在的 namespace 不存在, 请求会被拒绝, 就是因为这个控制器
例如 DefaultStorageClass , 为什么我们创建的 PVC 会触发自动创建 StorageClass , 就是因为这个控制器


如何开启/关闭Admission Controllers(准入控制器)

kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger ...

kube-apiserver --disable-admission-plugins=PodNodeSelector,AlwaysDeny ...

查看启用了哪些admission plugins

kube-apiserver -h | grep enable-admission-plugins

# In the current version, the default ones are:
NamespaceLifecycle, LimitRanger, ServiceAccount, TaintNodesByCondition, Priority, DefaultTolerationSeconds, DefaultStorageClass, StorageObjectInUseProtection, PersistentVolumeClaimResize, RuntimeClass, CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, MutatingAdmissionWebhook, ValidatingAdmissionWebhook, ResourceQuota

Admission Controllers(准入控制器)做了些什么

不同的 Admission Controllers(准入控制器) 执行的功能不一样, 这里只介绍一些常见的


DefaultStorageClass

该控制器会 observe PVC 的创建请求, 如果 PVC 没有指定特定的 storage class , 该控制器会自动增加为其增加一个 default storage class


LimitRanger

该控制器会 observe 请求并确保它没有违背 Namespace 中的 LimitRange对象 枚举的任何约束.
该控制器还可以用于将应用默认的 resource requests 到 Pod(如果Pod没有指定 resource requests ). 当前的默认值为 0.1 CPU


MutatingAdmissionWebhook

该控制器 依次调用 匹配请求的 MutatingWebhookConfiguration
该控制器只工作于 mutating 阶段
如果你禁用了该控制器, 你需要同时禁用 apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration (通过 --runtime-config 参数)


ValidatingAdmissionWebhook

该控制器 并行调用 匹配请求的 ValidatingWebhookConfiguration
该控制器只工作于 validating 阶段
如果你禁用了该控制器, 你需要同时禁用 apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingWebhookConfiguration (通过 --runtime-config 参数)

你可能感兴趣的:(概念:Admission Controllers(准入控制器))