利用Kong(api网关)打造mock服务器和反向代理服务器于一体

Life is short , play more!
本文来自lihao's Blog,转载请注明。

Kong 是一个http api网关,基于openresty。
kong 官网地址: https://konghq.com/

首先我们先安装Kong,为了快速的开始,使用docker来进行安装。 (如果没有安装docker,请先搜索并安装docker 引擎)

1. 安装Kong

  • 安装cassandra(kong 需要使用数据库), 所以我们先安装cassandra。

#先创建kong-net 网络
docker network create kong-net

docker run -d --name kong-database \
--network=kong-net \
-p 9042:9042 \
cassandra:3

  • 初始化数据库数据并安装Kong

docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=cassandra" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations up

docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=cassandra" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest

  • 访问kong的admin api 地址,确认安装kong 成功。

curl -i http://localhost:8001/

2.  设置利用plugin 设置 mock 返回内容


#首先添加一个service
curl -i -X POST http://localhost:8001/services/ --data "name=plugin-testing" --data "url=http://httpbin.org/headers"

#添加一个route, service.id 是上一个步骤添加的service 的service id。(id 是由系统默认生成并返回)
curl -i -X POST http://localhost:8001/routes/ --data "paths[]=/test" --data "hosts[]=mytest.com" --data "service.id=bdbac75d-7cb0-4e7e-a989-1efa617824fb"

# 编写returnmock.lua 文件
cat >> returnmock.lua << eof return kong.response.exit(200\, "{'jksjdkfjsdf':'jskdjfkjf'}") eof #添加一个plugin(这里我们使用Serverless Functions的pre-function 插件), 设置让我们访问mytest.com/test 时, 返回mock的response数据。 (plugin-testing 是我们的service name,第一步创建service时设定的service name) curl -i -X POST http://localhost:8001/services/plugin-testing/plugins -F "name=pre-function" -F "[email protected]"

关于serverless functions, 有2个plugins, 介绍如下。

Plugin Names
Serverless Functions come as two separate plugins. Each one runs with a different priority in the plugin chain.

pre-function
Runs before other plugins run during access phase.
post-function
Runs after other plugins in the access phase.

3. 这时候我们在本地,先添加 127.0.0.1 mytest.com 到hosts文件中 然后访问 http://mytest.com:51000/test , 然后返回了我们期望的mock内容。 通过接口,我们可以动态的修改mock返回内容,或者去掉返回内容。


curl http://mytest.com:51000/test

#返回数据
{'jksjdkfjsdf':'jskdjfkjf'}

这样我们就完成了一次mock数据返回设置


发表评论

电子邮件地址不会被公开。 必填项已用*标注