问题描述
让我们从一些上下文开始:
我正在学习 CKS 并阅读 CIS_Kubernetes_Benchmark_v1.6.0.pdf 并且有一个令人困惑的部分:
1.2.17 Ensure that the admission control plugin NodeRestriction is set (Automated)
...
Verify that the --enable-admission-plugins argument is set to a value that includes
NodeRestriction.
Remediation:
Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets.
Then,edit the API server pod specification file /etc/kubernetes/manifests/kube-
apiserver.yaml on the master node and set the --enable-admission-plugins parameter
to a value that includes NodeRestriction.
关于检查 /etc/kubernetes/manifests/kube-apiserver.yaml
是否有条目 - --enable-admission-plugins=NodeRestriction
,... 的部分是有道理的,烦人的部分是"Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets."
谷歌非常难,Kubernetes 官方文档也不清楚如何做到这一点。
既然上下文已经存在,问题是:
在kube-apiserver上设置---enable-admission-plugins=NodeRestriction
后,如何验证kubelet上的NodeRestriction插件是否配置正确?
解决方法
要正确启用 NodeRestrictions Admission Controller Plugin,您实际上需要在 3 个不同的地方更新 kubernetes 配置:
- kube-apiserver: -
--enable-admission-plugins=NodeRestriction,...
- kube-apiserver: -
--authorization-mode=Node,RBAC
(您必须指定节点) - kubelet(每个节点的):
/var/lib/kubelet/config.yaml
应该有authorization.mode: Webhook
(其他 kubernetes 发行版可能会用另一种配置方法替换/var/lib/kubelet/config.yaml
,但我确定会有一个匹配值)
当 kubelet 的 authorization.mode 设置为 Webhook 时,而不是默认的 AlwaysAllow
,它会将授权决策卸载到 kubernetes api-server。 Node Authorization模式是一种特殊用途的授权模式,专门对kubelet发出的API请求进行授权。
(下面的 Giantswarm 文章非常值得一读,并且很好地解释了为什么要实施此设置,我将尝试对其进行总结,说这是一种通用强化,有助于防止因工作负载受损或不良行为者而导致权限升级.)
来源:
1.) Kubernetes Security Essentials (LFS260)
2.) Securing the Configuration of Kubernetes Cluster Components
3.) Using Node Authorization