13. 禁⽌匿名访问
问题:
由 kubeadm 创建的 cluster 的 Kubernetes APl服务器,出于测试目的,临时配置为允许未经身份验证和未经授权的访问,授予匿名用户 cluster-admin 的访问权限。
Task
重新配置 cluster 的Kubernetes API 服务器以确保只允许经过身份验证和授权的 REST 请求。
使用授权模式 Node,RBAC 和准入控制器NodeRestriction。
删除用户 system:anonymous 的ClusterRoleBinding 来进行清理。
所有 kubectl 配置环境/文件也被配置为使用未经身份验证和未经授权的访问。您不必更改它,但请注意,一旦完成 cluster 的安全加固, kubectl 的配置将无法工作。
:::info
您可以使用位于 cluster 的 master 节点上, cluster 原本的 kubectl 配置文件/etc/kubernetes/admin.conf,以确保经过身份验证和授权的请求仍然被允许。
:::
正确答案:
题干要求解析:
一、重新配置 cluster 的Kubernetes API 服务器
每次看到api服务器的时候,一定要想到这个会不会是apiservice的配置文件呢?
带着这个疑问,我们一定要去查帮助文档,刚开始肯定摸不着头脑要去哪里查帮助文档,如果以后遇到配置文件类型的问题,去这个位置查找帮助文档。
二、确保只允许经过身份验证和授权的 REST 请求
这里一定要注意,kubelet必须要满足两个条件:1、通过身份验证,2、授权REST请求。
考试时一定要检查这两个参数是否存在,多加会报错
–anonymous-auth:这个参数仅仅是把授权请求开启了
–enable-bootstrap-token-auth:这个参数才是开启身份验证
所以必须得加两个参数,之前加的一个参数是错的。切记!切记!切记!
–anonymous-auth 这个参数正好对应的这个要求,值需要修改成false,表示必须得进行身份验证和授权。如果你改成true的话,那么就表示允许匿名访问了。
–enable-bootstrap-token-auth 这个参数正好对应的了通过身份验证的要求,值需要修改为ture,表示我需要开启TLS引导身份验证。
**三、**使用授权模式 Node,RBAC 和准入控制器NodeRestriction。
**四、**删除用户 system:anonymous 的ClusterRoleBinding
为什么要删除这个用户呢?是为了更加的安全,权限太大了。
更改授权模式为Node,RBAC并添加准⼊控制器NodeRestriction:
1 candidate@hk8s-master01:~$ sudo vim /etc/kubernetes/manifests/kubeapiserver.yaml
2 - --authorization-mode=Node,RBAC #考试环境中修改这两⾏
3 - --enable-admission-plugins=NodeRestriction #添加这个
- --client-ca-file=/etc/kubernetes/pki/ca.crt #又新加了这两个参数,需要核实一下
- --enable-bootstrap-token-auth=true #
- --anonymous-auth=false ##这个也加上,可能这个人做的也不对