准入控制器 修改
Kubernetes支持30多个准入控制器。 在授权和身份验证之后 , 准入控制器是三步过程的最后一步,之前Kubernetes将资源etcd
在etcd
(一个一致且高度可用的键值存储,用作所有集群数据的Kubernetes的后备存储)。 一些有关确保运行中的容器安全的准入控制器是:
- PodSecurityPolicy:此选项基于安全上下文和可用策略来实现Pod接纳。
- DenyEscalatingExec:黑客在特权容器中打开外壳时,他们可以访问主机。 此选项可确保阻止特权容器中的
exec
和attach
命令。 - AlwaysPullImages:虽然在节点上存储和重用图像具有性能优势,但保持卫生和确保始终运行最新容器图像可能很重要。 由于漏洞是在上游修补的,因此提取映像可确保始终下载最新的补救措施。
- LimitRange和ResourceQuota:为防止拒绝服务攻击以及已建立的Pod产生未经授权的进程,此选项将观察传入的请求是否违反了这些限制。
- NodeRestriction:这限制了每个
kubelet
的权限,kubelet
确保它只能修改绑定到其及其自己的Node对象的pod。
节点限制
此准入控制器限制kubelet
可以修改的Node
和Pod
对象。 为了受此准入控制器的限制, kubelet
必须使用system:node
组中的凭据,其用户名格式为system:node:<NodeName>
。 仅允许此类kubelet
修改其自己的Node API
对象。
NodeRestriction
准入插件可防止kubelet
删除其Node API
对象,并在kubernetes.io/
或k8s.io/
前缀下强制对标签进行kubelet
修改,如下所示:
- 允许
kubelet
添加/删除/更新以下标签和标签前缀: - 防止
kubelet
使用node-restriction.kubernetes.io/
前缀添加/删除/更新标签。 此标签前缀保留供管理员用来标记其Node
对象以隔离工作负载,并且kubelet
不允许使用该前缀修改标签。
kubelet
保留在kubernetes.io
或k8s.io
前缀下使用任何其他标签,并且kubernetes.io
可能被NodeRestriction
允许插件禁止或允许。
将来的版本可能会添加其他限制,以确保kubelets
具有正常运行所需的最小权限集。
我们需要他们吗?
Kubernetes中的许多高级功能都需要启用Admission Controller,以正确支持该功能。 因此,未使用正确的访问控制器集正确配置的Kubernetes API服务器是不完整的服务器,将不支持您期望的所有功能。
打开准入控制器
Kubernetes API服务器标志enable-admission-plugins
以逗号分隔的准入控制插件列表在修改集群中的对象之前要调用。 例如,以下命令行启用NamespaceLifecycle
和LimitRanger
准入控制插件:
kube-apiserver --enable -admission-plugins=NamespaceLifecycle,LimitRanger
注意:根据您的Kubernetes集群的部署方式和API服务器的启动方式,您可能需要以不同的方式应用设置。 例如,如果将API部署为systemd
服务,则可能需要修改systemd
单元文件; 如果以自托管方式部署Kubernetes,则可能需要修改API服务器的清单文件。
推荐的准入控制器组
对于Kubernetes 1.10及更高版本,建议使用--enable-admission-plugins
标志运行一组Admission Controllers。
对于Kubernetes 1.9及更早版本,建议使用--admission-control
标志运行一组Admission Controllers。
在下一篇文章中,我们将详细介绍Kubernetes授权和RBAC。
关于作者-Sudip是一位具有15年以上工作经验的解决方案架构师,并且是Javelynn的创始人。 他喜欢通过写作分享自己的知识,当他不这样做时,他一定是在钓鱼或下棋。
先前发布在 https://appfleet.com/上 。
翻译自: https://hackernoon.com/a-guide-to-kubernetes-admission-controllers-zly3uoh
准入控制器 修改