KONG基础使用
KONG是一个基于Nginx的API Gateway。提供了诸如身份认证,权限控制,流量控制,日志等一系列API相关的组件,可谓相当方便。
KONG项目首页
KONG入门
KONG的Github地址
KONG Admin API一览
KONG插件列表
安装
以Linux RedHat 6.2为例:
从此处下载对应二进制rpm包,按操作安装即可
KONG RedHat Release
注意如果yum出现无法获取metalink的错误,sudo vi /etc/yum.repos.d/epel.repo
注释掉所有mirrorlist,取消所有baseurl的注释即可。
简介
KONG是一个API Gateway,顾名思义,就是API的出口。
内部系统的API可以随意编写,但如果要对外服务,就一定需要各种权限控制。
测试环境
首先,我们写一个Mock API,进行测试之用。
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
call_cnt = 0
def get(self):
MainHandler.call_cnt+= 1
self.write("GET / %s"%MainHandler.call_cnt)
def post(self):
MainHandler.call_cnt+= 1
self.write("POST / %s"%MainHandler.call_cnt)
class TestHandler(tornado.web.RequestHandler):
call_cnt = 0
def get(self):
TestHandler.call_cnt += 1
self.write("GET /test %s"%TestHandler.call_cnt)
def post(self):
TestHandler.call_cnt += 1
self.write("POST /test %s"%TestHandler.call_cnt)
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
(r"/test", TestHandler)
])
if __name__ == "__main__":
app = make_app()
app.listen(8812)
tornado.ioloop.IOLoop.current().start()
这是一个用Tornado写的简易REST测试 API,用以下命令后台启动nohup python test_api.py 1>/dev/null 2>log &;
# 测试Endpoint:/
curl -i -X GET http://localhost:8812/
curl -i -X POST http://localhost:8812/
curl -i -X DELETE http://localhost:8812/
# 测试Endpoint:/test
curl -i -X GET http://localhost:8812/test
curl -i -X POST http://localhost:8812/test
curl -i -X DELETE http://localhost:8812/test
现在我们已经有一个正常工作的REST API了。是时候使用KONG了。
KONG的使用基本和NGINX如出一辙。默认的工作目录是/usr/local/kong
,默认的配置文件是/etc/kong/kong.yml
。如果需要工作在1024以下的端口,则要求root权限。
KONG的启动命令很简单,就是kong start
但是启动之前需要编辑配置文件。
需要关注的主要是几个点:
发送匿名统计报告,(默认打开,一定要关闭)
后端数据库的配置,(默认Cassandra,建议Postgres)
内存缓存大小配置,(默认128M,建议1G)
出口端口(默认HTTP 8000,HTTPS 8443,建议直接改成80和443)
管理端口(默认8001,我改成8888比较吉利)
配置好之后,启动KONG即可。
配置
KONG的配置完全通过REST API完成,Admin端口在配置文件中可以配置,下面全部使用http://localhost:8888/作为Admin EndPoint
使用什么语言的HTTP库都可以完成这个工作,这里直接使用Linux自带的curl。
注册API
第一步,我们需要先注册我们的API
假设我们想把上面那个API挂载到/test路径下,
即用户访问http://localhost/test/ 时,会返回GET /
用户访问http://localhost/test/test 时,会返回GET /test
执行
# 查看当前已经注册的API
curl -X GET http://localhost:8888/apis/
# 注册一个新的API
curl -i -X POST http://localhost:8888/apis/ -d "name=testapi" -d "request_path=/test" -d "upstream_url=http://localhost:8812/" -d "strip_request_path=true"
这里注册URL的几个参数意思是,这个API注册的名字叫testapi。它被挂载在网关的/test
路径下,上游转发到http://localhost:8812
去处理,转发的时候把前面的/test
前缀给去掉。
{"upstream_url":"http:\/\/localhost:8812\/","request_path":"\/test","id":"a302c28c-eb8a-4e53-bac2-9acb68695f3b","created_at":1468379310000,"preserve_host":false,"strip_request_path":true,"name":"testapi"}
返回结果表明API创建的结果。一般会返回一个API的ID。
这就表明API注册完成,我们可以测试一下:
curl -i -X GET http://localhost/test
curl -i -X POST https://localhost/test/test --insecure
如同我们预期的一样返回正确的结果,说明API已经成功注册。
当然,仅仅把API注册了开放出去,其实也就是把多个API集成到一个EndPoint,实际意义并不大,下面我们来试一试高级一点的功能。
注册插件
KONG自带插件目前可以分为以下几类:
身份认证,安全,流量控制,分析监控,格式转换,日志。
KONG插件列表
有的API完全开放,不需要任何认证,有的API会涉及敏感数据,权限控制需要非常严格。有的API完全不在乎调用频次或者日志,有的则反过来。
值得高兴的是,KONG的插件独立作用于每一个API,不同的API可以使用完全不同的插件。提供了相当灵活的配置策略。
现在我们首先给这个测试API加上基本的权限验证。
curl -X POST http://localhost:8888/apis/testapi/plugins -d "name=key-auth"
# 这个时候再去调用这个API就会返回401 Unauthorized
curl -i -X GET http://localhost/test
添加用户
朴素的API可能压根没有严格的用户概念,端口大开,随便哪个阿猫阿狗都能进来扫一扫看一看。这可不行。
KONG有一个consumer的概念,consumer是全局共用的。
比如某个API启用了key-auth,那么没有身份的访问者就无法调用这个API了。
需要首先创建一个Consumer,然后在key-auth插件中为这个consumer生成一个key。
然后就可以使用这个key来透过权限验证访问API了。
同理,如果另外一个API也开通了key-auth插件,那么这个consumer也是可以通过key-auth验证访问这个API的,如果要控制这种情况,就需要ACL插件。
(认证与权限乃是两个不同的事物)
首先我们创建一个名为test_user的consumer
# 获取所有Consumer列表
curl -X GET http://localhost:8888/consumers/
# 创建一个新的Consumer
curl -X POST http://localhost:8888/consumers/ -d "username=testuser"
然后,我们在key-auth插件中为它创建一个key
curl -X POST http://localhost:8888/consumers/testuser/key-auth -d "key=testkey"
这次加上apikey首部进行验证,成功调用
curl -i -X GET http://localhost/test --header "apikey: testkey"
删除用户
curl -i -X DELETE http://localhost:8888/consumers/testuser
删除插件
# 查询API拥有的插件ID
curl -i -X GET http://localhost:8888/apis/testapi/plugins/
# 根据插件ID删除插件。
curl -i -X DELETE http://localhost:8888/apis/testapi/plugins/e49a2b2e-4c36-4c6a-bd1a-b5b065e63bb8
以上是基本的API,Consumer,Plugin的基本介绍。
ACL插件
# 注册overseas_index API
curl -X POST http://localhost:8888/apis/ -d "name=overseas_index" -d "upstream_url=http://10.182.20.128:8848/" -d "request_path=/stat/overseas" -d "strip_request_path=true"
# 为海外版API注册key-auth插件
curl -X POST http://localhost:8888/apis/overseas_index/plugins --data "name=key-auth"
# 创建overseas_user 用户
curl -X POST http://localhost:8888/consumers/ -d "username=overseas_test"
# 为overseas_test创建权限验证
curl -X POST http://localhost:8888/consumers/overseas_test/key-auth -d ""
# 尝试查询海外版指标接口
curl -X POST https://10.182.20.127/stat/overseas/realtime -d "app_id=53ace32656240b11c2071b1a" -d "date=2015-07-22" -H "apikey: 5e3b2a7a735744b39aeea9ebc2de1f01" --insecure
# 给测试API
curl -X POST https://10.182.20.128/test -d "app_id=53ace32656240b11c2071b1a" -d "date=2015-07-22" -H "apikey: 5e3b2a7a735744b39aeea9ebc2de1f01" --insecure
设置ACL插件
# 给另外一个testapi加上权限验证插件,现在任何通过认证的用户都可以调用此API
# 这不是我们所希望的,所以需要加入ACL控制
curl -X POST http://localhost:8888/apis/testapi/plugins --data "name=key-auth"
# 为用户overseas_test创建ACL群组:overseas_user
curl -X POST http://localhost:8888/consumers/overseas_test/acls \
--data "group=overseas_user"
# 为用户overseas_test创建ACL群组:overseas_user
curl -X POST http://localhost:8888/consumers/overseas_test/acls \
--data "group=overseas_user"
KONG基础使用的更多相关文章
- API Gateway : Kong
what problems 多个服务要写自己的log,auth,对于比较耗时的,有时还要高流量限制. solution intro 单点部署的情况: why not just haproxy log ...
- 1-Kong文章记录
参考: https://www.cnblogs.com/duanxz/p/9770645.html 系列博客可参考: 开源API网关系统(Kong教程)入门到精通 https://www.cnblog ...
- Python_Day3_基础3
python基础之数据类型与变量 字典 字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划.字母来查对应页的详细内容. 语法: info = { 'stu1101': &q ...
- C#基础总结之三循环控制-for-数组-乘法表-arraylist
#region 第三天 作业 乘法表 ////正三角 //for (int i = 1; i < 10; i++) //{ // for (int j = 1; j <= i; j++) ...
- 第三章:Python基础の函数和文件操作实战
本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...
- kong插件应用
插件概述 插件之于kong,就像Spring中的aop功能.在请求到达kong之后,转发给后端应用之前,你可以应用kong自带的插件对请求进行处理,合法认证,限流控制,黑白名单校验,日志采集等等.同时 ...
- Kong(V1.0.2) Health Checks and Circuit Breakers Reference
介绍 您可以让Kong代理的API使用ring-balancer,通过添加包含一个或多个目标实体的 upstream 实体进行配置,每个 target指向不同的IP地址(或主机名)和端口.ring-b ...
- Kong(V1.0.2)loadbalancing
介绍 Kong为多个后端服务提供了多种负载平衡请求的方法:一种简单的基于DNS-based的方法,以及一种更动态的环形负载均衡器ring-balancer,它还允许在不需要DNS服务器的情况下使用se ...
- Kong配置参考
kong配置的官网说明:https://docs.konghq.com/1.0.x/configuration/ 1. 配置加载 如果您通过其中一个官方软件包安装了Kong,Kong会附带默认配置文件 ...
随机推荐
- spring boot映射静态资源.
增加配置文件 package com.wisely.upload.config; import org.springframework.context.annotation.Configuration ...
- ASP.NET学习笔记(5)——原生Ajax基本操作
说明(2017-11-4 15:32:49): 1. 回北京后又快一个月了,上次在家写的下回预告,到底是没把加水印写完,而且这次也不想写.. 2. 上次许的愿,十月份看完asp.net,已经泡汤了,翻 ...
- 基于jQuery左侧大图右侧小图切换代码
基于jQuery左侧大图右侧小图切换代码是一款带右侧缩略图选项卡的jQuery图片切换特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=" ...
- mysql 常用语句记录
一.表的状态查询 (1)如果发现一个数据异常的大了,需要查看一下其中哪些表变大了,可以使用如下命令 SQL> SHOW TABLE STATUS FROM 数据库名 LIKE 数据表名; ...
- Java中的sun.misc.Unsafe包
chronicle项目:https://github.com/peter-lawrey/Java-Chronicle 这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据. ...
- ML-DL-各种资源汇总
1.Used Libraries, Datasets, and Models 1.1 Libraries TensorFlow (from Google): https://www.tensorflo ...
- javascript 完美解决对联广告
javascript 完美解决对联广告 // function couplet(){ if(arguments.length>=1) this.objID = document.getEleme ...
- Oracel扩展表空间
--表空间查看 SELECT tbs, sum(totalM) as total, sum(usedM) as UserdM, sum(remainedM) as remainedM, as User ...
- Git教程首页
Git 教程 Git 是一个分布式的版本控制和源代码管理系统,强调速度. Git 最初由Linus Torvalds设计和开发为Linux内核开发管理代码. Git是GNU通用公共许可证版本2的条款下 ...
- sudo开发常用命令总结
ansible ws -m "shell" -a "echo 'wangsong ALL=(ALL) NOPASSWD: /usr/local/bin/superviso ...