dashboard 是 Kubernetes 官方推出的控制 Kubernetes 的图形化界面,在 Kubernetes 配置不当导致 dashboard 未授权访问漏洞的情况下,通过 dashboard 我们可以控制整个集群。
在 dashboard 中默认是存在鉴权机制的,用户可以通过 kubeconfig 或者 Token 两种方式登录,当用户开启了 enable-skip-login 时可以在登录界面点击 Skip 跳过登录进入 dashboard
然而通过点击 Skip 进入 dashboard 默认是没有操作集群的权限的,因为 Kubernetes 使用 RBAC(Role-based access control) 机制进行身份认证和权限管理,不同的 serviceaccount 拥有不同的集群权限。
我们点击 Skip 进入 dashboard 实际上使用的是 Kubernetes-dashboard 这个 ServiceAccount,如果此时该 ServiceAccount 没有配置特殊的权限,是默认没有办法达到控制集群任意功能的程度的。
但有些开发者为了方便或者在测试环境中会为 Kubernetes-dashboard 绑定 cluster-admin 这个 ClusterRole(cluster-admin 拥有管理集群的最高权限)。
这个极具安全风险的设置,具体如下:
- 新建 dashboard-admin.yaml 内容如下(该配置也类似于 “利用大权限的 Service Account” 一小节的配置 )
- 执行 kubectl create -f dashboard-admin.yaml
此时用户通过点击 Skip 进入 dashboard 即可拥有管理集群的权限了。
进入到 dashboard 我们可以管理 Pods、CronJobs 等,这里介绍下我们如何通过创建 Pod 控制 node 节点。
我们新建一个以下配置的 Pod,该 pod 主要是将宿主机根目录挂载到容器 tmp 目录下。
之后我们便可以通过该容器的 tmp 目录管理 node 节点的文件。
值得注意的是,为了集群的稳定性和安全性要求,在 Kubernetes 默认设计的情况下 Pod 是不能调度到 master 节点的,但如果用户自行设置关闭了 Master Only 状态,那么我们可以直接在 master 节点新建 Pod 更直接的控制 master node;不过目前各大主流云产商上的 Kubernetes 集群服务,都会默认推荐让 Master 节点由云厂商托管,更加加剧了 Master 节点渗透和控制的难度 。