前言
Admission Controller准入控制器作为把守kubernetes系统安全的最后一道关卡,对已知且有权限用户的操作合规性验证是缺一不可的!
1、什么是准入控制器?
准入控制器(Admission Controller)位于API Server中,在对象被持久化之前,准入控制器拦截对API Server的请求,一般用来做身份验证和授权。
其中包含两个特殊的控制器钩子:
MutatingAdmissionWebhook和ValidatingAdmissionWebhook
1、变更(Mutating)准入控制
工作逻辑为修改请求的对象
2、验证(Validating)准入控制
工作逻辑为验证请求的对象
上面的两种控制器可以分而治之,也能合作运行!
2、为什么我们需要它?
就像我在上一章节提到的那样,准入控制器的引入可以很好的帮助我们运维人员,站在一个集群管理者的角度,去“限定”和规划集群资源的合理利用策略和期望状态。
同时,很多kubernetes的高级功能,也是基于准入控制器之上进行建设的。
3、常用的准入控制器
1、AlwaysPullImages
总是拉取镜像;
好处:可以避免本地系统处于非安全状态时,被别人恶意篡改了本地的容器镜像
2、LimitRanger
此准入控制器将确保所有资源请求不会超过namespace级别的LimitRange(定义Pod级别的资源限额,如cpu、mem)
3、ResourceQuota
此准入控制器负责集群的计算资源配额,并确保用户不违反命名空间的ResourceQuota对象中列举的任何约束
(定义名称空间级别的配额,如pod数量)
4、PodSecurityPolicy
此准入控制器用于创建和修改pod,
并根据请求的安全上下文和可用的Pod安全策略确定是否应该允许它。
4、如何开启准入控制器
在kubernetes环境中,你可以使用kube-apiserver命令结合enable-admission-plugins的flag,后面需要跟上以逗号分割的准入控制器清单,如下所示:
kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger …