Kubernetes Admission Control(准入控制)

原创
半兽人 发表于: 2018-11-08   最后更新时间: 2019-10-09 10:28:43  
{{totalSubscript}} 订阅, 4,890 游览

Admission Control(准入控制)

通过认证和鉴权之后,客户端并不能得到API Server的真正响应,这个请求还需通过Admission Control所控制的一个“准入控制链”的层层考验。

Admission Control配备有一个“准入控制器”的插件列表,发送给API Server的任何请求都需要通过列表中每一个准入控制器的检查,检查不通过API Server拒绝此调用请求。

此外,准入控制器还能够修改请求参数以完成一些自动化的任务,比如Service Account这个控制器。

当前可配置的Admission Control准入控制如下:

  • AlwaysAdmit:允许所有请求;

  • AlwaysPullmages:在启动容器之前总去下载镜像,相当于在每个容器的配置项imagePullPolicy=Always

  • AlwaysDeny:禁止所有请求,一般用于测试;

  • DenyExecOnPrivileged:它会拦截所有想在Privileged Container上执行命令的请求,如果你的集群支持Privileged Container,你又希望限制用户在这些Privileged Container上执行命令,强烈推荐你使用它,其功能已经合并到DenyEscalatingExec中。

  • ImagePolicyWebhook:这个插件将允许后端的一个Webhook程序来完成admission controller的功能。ImagePolicyWebhook需要使用一个配置文件(通过kube-apiserver的启动参数--admission-control-config-file设置)定义后端Webhook的参数。目前该插件还处在Alpha版本。

  • Service Account:这个plug-in将ServiceAccount实现了自动化,默认启用,如果你想使用ServiceAccount对象,那么强烈推荐使用它。

  • SecurityContextDeny:这个插件将使用SecurityContext的Pod中的定义全部失效。SecurityContext在Container中定义了操作系统级别的安全设定(uid,gid,capabilityes,SELinux等)。在未启用PodSecurityPolicy的集群中建议启用该插件,以禁用容器设置的非安全访问权限。

  • ResourceQuota:用于资源配额管理目的,作用于namespace上,它会观察所有请求,确保在namespace上的配额不会超标。推荐在Admission Control参数列表中将这个插件安排在最后一个,以免可能被其他插件拒绝的Pod被过早分配资源。

  • LimitRanger:用于资源限制管理,作用于namespace上,确保对Pod进行资源限制。启用该插件还会为未设置资源限制的Pod进行默认设置,例如为namespace "default"中所有的Pod设置0.1CPU的资源请求。

  • InitialResources:是一个实验特性,旨在为未设置资源请求与限制的Pod,根据其镜像的历史资源的使用情况进行初始化的资源请求、限制设置。

  • NamespaceLifecycle:如果尝试在一个不存在的namespace中创建资源对象,则该创建请求将被拒绝。当删除一个namespace时,系统将会删除该namespace中所有对象,保存Pod,Service等。

  • DefaultStorageClass:为了实现共享存储的动态供应,为未指定StorageClass或PV的PVC尝试匹配默认的StorageClass,尽可能减少用户在申请PVC时所需了解的后端存储细节。

  • DefaultTolerationSeconds:这个插件为那些没有设置forgiveness tolerations并具有notready:NoExecute和unreachable:NoExecute两种taints的Pod设置默认的“容忍”时间,为5min。

  • PodSecurityPolicy:这个插件用于在创建或修改Pod时决定是否根据Pod的security context和可用的PodSecurityPolicy对Pod的安全策略进行控制。

在API Server上设置--admission-control参数,即可定制我们需要的准入控制链。

如果启用多种准入控制选项,则建议的设置(含加载顺序)如下(对k8s v1.6及以上版本建议设置):

--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,Persistent VolumeLabel, DefaultStorageClass, ResourceQuota,  DefaultTolerationSeconds
更新于 2019-10-09
在线,1小时前登录

Ethan 2年前

到此一游

半兽人 -> Ethan 2年前

这里的水很深,一般人把握不住的。

查看kubernetes更多相关的文章或提一个关于kubernetes的问题,也可以与我们一起分享文章