docker+k3s部署GZCTF

该文提供了在三台服务器上部署k3s集群和gzctf平台的详细步骤,包括服务器准备、防火墙设置、docker安装、k3s主从节点安装、调整NodePort端口范围以及容器数量限制等配置,并在gzctfweb服务器上部署gzctf应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



k3s官网

gzctf官方部署文档地址

gzctf官网

一、准备工作

1、准备三台服务器(gzctfweb、k3s-master、k3s-slave)

nameip
gzctfweb192.168.8.100
k3s-master192.168.8.101
k3s-slave192.168.8.102

2、修改用户名

hostnamectl set-hostname gzctfweb  # gzctfweb服务器执行

hostnamectl set-hostname k3s-master

hostnamectl set-hostname k3s-slave

3、关闭防火墙、清空iptables规则、(所有机器执行)

systemctl disable firewalld && systemctl stop firewalld

iptables -F

4、关闭swap分区,关闭selinux(k3s-master和k3s-slave机器执行)

sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0

swapoff -a
sed -i ' / swap / s/^\(.*\)$/#\1/g' /etc/fstab

5、配置hosts解析(k3s-master和k3s-slave机器执行)

cat >>/etc/hosts<<EOF
192.168.8.101 k3s-master
192.168.8.102 k3s-slave
EOF

二、安装docker(k3s-master和k3s-slave机器执行)

curl https://releases.rancher.com/install-docker/20.10.sh | sh

systemctl enable --now docker  # docker开启自启

三、安装k3s集群

1、k3s-master节点执行:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--docker --kube-controller-manager-arg=node-cidr-mask-size=18" sh -

systemctl enable --now k3s  # k3sserver自启

注意:在安装slave节点时,先在master节点用如下命令查看token

cat /var/lib/rancher/k3s/server/node-token

2、k3s-slave节点执行:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--docker" K3S_URL=https://myserver:6443 K3S_TOKEN=mytoken sh -  

# myserver:master节点的ip、mytoken就是在master节点查看到的内容

systemctl enable --now k3s.agent   # 开启自启

3、更改 NodePort 端口范围(k3s-master机器执行)

vim /etc/systemd/system/k3s.service

在ExecStart=/usr/local/bin/k3s最后写入如下内容
 

    --kube-apiserver-arg service-node-port-range=20000-50000

4、更改 K3s 的容器数量限制(k3s-master和k3s-slave机器执行)

①:

vim /etc/rancher/k3s/kubelet.config


编写如下内容:
 

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
maxPods: 500  # 容器数量限制

②:

vim /etc/systemd/system/k3s.service

在ExecStart=/usr/local/bin/k3s最后写入如下内容:

--kubelet-arg=config=/etc/rancher/k3s/kubelet.config

5、添加容器镜像仓库(k3s-master机器执行)

vim /etc/rancher/k3s/registries.yaml


写入以下内容(我用的是docker仓库,这里可以根据自己的实际情况更改):
 

mirrors:
  "docker.io":
    endpoint:
      - "https://hub.docker.com"

6、重启k3s集群  

systemctl daemon-reload && systemctl restart k3s  # master节点
systemctl daemon-reload && systemctl restart k3s-agent # slave节点

四、搭建gzctf(在gzctfweb机器上执行)

1、准备文件

docker-compose.yml  #在k3s官网下载

version: '3.0'
services:
  gzctf:
    image: gztime/gzctf:latest
    restart: always
    environment:
      - "GZCTF_ADMIN_PASSWORD=myctfpassword"  # gzctf管理员初始密码
    ports:
      - "8080:80"
    networks:
      default:
    volumes:
      - "./data/files:/app/uploads"
      - "./appsettings.json:/app/appsettings.json:ro"
      - "./logs:/app/log"
      # - "./data/keys:/root/.aspnet/DataProtection-Keys"
      - "./k8sconfig.yaml:/app/k8sconfig.yaml:ro"
      # - "/var/run/docker.sock:/var/run/docker.sock"
    depends_on:
      - db

  db:
    image: postgres:alpine
    restart: always
    environment:
      - "POSTGRES_PASSWORD=mydbpassword"  # 数据库的密码
    networks:
      default:
    volumes:
      - "./data/db:/var/lib/postgresql/data"

