Helm 部署
CBCTF Chart 位于仓库根目录的 chart/。默认会创建应用 Deployment、Service、Ingress、ServiceAccount、ClusterRole、共享 PVC,以及内置
PostgreSQL 和 Redis。
前置要求
- Kubernetes 集群可用
- Helm 可用
- 集群可以拉取
ghcr.io/0rays/cbctf、PostgreSQL、Redis 以及题目镜像 - 如启用持久化,集群需要可用 StorageClass
- 动态附件建议使用支持
ReadWriteMany的共享存储 - VPC 靶机需要提前安装 Kube-OVN 和 Multus CNI
- KubeVirt VM 靶机需要提前安装 KubeVirt,并确认节点支持虚拟化
安装
添加 Helm Repo
须使用自定义 values
初次安装后,系统配置将以数据库中内容为准,尽可能一次性配置正确,不再从 values 中读取(但在连接数据库时会使用 values 中地址):
升级和卸载
共享 PVC 默认带有保留策略,卸载不会删除 /app/data 中的数据。PostgreSQL 和 Redis 的 PVC 也应在确认备份后再手动清理。
常用 Values
应用配置
上传大小限制已拆分为 cbctf.gin.upload.picture、cbctf.gin.upload.challenge、cbctf.gin.upload.writeup。旧的 cbctf.gin.upload.max 不再生效。
Chart 会把 JWT 密钥写入 Secret,并通过 CBCTF_GIN_JWT_SECRET 注入容器。数据库和 Redis 密码也通过 Secret 注入。
PostgreSQL 和 Redis
当前 Chart values 中没有外部 PostgreSQL 或外部 Redis 的 externalHost 配置项。如果需要使用外部数据库,需要同步调整 Chart
模板或用等价的 Service 名称接入。
Kubernetes 靶机配置
Chart 创建的 ClusterRole 包含 Pod、Service、Job、NetworkPolicy、EndpointSlice、Multus NAD、KubeVirt VirtualMachine、Kube-OVN Subnet/VPC/IP 等资源权限。Chart 不会安装 KubeVirt、Kube-OVN 或 Multus,需要时请先在集群层面安装这些组件。
Ingress 示例
安装后检查
检查初始管理员密码:
如果 Pod 反复重启,优先检查日志中的数据库、Redis、RBAC、PVC、KubeVirt、Kube-OVN/Multus 相关错误。
启动时资源检查与创建
Helm 安装后,应用启动时会检查或创建以下资源:
- 命名空间:
{namespace} - 共享存储 PVC:
{namespace}-shared-volume
PVC 缺失会导致动态附件不可用。KubeVirt 资源不会在启动时创建,只有启动包含 x-kubevirt: true 的 VM 靶机时才会创建对应
VirtualMachine。
