介绍
最近一段时间一直在寻找合适的API Gateway,先后折腾过Kong,Orange、ABTestingGateway,外加各种nginx+lua扩展的简易API Gateway,前几天听到了janus,一个用golang编写的简单gateway系统。那就再探索一番。
官方地址:janus
特性
没有依赖问题 - 单二进制的编译包
REST API - 完全程序化访问内部结构,可以轻松地从系统中管理API用户,密钥和API配置
速率限制 - 轻松地限制您的API用户的速率限制,速率限制是细粒度的,可以在每个密钥的基础上应用
CORS过滤器 - 为您的API启用cors,甚至启用特定端点
API版本控制 - API版本可以在特定时间和日期轻松设置和弃用
多个身份验证协议 - 开箱即用,我们支持JWT,OAuth 2.0和基本身份验证访问方法
热配置重新加载 - 无需重新启动过程
正常关闭 - 正常关闭http连接
ps:上面是官方说的特性,第一条就不爽,竟然依赖mongodb,果断差评。其次,没有配置文件,而是通过加载环境变量来加载配置。最后,文档少的可怜,几乎没有。
安装
mongodb安装
添加repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
安装mongodb
yum clean all
yum makecache
yum install mongodb-org-server mongodb-org-shell mongodb-org-tools -y
/etc/init.d/mongod start
janus部署
下载二进制包
cd /opt/programs/janus
wget 'https://github-cloud.s3.amazonaws.com/releases/63067788/1e5ea24c-0259-11e7-8b63-0fcbe6642db1.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJMK3TQ%2F20170313%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20170313T065646Z&X-Amz-Expires=300&X-Amz-Signature=ac0572693aac1089bef53d2d5dde1969c9f87681d39b98f8c7fe5d4e1dc79abc&X-Amz-SignedHeaders=host&actor_id=12913767&response-content-disposition=attachment%3B%20filename%3Dlinux_amd64.tar.gz&response-content-type=application%2Foctet-stream'
设置启动文件
cd /opt/programs/janus
cat > config
export DATABASE_DSN="mongodb://172.31.68.244:27017/janus"
export SECRET="123456"
export ADMIN_USERNAME="admin"
export ADMIN_PASSWORD="admin"
cd /opt/programs/janus
./janus
EOF
chmod 755 config
启动janus
配置janus
获取token
http --json POST http://172.31.68.244:8080/login username=admin password=admin
ps:http是httpie软件包里面的命令,一个pyhton写的客户端,返回json格式的数据,看起来可读性更高一些,pip install httpie即可
api.json
{
"name": "My First Proxy",
"slug": "my_first_proxy",
"active": true,
"allowed_ips": [],
"domain": "",
"proxy": {
"check_host_against_uptime_tests": false,
"enable_load_balancing": false,
"listen_path": "/guol/*g",
"methods": [
"GET"
],
"preserve_host_header": false,
"strip_listen_path": true,
"append_listen_path": false,
"target_list": [],
"target_url": "https://my.oschina.net/guol/blog"
},
"rate_limit": {
"enabled": true,
"limit": "10-S"
},
"use_basic_auth": false,
"use_oauth2": false,
"use_compression": true,
"cors_meta": {
"domains": [
"*"
],
"enabled": true,
"exposed_headers": [
"X-Debug-Token",
"X-Debug-Token-Link"
],
"methods": [
"GET",
"POST",
"PUT",
"PATCH",
"DELETE"
],
"request_headers": [
"Origin",
"Authorization",
"Content-Type"
]
}
}
创建api
http POST http://172.31.68.244:8080/apis "Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0ODk0MDA1NDMsImlhdCI6MTQ4OTM5Njk0MywiaWQiOiJhZG1pbiJ9.9_XlLUpGL7cGfc2M-03xkh79_ESaLCtSLH-HEPB5_K0" "Content-Type: application/json" < /opt/programs/janus/api.json
测试
http http://172.31.68.244:8080/guol/blog