首页 > 其他分享 >Validating and Mutating Admission Controllers

Validating and Mutating Admission Controllers

时间:2022-11-08 10:24:24浏览次数:36  
标签:控制器 请求 Admission webhook server Controllers Validating controller admission

有两种类型的准入控制器,validating admission controller和mutating admission controller,前面一种对于请求只执行验证而不发生修改,后面一种会修改请求。

validating admission controller

它对于请求执行验证操作,验证是否满足条件需求。典型的如namespaceExists

在创建对应资源的时候,它会验证对应命名空间是否存在,若不存在,则不会进行创建;
这种起到验证作用的控制器,就称为验证准入控制器。

mutating admission controller

这种类型的控制器,会修改请求内容,如:defaultStorageClass,默认是启用的。

当你在提交了一个PVC请求的时候,会被该控制器拦截,并添加默认的storageClass

因此当你查看自己所创建的PVC的时候,能够看到一个storageClass,尽管在创建的时候,你并没有指定它

像defaultStorageClass这种控制器,我们称为mutating admission controller,它能够在资源对象被创建之前,对其执行修改或转换操作。

mutating admission controller在validating admission controller,前者能够请求,后者能够验证请求,允许或决绝。然而还有很多种其他类型的控制器,能够同时完成验证和修改操作,并不只是单一完成验证和修改。

通常而言,mutating admission controller在validating admission controller之前执行,这就使得前者控制器所发生的修改,在后者控制器中能够被验证。

上述描述的控制器,都是内置的它们是kubernetes源码的一部分,被编译构建到kubernetes。如果我们想要实现自己的准入控制器,完成验证和修改功能。你应该使用external admission controllers。

有两种特殊的准入控制器可供我们选择,MutatingAdmissionWebhook和ValidatingAdmissionWebhook。

mutating admission webhook

我们能够配置这些webhook控制器,指向集群内或集群外的webhook server。我们的webhook server运行着我们自己的admission webhook服务。

当请求到达我们配置的webhook控制器时,将会调用admission webhook server,通过传入一个json形式的admission review object发起请求,该object具有所有关于请求的细节,如:发出请求的用户和用户所要执行的操作类型,以及关于请求自身的一些信息;

在收到请求后,the admission webhook server将以admission review object回应请求方,显示请求是否被允许。如果相应字段的allowed为true,则请求被允许通过,否则请求被拒绝。

我们如何设置这些呢?
首先,我们需要部署admission webhook server,它具有我们定义的逻辑信息
然后,我们在kubernetes上通过创建webhook configuration object,来配置webhook。

deploy webhook server

首先是部署webhook server。这可以是api-server,也可以自定义的,仅有的要求是它能够实现修改和验证操作,并且返回一个JSON对象

下面是一些使用python实现的伪代码

上面有两段调用。/validate调用和/mutate调用。/validate接收validation webhook请求,比较对象名,谁发送了该请求,拒绝用户名不符的请求。/mutate中在label中,patch了一个用户名;patch对象是一组patch操作,每个操作可以是add、remove、replace、move、copy or test,path中指定了生效的地方,value中指定了需要add的user_name。因此我们从请求中获取用户名,并设置到特定的标签中。
这些将会以base64编码的形式,成为响应的一部分。

因此,一旦我们开发完成自己的webhook server,接下来就是部署它了。我们可以在其他地方部署它、或者容器化它,然后通过deployment将它部署在kubernetes集群内,然后配置一个service,是的请求能够访问到它,所以我们有一个名为webhook-serverice的service

接着,我们我们配置service,使得请求能够到达,达到验证和修改请求的目的。

为此,我们需要创建VlidateWebhokConfiguration对象

ClientConfig指定我们的Admission Webhook Server的位置,如果它部署在外部,我们可以填写一个url。

如果我们的Admission Webhook Server以deployment的形式部署在集群内部,同时配置了service。
此时我们可以在ClientConfig中指定Service名称和所属的命名空间

当然,Admission Webhook Server和api-server之间的通信,也是基于TLS的,因此应该配置caBundle,该server被配置了证书对,然后将证书传入该字段中。
接着我们必须要指定何时调用Webhook Server。我们可以精确地指定一组规则,何时我们的Webhook Server能被调用,我们可以指定是在创建POD、删除POD或创建Deploy等情形下调用。下面我们指定了当我们在创建POD时调用

一旦VlidatingWebhookConfiguration被创建,每次我们创建POD时,都会请求Webhook Service,依赖于响应,决定请求是否被通过。

标签:控制器,请求,Admission,webhook,server,Controllers,Validating,controller,admission
From: https://www.cnblogs.com/cosmos-wong/p/16868748.html

相关文章

  • Admission Controllers
    当我们调用kubectl来创建POD时,会经过认证环节。它使用~/.kube/config中配置的证书来完成认证:在该认证过程中,它识别哪个用户发送了该请求,并确保该用户是有效的。然后就进......
  • 【Vapor】06 Chapter 8: Controllers
    0x00Chapter8:Controllers​​上篇文章​​​把各种路由都写在了​​routes.swift​​​文件内如果路由事件太多,​​​routes.swift​​​文件就会越来越大慢慢地......