API 网关 - Kong 简介

简介

Kong 是由 Mashape 公司开源的,基于 Nginx 的 API Gateway ( Nginx 中运行的 Lua 应用程序 )。

特点

功能:授权、日志、IP 限制、限流、API 统计分析、请求转化、跨域(CORS)等等。
可扩展: 支持分布式

术语

术语描述
Upstream负载均衡策略
Target处理请求的 Backend 服务
Service多个 Upstream 的集合
Route转发规则,将请求转发给 Service
Consumer用户,里面记录用户的一些信息
CertificateHttps 证书
Sni域名与 Certificate 的绑定
Plugin插件

环境搭建

测试服务器:192.168.0.1

Create a Docker network
docker network create kong-net
Start Database
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.6
Prepare Database
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations up
Start Kong
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-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
Check
curl -i http://192.168.0.1:8001/

API 调用

官网文档

背景
Kong 部署在 192.168.0.1 机器上
另有 2 台机器部署了 web 服务:
192.168.0.2
192.168.0.3

web 服务地址测试接口:
http://192.168.0.2:9100/api/v1/test/
http://192.168.0.3:9100/api/v1/test/
创建 Upstream
curl -i -X POST \
--url http://192.168.0.1:8001/upstreams/ \
--data "name=backend1"
给 Upstream 添加 Targets
curl -i -X POST \
--url http://192.168.0.1:8001/upstreams/backend1/targets \
--data "target=192.168.0.2:9100"

curl -i -X POST \
--url http://192.168.0.1:8001/upstreams/backend1/targets \
--data "target=192.168.0.3:9100"
查看 Upstream 的 Targets 是否添加成功
curl -i -X GET \
--url http://10.25.98.128:8001/upstreams/backend1/targets
创建 Service
curl -i -X POST \
--url http://192.168.0.1:8001/services/ \
--data "name=backend1" \
--data "host=backend1"
查看 Service
curl -i -X GET \
--url http://192.168.0.1:8001/services/backend1
给 Service 添加 Routes
curl -i -X POST --url http://192.168.0.1:8001/routes/ -d 
{
"service": {
"id": "2bc5f78b-02f8-4109-96c0-0888cbee7ccb"
},
"methods": ["GET", "POST", "PUT", "PATCH", "DELETE"]
}
查看 Service 下的 Routes
curl -i -X GET \
--url http://192.168.0.1:8001/services/manageone-cmdb/routes
通过 Kong API 访问 backend1 服务
curl -i -X GET http://192.168.0.1:8000/api/v1/test/

参考资料