动态靶机
容器题类型为 pods。选手启动题目后,平台会为队伍创建独立的 Kubernetes 资源,并在页面返回可访问端点。管理员可以在后台查看、预热、停止靶机,并下载流量文件。
基础要求
Pod 网络模式
Pod 模式适合单 Pod 内多容器共享网络命名空间的题目。所有容器在同一个 Kubernetes Pod 中运行,容器之间通过 localhost:port
通信。
适用场景:
- 简单 Web、Pwn、Misc 服务
- 多个辅助容器需要共享本地网络
- 不需要为每个容器配置静态 IP
容器间不应依赖 Docker Compose 的服务名访问,应使用 localhost。
VPC 网络模式
VPC 模式适合需要多子网、静态 IP、网络隔离或模拟内网拓扑的题目。平台会基于 Kube-OVN 和 Multus 为队伍创建独立网络资源。
使用 VPC 模式前需要:
- 安装 Kube-OVN
- 安装 Multus CNI
须为每个容器配置静态 IP,容器间通信通过配置的 IP 进行访问
KubeVirt VM 模式
KubeVirt VM 模式用于把某个 docker-compose.yaml service 按 KubeVirt VirtualMachine 创建,而不是创建普通 Kubernetes
Pod。
在 compose 中为 service 设置 x-kubevirt: true 即可启用 VM 模式。代码会额外校验以下字段:
最小示例:
command、working_dir、普通环境变量和 x-volumes 不会被注入到 KubeVirt VM,请使用 x-cloudinit.write_files 写入文件和
Flag
x-cloudinit.write_files[*].content 中出现的 static{}、leet{} 或 uuid{} 会被识别为 flag 模板并在启动时替换为实际值
ports 不被使用,虚拟机不可直接暴露端口,访问路径需按题目设计单独设计
VM 必须接入至少一个 VPC 网络
端口暴露
流量捕获
容器题可使用 k8s.capture 配置的镜像进行流量捕获。管理员可在靶机或队伍详情中查看并下载 pcap 文件。
常见问题
运维建议
- 为题目容器设置合理 CPU 和内存,避免单个队伍耗尽集群资源
- 为 VM 题设置更保守的资源限制,并在比赛前压测节点可承载的 VM 数量
- 比赛前预热镜像和关键靶机,确认普通 Pod 端口、VPC 网络和 KubeVirt VM 启动正常
- 比赛期间监控 Pod Pending、ImagePullBackOff、OOMKilled 和任务队列积压
- 比赛结束后清理靶机、检查 PVC 容量并备份必要文件
