Docker和K8s引擎配置安装指南

本文档介绍如何配置和安装Docker引擎和Kubernetes引擎,用于SECSNOW平台的题目容器服务。


一、Docker引擎配置

1.1 本地模式

适用场景:系统服务和题目服务在同一台主机。

配置步骤

  1. 确保Docker已安装
   docker --version
  1. 在后台管理界面配置

  2. 引擎名称:填写名称(如:本地Docker)

  3. 引擎类型:选择 Docker
  4. 主机类型:选择 本地模式
  5. 主机地址:填写系统主机IP
  6. 端口:不需要填写
  7. TLS:不需要启用

  8. 保存配置

1.2 远程模式

适用场景:系统服务和题目服务在不同主机。

步骤一:在题目服务器安装Docker

# 安装Docker(以Ubuntu为例)
curl -fsSL https://get.docker.com | sh

# 启动Docker服务
systemctl start docker
systemctl enable docker

步骤二:开启Docker远程访问(TLS加密)

方法一:使用一键脚本(推荐)

在题目服务器执行(脚本在系统安装目录的config_sh目录下):

cd /opt/secsnow-install/config_sh
chmod +x enable_docker_remote_tls.sh
./enable_docker_remote_tls.sh

脚本会自动:

  • 生成TLS证书(CA证书、客户端证书、客户端密钥)
  • 配置Docker daemon支持远程TLS访问
  • 重启Docker服务

方法二:手动配置(可能不可用)

  1. 创建证书目录
   mkdir -p /etc/docker/certs
   cd /etc/docker/certs
  1. 生成证书(参考enable_docker_remote_tls.sh脚本)

  2. 配置Docker daemon

   # 编辑 /etc/docker/daemon.json
   {
     "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"],
     "tls": true,
     "tlsverify": true,
     "tlscacert": "/etc/docker/certs/ca.pem",
     "tlscert": "/etc/docker/certs/server-cert.pem",
     "tlskey": "/etc/docker/certs/server-key.pem"
   }
  1. 重启Docker
   systemctl restart docker
  1. 开放防火墙端口
   # 开放2376端口
   firewall-cmd --permanent --add-port=2376/tcp
   firewall-cmd --reload

步骤三:在平台后台配置

  1. 下载证书文件

  2. 从题目服务器的 /etc/docker/certs/ 目录下载:

    • ca.pem (CA证书)
    • client-cert.pem (客户端证书)
    • client-key.pem (客户端密钥)
  3. 在后台管理界面配置

  4. 引擎名称:填写名称(如:远程Docker)

  5. 引擎类型:选择 Docker
  6. 主机类型:选择 远程模式
  7. 主机地址:填写题目服务器IP(如:192.168.1.100)
  8. 端口:填写 2376
  9. 启用TLS:勾选
  10. 上传CA证书:选择 ca.pem
  11. 上传客户端证书:选择 client-cert.pem
  12. 上传客户端密钥:选择 client-key.pem

  13. 保存配置


二、Kubernetes引擎配置(K3s/K8s)

2.1 K3s安装(单节点/主节点)

适用场景:小型集群或测试环境。

步骤一:安装K3s主节点

# 使用国内镜像源安装K3s
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
  INSTALL_K3S_MIRROR=cn \
  sh -s - server \
  --system-default-registry=registry.cn-hangzhou.aliyuncs.com \
  --write-kubeconfig-mode=644

安装完成后

  • K3s服务自动启动
  • kubeconfig文件位置:/etc/rancher/k3s/k3s.yaml
  • 服务端口:6443

步骤二:获取kubeconfig文件

# 查看kubeconfig内容
cat /etc/rancher/k3s/k3s.yaml

# 或复制到当前用户目录
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config