networks:
  default:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.12.0/24


appsettings.json  # 在k3s官网下载

{
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "Database": "Host=db:5432;Database=gzctf;Username=postgres;Password=mydbpassword"  //数据库的信息
    // redis is optional
    //"RedisCache": "cache:6379,password=<Redis Password>"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "EmailConfig": {
    "SendMailAddress": "a@a.com",
    "UserName": "",
    "Password": "",
    "Smtp": {
      "Host": "localhost",
      "Port": 587
    }
  },
  "XorKey": "<Random Key Str>",
  "ContainerProvider": {
    "Type": "Kubernetes", // or "Kubernetes"
    "PublicEntry": "192.168.100.101", // or "xxx.xxx.xxx.xxx"  //这里可以写k3s-master的ip
    "DockerConfig": {
      // optional
      "SwarmMode": false,
      "Uri": "unix:///var/run/docker.sock"
    }
  },
  "RequestLogging": false,
  "DisableRateLimit": false,
  "RegistryConfig": {
    "UserName": "",
    "Password": "",
    "ServerAddress": ""
  },
  "GoogleRecaptcha": {
    "VerifyAPIAddress": "https://www.recaptcha.net/recaptcha/api/siteverify",
    "Sitekey": "",
    "Secretkey": "",
    "RecaptchaThreshold": "0.5"
  }
}


k8sconfig.yaml  # 在master节点获取:cat /etc/rancher/k3s/k3s.yaml 保存为k8sconfig.yaml,
    修改k8sconfig.yaml中的server字段,将ip地址改为master节点ip,端口号不变

2. 将以上三个文件置于同一文件夹下

3、启动gzctf

docker compose -f docker-compose.yml up  # 前台运行,加-d参数可后台运行
docker compose -f docker-compose.yml stop  # 停止

docker compose -f docker-compose.yml rm  # 删除

### 如何使用 Docker 和 K3s 进行应用部署 #### 准备工作 确保期望的 k3s 使用的 Docker 镜像已经存在于主机之上。通过 `docker images` 命令可以验证镜像的存在情况[^1]。 ```bash docker images ``` 对于 K3s 的安装,推荐访问官方页面获取最新的安装命令以确保兼容性和安全性[^2]。 #### 安装 K3s 并配置其使用本地 Docker 镜像 默认情况下,K3s 可能会自动下载所需的容器运行时环境;然而为了指定使用已有的 Docker 作为容器运行时,则需按照特定方式启动 K3s 或者修改配置文件使其指向现有的 Docker Socket 文件路径。 一种常见的做法是在安装脚本中加入参数来指示 K3s 不要自带 containerd 而改用外部提供的 Docker: ```bash curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --container-runtime=external --container-runtime-endpoint=unix:///var/run/docker.sock" sh - ``` 这一步骤使得 K3s 将依赖于系统中的 Docker 来执行所有的容器操作而不是创建新的 runtime 实例。 #### 创建并部署应用程序到 K3s 集群 一旦 K3s 成功设置完毕并与 Docker 整合之后,就可以着手准备 Kubernetes 清单 (YAML) 文件定义所需的应用程序服务、Pods 等资源对象,并利用 `kubectl apply` 命令提交给集群处理。 下面是一个简单的 Nginx 应用示例 YAML 文件 (`nginx-deployment.yaml`): ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: NodePort selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 ``` 接着可以通过如下指令将其应用于当前上下文中所指代的 K3s 集群内: ```bash kubectl apply -f nginx-deployment.yaml ``` 此时应该能够看到两个副本集正在运行着基于最新版 Nginx 映像构建的服务实例,并可通过节点端口模式对外提供 Web 访问支持。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值