本篇指南仅适用于接触过 K8s 的用户。此篇文章不会介绍如何搭建 K8s 集群,也不会含有如何使用 kubectl
等命令的教程,同时文中可能出现一些 K8s 的专业术语,需要一定的基础进行阅读。
本文将着重介绍如何在 K8s 集群中部署 GZCTF,GZCTF 自身的配置教程请参考 快速上手。
GZCTF 支持多实例部署,但经测试,目前来说仅单实例部署且和数据库位于同一节点的部署方式是最稳定的,因此本文中将以单实例部署为例进行介绍。
多实例部署时,全部的实例应当使用 S3 对象存储以确保文件一致性和并发写入(参见 #365),此外,需要部署 Redis 以确保多实例之间的缓存一致性。请参考 appsettings 文档进行配置。支持 Azure / AWS / Minio。
多实例部署时,负载均衡器需要配置 sticky session,否则无法使用 websocket 来获取实时数据。
如果你不想那么麻烦,那就部署单实例吧!
既然选择使用 K8s 进行部署,一定程度上说明你需要更大的 Pod 数量,请务必注意如下配置项:
在安装时指定 --kube-controller-manager-arg=node-cidr-mask-size=16
,默认的 CIDR 为 /24
,最多支持 255 个 Pod。此配置项在安装后无法更改。
请自行调整 maxPods
的值,否则可能会导致 Pod 数量达到上限而无法调度。
创建命名空间及配置文件
创建本地 PV(如果需要多实例共享存储请自行更改配置)
创建 GZCTF 的 Deployment
创建 Service 和 Ingress
Traefik 的额外配置
为了让 GZCTF 能够正常通过 XFF 获取用户真实 IP,需要让 Traefik 能够正确地添加 XFF 头。请注意如下内容不一定总是具有时效性和适用于所有版本的 Traefik,此处举例为 helm values,请自行查找最新的配置方法。
GZCTF_ADMIN_PASSWORD
环境变量,否则需要手动创建管理员账户。https://kubernetes.default.svc.cluster.local:443
作为集群配置文件中的 server
字段。