Apache APISIX 是一个生产可用的开源七层全流量处理平台,可作为 API 网关处理业务入口流量,具有极高性能、超低延迟,官方支持 dashboard 以及超过五十种插件。如果你正在使用 Kong,对 APISIX 感兴趣又苦于难以上手,不妨试试我们刚开源的迁移工具 Kong-To-APISIX,助你一键平滑迁移。
工具能力
Kong-To-APISIX 利用 Kong 和 APISIX 的声明式配置文件实现了配置数据的迁移,并根据两侧架构和功能的不同做出相应适配。目前我们支持了 Kong 一侧 Route、Service、Upstream、Target,Consumer 以及三个插件 Rate Limiting、Proxy Caching 以及 Key Authentication 的配置迁移,并以 Kong 的 Getting Started Guide 为例,完成了一个最小的 demo。
使用方法
使用 Deck 导出 Kong 声明式配置文件,点击查看具体步骤
下载仓库并运行迁移工具,迁移工具会生成声明式配置文件
apisix.yaml
待使用1git clone https://github.com/api7/kong-to-apisix 2 3cd kong-to-apisix 4 5make build 6 7./bin/kong-to-apisix migrate --input kong.yaml --output apisix.yaml 8 9# migrate succeed
使用
apisix.yaml
配置 APISIX, 点击查看具体步骤。
Demo 测试
确保 docker 正常运行,部署测试环境,使用 docker-compose 拉起 APISIX、Kong
1git clone https://github.com/apache/apisix-docker 2 3cd kong-to-apisix 4 5./tools/setup.sh
根据 Kong 的 Getting Started Guide,为 Kong 添加配置并进行测试:
a. 通过 Service 和 Route 暴露服务,进行路由转发
b. 设置 Rate Limiting 和 Proxy Caching 插件做限流缓存
c. 设置 Key Authentication 插件做认证
d. 通过 Upstream 和 Target 设置负载均衡
1./examples/kong-example.sh
导出 Kong 的声明式配置文件到
kong.yaml
1go run ./cmd/dumpkong/main.go
运行迁移工具,导入
kong.yaml
并生成 APISIX 配置文件apisix.yaml
至 docker volumes1export EXPORT_PATH=./repos/apisix-docker/example/apisix_conf 2 3go run ./cmd/kong-to-apisix/main.go
在 APISIX 一侧测试迁移过后的路由、负载均衡、插件等是否正常运行
测试 key auth 插件
1curl -k -i -m 20 -o /dev/null -s -w %{http_code} http://127.0.0.1:9080/mock 2# output: 401
测试 proxy cache 插件
1# access for the first time 2curl -k -I -s -o /dev/null http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org" 3# see if got cached 4curl -I -s -X GET http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org" 5# output: 6# HTTP/1.1 200 OK 7# ... 8# Apisix-Cache-Status: HIT
测试 limit count 插件
1for i in {1..5}; do 2 curl -s -o /dev/null -X GET http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org" 3done 4curl -k -i -m 20 -o /dev/null -s -w %{http_code} http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org" 5# output: 429
测试负载均衡
1 httpbin_num=0 2 mockbin_num=0for i in {1..8}; do 3 body=$(curl -k -i -s http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org") 4 if [[ $body == *"httpbin"* ]]; then 5 httpbin_num=$((httpbin_num+1)) 6 elif [[ $body == *"mockbin"* ]]; then 7 mockbin_num=$((mockbin_num+1)) 8 fi 9 sleep 1.5done 10 echo "httpbin number: "${httpbin_num}", mockbin number: "${mockbin_num} 11 # output: 12 # httpbin number: 6, mockbin number: 2
总结
迁移工具的后续开发计划已在 Kong-To-APISIX 的 GitHub 仓库的 Roadmap 中呈现,欢迎大家访问 Kong-To-APISIX 的 GitHub 仓库地址 ,测试与使用 Kong-To-APISIX。 欢迎任何对这个项目感兴趣的人一同来为这个项目作贡献!有任何问题都可以在仓库的 Issues 区讨论。