Context
针对 kubeadm 创建的 cluster 运行 CIS 基准测试工具时,发现了多个必须立即解决的问题。
Task
通过配置修复所有问题并重新启动受影响的组件以确保新的设置生效。
修复针对 API 服务器发现的所有以下违规行为:
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 (v1.28 考题中这项没给出,但最好也检查一下)
修复针对 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 FAIL
参考资料:
https://kubernetes.io/zh/docs/reference/config-api/kubelet-config.v1beta1/
答题:
1、切换到 Master 的 root 下
ssh master01
sudo -i
2、修改api-server
#备份配置文件
cp /etc/kubernetes/manifests/kube-apiserver.yaml /tmp
vim /etc/kubernetes/manifests/kube-apiserver.yaml
#修改、添加、删除相关内容
#修改 authorization-mode,注意 Node 和 RBAC 之间的符号是英文状态的逗号,而不是点。- --authorization-mode=Node,RBAC
#删除 insecure-bind-address。实际考试中,有可能本来就没写这行。- --insecure-bind-address=0.0.0.0
3、修改kubelet
cp /var/lib/kubelet/config.yaml /tmp
vim /var/lib/kubelet/config.yaml
#修改
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:anonymous: #修改 anonymous 下的,将 true 改为 falseenabled: false #将 true 改为 falsewebhook:cacheTTL: 0senabled: true #修改为 true。注意,这两个 enabled 千万不要搞混,anonymous 应该为 false,webhook 应该为 true。考试时,可能只有一个是错误的。x509:clientCAFile: /etc/kubernetes/pki/ca.crt
authorization: #修改 authorization 下的mode: Webhook #改为 Webhookwebhook:
......
4、修改etcd
cp /etc/kubernetes/manifests/etcd.yaml /tmp
vim /etc/kubernetes/manifests/etcd.yaml
修改- --client-cert-auth=true #修改为 true
#编辑完后重新加载配置文件,并重启 kubelet
systemctl daemon-reload
systemctl restart kubelet
修改完成后,等待 5 分钟,再检查一下所有 pod,确保模拟环境里的所有 pod 都正常。
kubectl get pod -A