本文做者吴舒旸,Apache APISIX committer,API7 开发工程师。目前主要负责混沌工程在 APISIX 上的实践。经过阅读本文,您将了解如何使用咱们新推出的迁移工具,进行 Kong 到 Apache APISIX 到一键平滑迁移。git
Apache APISIX 是一个生产可用的开源七层全流量处理平台,可做为 API 网关处理业务入口流量,具备极高性能、超低延迟,官方支持 dashboard 以及超过五十种插件。若是你正在使用 Kong,对 APISIX 感兴趣又苦于难以上手,不妨试试咱们刚开源的迁移工具 Kong-To-APISIX,助你一键平滑迁移。github
Kong-To-APISIX 利用 Kong 和 APISIX 的声明式配置文件实现了配置数据的迁移,并根据两侧架构和功能的不一样作出相应适配。目前咱们支持了 Kong 一侧 Route、Service、Upstream、Target,Consumer 以及三个插件 Rate Limiting、Proxy Caching 以及 Key Authentication 的配置迁移,并以 Kong 的 Getting Started Guide 为例,完成了一个最小的 demo。docker
具体步骤参照:docs.konghq.com/deck/1.7.x/…apache
apisix.yaml
待使用$ git clone https://github.com/api7/kong-to-apisix
$ cd kong-to-apisix
$ make build
$ ./bin/kong-to-apisix migrate --input kong.yaml --output apisix.yaml
migrate succeed
复制代码
apisix.yaml
配置 APISIX, 具体步骤参照 apisix.apache.org/docs/apisix…。git clone https://github.com/apache/apisix-docker
cd kong-to-apisix
./tools/setup.sh
复制代码
./examples/kong-example.sh
复制代码
导出 Kong 的声明式配置文件到 kong.yaml
api
go run ./cmd/dumpkong/main.go
复制代码
kong.yaml
并生成 APISIX 配置文件 apisix.yaml
至 docker volumesexport EXPORT_PATH=./repos/apisix-docker/example/apisix_conf
go run ./cmd/kong-to-apisix/main.go
复制代码
在 APISIX 一侧测试迁移事后的路由、负载均衡、插件等是否正常运行缓存
a. 测试 key auth 插件markdown
curl -k -i -m 20 -o /dev/null -s -w %{http_code} http://127.0.0.1:9080/mock
# output: 401
复制代码
b. 测试 proxy cache 插件架构
# access for the first time
curl -k -I -s -o /dev/null http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org"
# see if got cached
curl -I -s -X GET http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org"
# output:
# HTTP/1.1 200 OK
# ...
# Apisix-Cache-Status: HIT
复制代码
c. 测试 limit count 插件负载均衡
for i in {1..5}; do
curl -s -o /dev/null -X GET http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org"
done
curl -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"
# output: 429
复制代码
d. 测试负载均衡curl
httpbin_num=0
mockbin_num=0for i in {1..8}; do
body=$(curl -k -i -s http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org")
if [[ $body == *"httpbin"* ]]; then
httpbin_num=$((httpbin_num+1))
elif [[ $body == *"mockbin"* ]]; then
mockbin_num=$((mockbin_num+1))
fi
sleep 1.5done
echo "httpbin number: "${httpbin_num}", mockbin number: "${mockbin_num}
# output:
# httpbin number: 6, mockbin number: 2
复制代码
迁移工具的后续开发计划已在 Kong-To-APISIX 的 GitHub 仓库的 Roadmap 中呈现,欢迎你们访问 Kong-To-APISIX 的 GitHub 仓库地址:github.com/api7/kong-t… ,测试与使用 Kong-To-APISIX。 欢迎任何对这个项目感兴趣的人一同来为这个项目做贡献!有任何问题均可以在仓库的 Issues 区讨论。