skipper lua 添加luarocks 包管理

skipper 支持基于lua 的script 扩展,同时设计比较方便的filter模型,让我们可以方便
进行request、response的扩展,结合lua 社区的包我们可以快速的进行新功能的开发

环境准备

  • docker-compose 文件
    测试功能,集成了监控功能
version: "3"
services:
  skipper:
    #image: dalongrong/skipper:latest
    build: ./
    image: dalongrong/skipper-docker-build-luarocks
    ports:
    - "9090:9090"
    - "9911:9911"
    volumes:
    - "./router.eskip:/router.eskip"
    - "./app.lua:/app.lua"
    command: skipper -enable-ratelimits -enable-prometheus-metrics -routes-file /router.eskip
  g:
    image: grafana/grafana
    ports:
    - "3000:3000"
  web:
    image: nginx
    ports:
    - "8099:80"
  p:
    image: prom/prometheus
    volumes:
    - "./prometheus.yml:/etc/prometheus/prometheus.yml"
    ports:
    - "9091:9090"
  • skipper dockerfile
    使用dockerfile mutilstage 进行构建,拷贝现有二进制包到一个luarocks的容器,
    同时添加了一个uuid 的模块
FROM dalongrong/skipper:latest as build

FROM abaez/luarocks:lua5.1
LABEL author="1141591465@qq.com"
WORKDIR /
COPY --from=build /usr/bin/skipper /skipper
COPY --from=build /usr/bin/eskip /eskip
ENV PATH=$PATH:/
RUN luarocks install uuid
  • uuid lua 包的使用
    app.lua
local uuid = require("uuid") --- 引用包
local json = require("json")
function request(ctx, params)
    -- ctx.serve({
    -- status_code=302,
    -- header={
    -- location="http://www.baidu.com/",
    -- },
    -- })
    ctx.request.header["user_token"]="request_token"
end

function response(ctx, params)
    ctx.response.header["lua_token"]="dalongdemo";
    -- local user = {
    -- name="dalong",
    -- age=33
    -- }
    local tokeninfo = {
        token=uuid(), --- 使用uuid 包
        status=200
    }
    ctx.serve({
        status_code=200,
        header= {
            ['Content-Type']="application/json",
            lua_token=uuid()
        },
        body=json.encode(tokeninfo)
    })
end
  • router 配置
hello: Path("/report/**") ->compress("text/html")-> corsOrigin()->setResponseHeader("TOKEN","dalongdemo")->responseCookie("test-session", "abc", 31536000)->
setRequestHeader("TOKEN","dalongdemo")-> "http://10.10.17.21:9000/report";
## lua 支持
app: Path("/users/**") -> lua("/app.lua", "myparam=foo", "other=bar") -> "http://www.baidu.com";
static: Path("/static/*") -> static("/static/", "/root") -> <shunt>;

运行&&测试

  • 启动
docker-compose up -d
  • 测试

说明

集成lua 模块,我们可以方便进行系统的扩展,很方便

参考资料

https://github.com/rongfengliang/skipper-prometheus-docker-compose
https://opensource.zalando.com/skipper/reference/scripts/

原文地址:https://www.cnblogs.com/rongfengliang/p/10069214.html