🙈 By 刘琪 2024-03-13
NJet Docker镜像介绍与运行
镜像简介
镜像内NJet文件说明
NJet镜像中NJet安装目录为/usr/local/njet/,如下图所示:
Njet镜像文件介绍 | |||
---|---|---|---|
文件名(相对于/usr/local/njet/) | 描述 | 备注 | |
conf | NJet启动需要的配置 | ||
data | NJet运行时产生的数据 | docker run 时,可以挂载宿主机文件到容器内,便于配置、日志、数据持久化到宿主机 | |
logs | NJet运行时产生的日志 | ||
modules | NJet动态模块 | 实现NJet特性 | |
lualib | NJet依赖的lua | ||
sbin | NJet二进制可执行程序 |
镜像参数说明
label信息
label名 | 含义 | 示例 | 备注 |
njet.org.cn.image.build.target | 构建镜像的主机系统架构 | linux/amd64 | |
njet.org.cn.image.build.os | 基础镜像镜像 | ubuntu | |
njet.org.cn.image.njet.revision | NJet commit id | 44661bb6fae0ecee4d1c28dee53a3f06582a7e05 | |
njet.org.cn.image.njet.version | NJet版本,即TAG | latest | 构建时人为指定的,可能与njet -V不一致 |
镜像内NJet二进制也可以查看源码commit id
运行NJet容器
容器启动后,NJet默认监听的端口如下表所述:
端口 | 描述 | |
8080 | NJet数据面端口,实现业务请求处理 | |
8081 | NJet控制面端口,实现NJet动态API处理 |
最小特权
出于安全考虑,在运行NJet容器时,我们推荐使用最小特权启动容器。容器具有指定的能力。 执行如下命令启动NJet。
docker run -d --rm --cap-drop=ALL --cap-add=cap_dac_override --cap-
add=cap_dac_read_search --cap-add=cap_setuid --cap-
add=cap_net_bind_service --cap-add=cap_net_admin --cap-add=cap_net_raw --
cap-add=cap_setgid --cap-add=cap_audit_write tmlake/njet:latest
–cap-add=cap_setgid 与
–cap-add=cap_audit_write 是为了有权限使用sudo,比如sudo iptables -t nat -S
挂载宿主机文件,执行如下命令启动NJet。
docker run -v /root/liuqi/njet/njet.conf:/usr/local/njet/conf/njet.conf -v
/root/liuqi/njet/njet_ctrl.conf:/usr/local/njet/conf/njet_ctrl.conf -v
/root/liuqi/njet/logs:/usr/local/njet/logs -v
/root/liuqi/njet/data:/usr/local/njet/data -d --rm --cap-drop=ALL --cap-
add=cap_dac_override --cap-add=cap_dac_read_search --cap-add=cap_setuid --
cap-add=cap_net_bind_service --cap-add=cap_net_admin --cap-add=cap_net_raw
--cap-add=cap_setgid --cap-add=cap_audit_write tmlake/njet:latest
根据自己host目录修改。
-v 宿主机(使用绝对路径,相对路径低版本docker不支持):容器,挂载宿主机文件到容器内
-p 宿主机:容器,将容器端口暴露到宿主机
所有特权
也可以使用privileged启动容器,容器继承内核所有的能力。 执行如下命令启动NJet。
docker run -d --rm --privileged tmlake/njet:latest
测试案例
Docker版本
最小特权运行
使用镜像内配置启动
执行docker run启动NJet容器,成功运行后屏幕会输出容器id
登录容器内,查看NJet运行情况
//登录容器
docker exec -it d7aad0334008 /bin/bash
请求测试 容器中执行如下指令
curl http://127.0.0.1:8080/
使用宿主机配置启动
执行如下指令启动
根据自己host目录修改。
-v 宿主机(使用绝对路径,相对路径地版本docker不支持):容器,挂在宿主机文件到容器内
-p 宿主机:容器,>将容器端口暴露到宿主机
登录容器内,查看NJet运行情况
//登录容器
docker exec -it b2b6134b22e2 /bin/bash
请求测试 在宿主机访问/lua
curl http://192.168.40.209:8080/lua
range测试
curl http://192.168.40.209:8081/config/2/config/range | jq
添加range规则
{
"action": "add",
"type": "tcp",
"src_ports": "11000:13000",
"dst_port": 10001
}
curl -X PUT http://192.168.40.209:8081/config/2/config/range -d @range.json
登录容器内查看规则
docker exec -it b2b6134b22e2 /bin/bash
sudo iptables -t nat -S