eskechivoi/k8s-ctf
GitHub: eskechivoi/k8s-ctf
一个基于 Kubernetes 与 Helm 的 CTF 挑战部署框架,解决安全培训中环境快速编排与分发问题。
Stars: 2 | Forks: 0
# k8s-ctf
前端、API 和 Helm 图表,用于在 Kubernetes 上轻松部署 CTF 挑战。
## ctf-api
提供一些端点来更新 CTF 挑战的图表,并为 CTF 玩家部署新的挑战。
`challenge-commons` 图表被挂载到 `ctf-api` Pod 中作为卷。API 会将新的依赖项添加到这个挂载的卷中。一个初始化容器负责从 GitHub 下载 `challenge-commons` 图表并将其添加到挂载的卷中。
### 端点:
- /api/dependencies
- GET:返回集群中安装的所有挑战图表。
- POST:在集群中安装一个新的挑战。
- challenge_name: str, chart_file: file(格式为 .tar)——(application/json)
- /api/deploy
- POST:为用户部署一个新的挑战。
- user_name: str, challenge_name: str(application/json)
## 大量图表,需要初始化吗?
实际上,每个图表文件夹在这个整体架构中都有其独立的作用:
- `challenge-commons`:是挑战的“父图表”。它被挂载到 API Pod 中。
- 为挑战定义 Ingress 规则。
- 为挑战图表定义全局值。
- `k8s-ctf-chart`:是后端和前端 Pod 的“父图表”。
- 定义访问后端和前端的 Ingress 规则。
- 定义全局值,如副本数、标签等。
- `challenge-chart-template`:用于为挑战创建新图表的模板。
- API 图表:后端 Deployment 和 Service。
- 前端图表:前端 Deployment 和 Service。
## 安装
首先,你需要确保 ctf-api 和 ctf-frontend 镜像已经构建完成,并且在 Kubernetes 集群中可访问。
假设你使用的是本地环境(如 minikube),只需在本地构建镜像即可。
一旦镜像可以从集群中访问,运行以下命令:
```
cd k8s-ctf-chart
helm dependency build
helm install k8s-ctf . \
--namespace k8sctf \
--create-namespace
```
这将创建 k8sctf 命名空间,并在其中安装 API 和前端。
### 在 minikube 内部构建镜像
```
minikube docker-env
& minikube -p minikube docker-env --shell powershell | Invoke-Expression # In powershell
```
## 卸载
```
helm uninstall k8s-ctf --namespace k8sctf
```
标签:API, chart, cve, devops, Helm, Ingress, k8s-ctf, Minikube, NIDS, SEO, 依赖管理, 初始化容器, 前端, 后端, 命名空间, 图表, 子域名突变, 容器化, 挑战, 日志审计, 服务, 本地开发, 模板, 部署