简介
Kong 是由 Mashape 公司开源的,基于 Nginx 的 API Gateway ( Nginx 中运行的 Lua 应用程序 )。
特点
功能:授权、日志、IP 限制、限流、API 统计分析、请求转化、跨域(CORS)等等。
可扩展: 支持分布式
术语
术语 | 描述 |
---|
Upstream | 负载均衡策略 |
Target | 处理请求的 Backend 服务 |
Service | 多个 Upstream 的集合 |
Route | 转发规则,将请求转发给 Service |
Consumer | 用户,里面记录用户的一些信息 |
Certificate | Https 证书 |
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: http:
|
创建 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/
|
参考资料