美文网首页
概念:Admission Controllers(准入控制器)

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

作者: 坚持到底v2 | 来源:发表于2021-03-08 11:29 被阅读0次

    什么是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(准入控制器)

          本文链接:https://www.haomeiwen.com/subject/cldpqltx.html