K8s 集群搭建
本文介绍如何搭建支持 CBCTF 动态附件题和容器题的 Kubernetes 集群。
硬件要求
准备多台运行高版本内核的 Linux 服务器,下文以一台 master 与 两台 worker 组成的 K3S 集群为例。
本教程主要关注平台所需的集群依赖,对于 KubeVirt / Kube-OVN / Multus 的具体使用和细节不在文档内容中涉及,更多内容请参考各自官方文档。
KubeVirt 节点要求
VM 靶机依赖 KubeVirt。集群节点需要支持硬件虚拟化或可用的嵌套虚拟化能力,或是由 KubeVirt 实现软件嵌套虚拟化,但会影响其性能。
检查节点虚拟化能力:
返回值大于 0 通常表示节点 CPU 暴露了虚拟化能力。若运行在云厂商或虚拟化平台中,还需要确认该环境允许嵌套虚拟化。
安装 NFS 客户端
动态附件与题目文件共享依赖 RWX 存储。所有节点需要安装 NFS 客户端:
安装 Helm
安装 K3S
Master 节点
安装完成后:
- kubeconfig 位于
/etc/rancher/k3s/k3s.yaml - 节点 Token 位于
/var/lib/rancher/k3s/server/node-token
Worker 节点
安装 Kube-OVN
提供 VPC 网络隔离功能。
为节点打上 Label,参考 Helm chart for Kube-OVN
添加 Helm Repo
根据集群网络规划,可以把 Kube-OVN 安装为主 CNI,也可以安装为副 CNI。
主 CNI 模式由 Kube-OVN 接管集群默认 Pod 网络,适合新建集群或计划完全使用 Kube-OVN 作为主网络插件的环境。
主 CNI 安装会影响集群默认网络。已有生产集群切换主 CNI 风险较高,建议仅在新集群中使用。
如果使用 K3S 并希望 Kube-OVN 作为主 CNI,安装 K3S 时应禁用默认 flannel 和 network-policy:
使用 kube-ovn-v2 chart
values.yaml
安装
安装 Multus CNI
为 VPC 网络模式靶机提供多网卡支持:
安装 KubeVirt
为 VM 靶机提供 VirtualMachine 资源和运行时能力。建议按 KubeVirt 官方文档安装稳定版本,并确认 kubevirt 命名空间中的组件 Ready。
CBCTF 只会创建和删除 VirtualMachine 资源,不会自动安装 KubeVirt。VM 题目镜像需要由出题人制作成 KubeVirt 可启动的 containerDisk 镜像。
配置 StorageClass
动态附件依赖支持 ReadWriteMany 的 PVC。K3S 默认 local-path 不支持 RWX,需改用 NFS 等共享存储方案。
建议流程:
- 取消
local-path的默认 StorageClass 标记 - 安装支持 RWX 的 StorageClass
- 将 RWX 存储类设为默认,或在 Helm
persistence.storageClass中显式指定
以安装 nfs-subdir-external-provisioner 为例
添加 Helm Repo
values.yaml
安装
