2025数证杯集群服务器取证(仅构建服务器 & Kubernetes(K8S)集群服务器构建)
前言
笔者写这一篇是因为不想在2025数证杯初赛详细wp中重复k8s服务器构建的描述,也希望读者可以在这篇里学习搭建k8s服务器,笔者水平有限,望请指正海涵。
正文
用的是火眼取证工具

可知有三个主机,"服务器检材01.E01"是master,"服务器检材02.E01"和"服务器检材03.E01"则是2个 node。
"服务器检材04.E01"暂时不知道,下文再讨论。

网络配置的话,比赛建议直接改自己的虚拟网卡配置。先选中工具栏中的编辑,点击虚拟网络编辑器,然后我们把自己的虚拟网卡的子网IP的C段改成50,与服务器主机保持一致,可以查看一下DHCP,一般会自动改,没有变化的话就手动改一下。

全部仿真以来之后通过 kubectl get nodes 查看节点信息

到这里,仿真和网络配置就成功了。
但是你用node主机时,就会发现通信无法成功。

http://localhost:8080/api是报错的原因,因为kubectl没有使用到证书和 API 服务器地址,从而与 k8s 集群通信。
echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profile
通过这个命令,可以临时设置 KUBECONFIG 环境变量,而且重启终端 / 服务器后,这个变量就会失效,是因为 export 仅在当前 shell 会话中生效。
接着,通过:
source /etc/profile
这是加载系统级环境变量配置文件的命令,核心作用是让 /etc/profile 中修改的配置立即生效,无需重启终端或服务器。

kubectl get pv ,查看 Kubernetes 集群中的 PersistentVolume(持久卷,简称 PV)。

可知有一个dujiaoka(可能是独角数卡),这应该就是发卡网站。

查看pv信息,系统是NFS,Server是192.168.50.83,这是服务器镜像 4 的IP地址。

目录是/data/k8s_data/default/dujiaoka

但是该目录下没有相应的文件。

而是在mysql80里面。
仿真好后,开始查看文件目录。

从根目录切换到了 /data/k8s_data/default/ 目录,并查看了该目录下的 3 个文件夹。
ll 是 ls -l 的别名,用来显示详细信息。

发现有三个pod存在问题。
先从服务器4开始下手。
服务器4无法ssh连接,发现其 sshd 配置了禁止挑战-验证登录,于是修改 sshd_config。
sudo vim /etc/ssh/sshd_config
这里是可以考虑备份原配置文件的,笔者没有备份,这里只是给个建议。

进行更改:

#代表注释了。
关掉防火墙。

此时已经可以连接了。

(ssh连接的话用exit退出)
到现在,再次输入指令,master节点只有1个pod无法正常运行。

通过指令,查看Pod的启动事件
kubectl describe pod -n default captchaBot-6H4d85b765-25xq6

先确定在哪一个节点上

在node2上。不过按理说,kubectl describe pod -n default captchaBot-6H4d85b765-25xq6是可以显示node的,但是可能我仿真的有问题,无法查看到前半部分内容。
不过不影响大局。
接着在node2中,通过日志检查问题出现的地方。


之所以是3b67f,是因为这是容器 ID 的前 5 位缩写,核心逻辑是:用容器 ID 的 “前缀唯一标识” 快速定位容器,无需输入完整 ID。也可以输入更多的ID,事实上,只要输入的 前缀能唯一区分当前主机上的所有容器,Docker 就会自动识别对应的容器;
根据报错显示数据库连不上。而这个数据库就运行在192.168.50.80:30627上。
接下来就是要重建数据库了。
先查看一下master节点根目录下的配置文件。

接着配置相关的文件,图片是最开始的代码,实际上只需要apply mysql80即可,因为服务器4用的就是mysql80,而mysql57可以不添加。mysql-c同样如此。

现在,存在问题的pod:


笔者通过这个指令进行批量与k8s有关的yaml文件的部署。
bash~~ ~~ sudo find / -type f ( -name "*.yaml" ) 2>/dev/null ~~ ~~ | grep -E "k8s|kubernetes|mysql|deploy|service|pod|namespace|configmap|secret|pvc|pv"~~ ~~ | xargs -I {} kubectl apply -f {}~~ ~~
一键部署和更新
kubectl apply -f .

结果显示php-nginx还是容器创建阶段。
这是因为node里根本没有这个镜像,现在要从master中导出并传到node中。

确认:

通过scp上传。

在node上分别下载。

这里的mysql157是没必要的

将服务器的4 /root/dujiaoka.tar 中的源码恢复到 /data/k8s_data/default/ 目录下即可。
这样,就重建成功了。

后续
一开始是没有建成的,笔者又重新搭建了一遍。
这里给出一些不同之处。
通过指令
kubectl create token dashboard-admin --namespace kube-system
创建一个token令牌,以此登录后端网站。

这里一开始笔者就想这么做的,但是在笔者的虚拟机里,复制粘贴是不允许的,笔者就在终端输代码,结果第一次失败了。第二次,笔者用自己主机的终端ssh到master里,这样就可以复制粘贴了,这算是一个技巧了。

还要注意在设置里加一下命名空间。
这一次,在服务器4上,笔者只关了防火墙,其他配置没动。
一键部署和更新换成了这个
kubectl apply -f .
其他操作几乎一样,就先这样吧。








