kube-bench 修复不安全项
Context
针对 kubeadm 创建的 cluster 运行 CIS 基准测试工具时,发现了多个必须立即解决的问题。
Task
通过配置修复所有问题并重新启动受影响的组件以确保新的设置生效。
修复针对 APIserver 发现的所有以下违规行为:
1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow FAIL
1.2.8 Ensure that the --authorization-mode argument includes Node FAIL
1.2.9 Ensure that the --authorization-mode argument includes RBAC FAIL
1.2.18 Ensure that the --insecure-bind-address argument is not set FAIL (1.25 中这项题目没给出,但最好也检查一下,模拟环境里需要改)
1.2.19 Ensure that the --insecure-port argument is set to 0 FAIL (1.25 中这项题目没给出,不需要再修改了)
修复针对 kubelet 发现的所有以下违规行为:
Fix all of the following violations that were found against the kubelet:
4.2.1 Ensure that the anonymous-auth argument is set to false FAIL
4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow FAIL
注意:尽可能使用 Webhook 身份验证/授权。
修复针对 etcd 发现的所有以下违规行为:
Fix all of the following violations that were found against etcd:
2.2 Ensure that the --client-cert-auth argument is set to true FAI
(1)请先切换环境
kubectl config use-context k8s
(2)切换到Mster的Root下, 同时备份三个文件
ssh master01
sudo -i
cd
mkdir bak
cp /etc/kubernetes/kube-apiserver.yaml ~/bak
cp /etc/kubernetes/kube-etcd.yaml ~/bak
cp /var/lib/kubelet/config.yaml ~/bak
(3)修改/etc/kubernetes/manifests/kube-apiserver.yaml
vi /etc/kubernetes/manifests/kube-apiserver.yaml
#修改、添加、删除相关内容
#修改 authorization-mode,注意 Node 和 RBAC 之间的符号是英文状态的逗号,而不是点。
- --authorization-mode=Node,RBAC
#删除 insecure-bind-address,考试中,有可能本来就没写这行。
- --insecure-bind-address=0.0.0.0
(4)修改kubelet(/var/lib/kubelet/config.yaml)
vim /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous: #修改 anonymous 下的,将 true 改为 false
enabled: false #将 true 改为 false
webhook:
cacheTTL: 0s
enabled: true #这个 webhook 下的要检查一下,确保是 true,根据最新的考试反馈,这里有可能错误的写成了 false。
x509:
clientCAFile: /etc/kubernetes/pki/ca.crt
authorization: #修改 authorization 下的
mode: Webhook #改为 Webhook
webhook:
……
#修改kubelet之后要重新启动
systemctl daemon-load
systemclt restart kubelet
(5)修改/etc/kubernetes/manifests/etcd.yaml
vim /etc/kubernetes/manifests/etcd.yaml
##修改
- --client-cert-auth=true #修改为 true
(6)都修改完之后要确定环境中的pod是否都是正常的
(做下一题之前,确保所有的 pod 都是 Running)
kubectl get pod -A
(7)回到做提起点
exit #退出root
exit #退出master