步骤三:在平台后台配置

  1. 下载kubeconfig文件

  2. 从K3s服务器的 /etc/rancher/k3s/k3s.yaml 下载

  3. 修改kubeconfig中的server地址

  4. server: https://127.0.0.1:6443 修改为实际IP

  5. 例如:server: https://10.3.12.4:6443

  6. 在后台管理界面配置

  7. 引擎名称:填写名称(如:K3s集群)

  8. 引擎类型:选择 Kubernetes (k3s/k8s)
  9. 上传kubeconfig:选择修改后的 k3s.yaml 文件
  10. 命名空间:填写命名空间(默认:ctf-challenges)
  11. 验证SSL证书:内网环境建议关闭

  12. 保存配置

2.2 K3s Agent节点(可选)

如果需要添加Agent节点:

# 在主节点获取token
cat /var/lib/rancher/k3s/server/node-token

# 在Agent节点执行(替换TOKEN和MASTER_IP)
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
  INSTALL_K3S_MIRROR=cn \
  K3S_URL=https://MASTER_IP:6443 \
  K3S_TOKEN=TOKEN \
  sh -

注意:平台只需要连接主节点即可,会自动管理整个集群。

2.3 K8s集群(生产环境)

适用场景:大型比赛或生产环境。

步骤一:安装K8s集群

按照Kubernetes官方文档安装集群,或使用kubeadm等工具。

步骤二:获取kubeconfig文件

# 通常位置
~/.kube/config

# 或从master节点复制
scp user@master:~/.kube/config ~/.kube/config

步骤三:在平台后台配置

  1. 下载kubeconfig文件

  2. 在后台管理界面配置

  3. 引擎名称:填写名称(如:K8s生产集群)
  4. 引擎类型:选择 Kubernetes (k3s/k8s)
  5. 上传kubeconfig:选择kubeconfig文件
  6. 命名空间:填写命名空间(默认:ctf-challenges)
  7. 验证SSL证书:根据实际情况选择
  8. 安全级别:根据需求选择(低/中/高/自定义)

  9. 保存配置


三、配置验证

3.1 测试Docker连接

在后台管理界面: 1. 选择已配置的Docker引擎 2. 点击"测试引擎连接"操作 3. 查看连接结果

3.2 测试K8s连接

在后台管理界面: 1. 选择已配置的K8s引擎 2. 点击"测试引擎连接"操作 3. 查看连接结果

3.3 查看健康状态

配置成功后,系统会自动检查引擎健康状态: - 健康:引擎运行正常 - 警告:资源使用率较高 - 严重:资源使用率过高或节点异常 - 离线:无法连接


四、常见问题

4.1 Docker远程连接失败

检查项

  • 防火墙是否开放2376端口
  • TLS证书是否正确配置
  • Docker daemon配置是否正确
  • 网络是否可达

解决方法

# 检查Docker服务状态
systemctl status docker

# 检查端口监听
netstat -tlnp | grep 2376

# 查看Docker日志
journalctl -u docker -n 50

4.2 K8s连接失败

检查项

  • kubeconfig文件是否正确
  • server地址是否可访问
  • 6443端口是否开放
  • SSL证书验证是否正确

解决方法

# 测试K8s连接
kubectl --kubeconfig=/path/to/kubeconfig.yaml get nodes

# 检查端口
telnet K8S_IP 6443

# K3s查看服务状态
systemctl status k3s

4.3 权限问题

Docker

  • 确保当前用户有权限访问Docker socket
  • 或使用sudo执行docker命令

K8s

  • 确保kubeconfig中的用户有足够权限
  • 检查RBAC配置

五、性能建议

5.1 Docker引擎

  • 本地模式:适用于测试环境,不推荐生产环境
  • 远程模式:生产环境推荐,必须启用TLS
  • 资源限制:根据题目服务器性能调整

5.2 K8s引擎

  • K3s:适用于中小型比赛(<500人)
  • K8s集群:适用于大型比赛(>500人)
  • 节点配置:建议4核8GB内存以上
  • 命名空间隔离:使用独立命名空间(ctf-challenges)