原文地址: 在k8s上运行雷池社区版
前言
最近在学习k8s,想着在k8s上部署一些应用练练手,于是就用雷池社区版上手试了一下,简单把本次整理的配置过程都整理出来。
运行环境
系统:Unbuntu 22.04
配置:2C8G
磁盘:40G
使用工具:minikube v1.31.1
雷池社区版v2.4.0
配置文件和相关配置
配置文件通过对 kompose 工具生成后的 yaml 进行一定的修改得到,其中分为两个部分,一是WAF的主要运行模块配置文件,二是存储数据库配置文件。由于数据库的配置并没有具体地做信息持久化的配置,因此如果有自己的数据库集群可以参考第二步的1和2对相应配置进行相应更改。
下载配置文件后移动到相应目录后自行解压:
tar -xzvf safeline-ce-k8s-configs.tar.gz
tar -xzvf safeline-ce-k8s-db.tar.gz
第一步 上传镜像
首先需要将离线镜像上传到docker仓库中,然后用以下脚本将其加载到minikube的工作集群中。(离线镜像的下载去官网就能找到)
minikube image load chaitin/safeline-tengine \
chaitin/safeline-mgt-api \
chaitin/safeline-mario \
chaitin/safeline-detector \
当运行完成后,运行minikube image ls
可以查看到对应的镜像。
第二步 修改数据库信息
打开文件management-deployment.yaml。将其中
safeline-ce:${POSTGRES_PASSWORD}
替换成你的数据库的用户和密码,@safeline-postgres
中@后的部分改成你k8s集群中postgres数据库服务的域名。打开文件mario-deployment.yaml。类似的,将其中
safeline-ce:${POSTGRES_PASSWORD}
和${REDIS_PASSWORD}
替换成相应数据库的信息。同时用相应域名替换@后的部分。如果集群中还没有相应的数据库,可以使用提供的数据库配置文件来简单测试。(长期使用的话请自行斟酌)使用测试的数据库的话前两步只需要更改密码。首先需要先运行下面的脚本生成随机密码:
echo "POSTGRES_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> .env
echo "REDIS_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> .env
cat .env
然后分别打开postgres-deployment.yaml和redis-deployment.yaml并将密码复制到对应位置。
postgres-deployment:
redis-deployment:
第三步 启动容器
首先要确保数据库已经启动,然后再来启动waf,快速使用所有配置文件的脚本为:
# 先cd到配置文件目录下
kubectl apply -f .
我也在 safeline-ce-k8s-configs 下写了一个简单的脚本来启动,运行bash ./start.sh
即可。
具体运行状况可以通过kubectl get all
来查看,以下为启动后的pod情况
第四步 测试使用
首先可以在雷池配置文件目录下运行kubectl apply -f test-server.yaml
打开一个服务器。该服务器运行了python3 -m http.server 8089
,在配置中又打开了一个30007的节点端口。
打开 management-deployment.yaml 查看其中 user-port 下的 nodePort 项,这一项可以更改,也可以由k8s自动分配。
然后运行kubectl get node -o wide
,得到运行节点的ip地址,然后通过<ip>:<nodePort>可以访问waf管理界面,比如这里可以访问192.168.49.2:30018
然后运行kubectl get node -o wide
,得到运行节点的ip地址,然后通过<ip>:<nodePort>可以访问waf管理界面,比如这里可以访问192.168.49.2:30018
ps.
- 以上是通过nodePort的访问方式,如果需要直接访问内部的port,如其中management的9443端口,可以运行脚本:
kubectl port-forward service/safeline-management 9440:9443
。然后打开一个新终端就可以通过 localhost:9440 来访问。 - 更多访问方式可以查询 kubectl proxy,以及k8s相关文档:https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/
打开管理页面后可以配置站点:
此时通过curl 192.168,49,2:30080
可以访问到服务器。这是由于配置中打开了tengine 容器的80端口到节点30080端口的映射,因此成功通过tengine转发。
整理和总结
- 虽然代理成功,但是从攻击测试来看,tengine向detector的流量转发没有成功,攻击语句没有被拦截,说明detector应该没有接到流量,这可能与tengine内部的nginx配置有关。