流量网关和业务网关
流量网关
- 全局性流控
- 日志统计
- 防止 SQL 注入
- 防止 Web 攻击
- 屏蔽工具扫描
- 黑白名单控制
业务网关
- 请求接入:作为所有 API 接口服务请求的接入点,管理所有的接入请求;
- 业务聚合:作为所有后端业务服务的聚合点,所有的业务服务都可以在这里被调用;
- 中介策略:实现安全、验证、路由、过滤、流控,缓存等策略,进行一些必要的中介处理;
- 统一管理:提供配置管理工具,对所有 API 服务的调用生命周期和相应的中介策略进行统一管理。
开源网关
目前常见的开源网关大致上按照语言分类有如下几类:
- Nginx+lua:Open Resty、Kong、Orange、Abtesting gateway 等
- Java:Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等
- Go:Janus、fagongzi、Grpc-gateway
- Dotnet:Ocelot
- NodeJS:Express Gateway、Micro Gateway
按照使用数量、成熟度等来划分,主流的有 4 个:
- OpenResty
- Kong
- Zuul/Zuul2
- Spring Cloud Gateway
ABTesingGateway
项目地址:
https://github.com/CNSRE/ABTestingGateway
Zuul/Zuul2
https://github.com/Netflix/zuul
Spring Cloud Gateway
https://github.com/spring-cloud/spring-cloud-gateway/
OpenResty/Kong/Zuul2/SpringCloudGateway 重要特性对比
网关 | 限流 | 鉴权 | 监控 | 易用性 | 可维护性 | 成熟度 |
---|---|---|---|---|---|---|
Spring Cloud Gateway | 可以通过IP,用户,集群限流,提供了相应的接口进行扩展 | 普通鉴权、auth2.0 | Gateway Metrics Filter | 简单易用 | spring系列可扩展强,易配置 可维护性好 | spring社区成熟,但gateway资源较少 |
Zuul2 | 可以通过配置文件配置集群限流和单服务器限流亦可通过filter实现限流扩展 | filter中实现 | filter中实现 | 参考资料较少 | 可维护性较差 | 开源不久,资料少 |
OpenResty | 需要lua开发 | 需要lua开发 | 需要开发 | 简单易用,但是需要进行的lua开发很多 | 可维护性较差,将来需要维护大量lua脚本 | 很成熟资料很多 |
Kong | 根据秒,分,时,天,月,年,根据用户进行限流。可在原码的基础上进行开发 | 普通鉴权,Key Auth鉴权,HMAC,auth2.0 | 可上报datadog,记录请求数量,请求数据量,应答数据量,接收于发送的时间间隔,状态码数量,kong内运行时间 | 简单易用,api转发通过管理员接口配置,开发需要lua脚本 | 可维护性较差,将来需要维护大量lua库 | 相对成熟,用户问题汇总,社区,插件开源 |
Kong
https://github.com/kong/kong
主要有三个组件
- Kong Server :基于nginx的服务器,用来接收API请求。
- Apache Cassandra/PostgreSQL :用来存储操作数据。
- Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。
Kong采用插件机制进行功能定制,插件集(可以是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。
安装
安装环境:
#获取下载的rpm
yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm
#执行安装
yum install postgresql95-server
初始化数据库
service postgresql-9.5 initdb
启动服务
service postgresql-9.5 start
远程连接
修改
vi /var/lib/pgsql/9.5/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 ident
host all all 0.0.0.0/0 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 ident
#host replication postgres ::1/128 ident
vi /var/lib/pgsql/9.5/data/postgresql.conf
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
创建数据库
su - postgres//进入数据库
-bash-4.2$ psql
CREATE USER kong WITH PASSWORD 'kong';
create database kong owner kong;
grant all on database kong to kong;
1.3下载地址
https://kong.bintray.com/kong-community-edition-rpm/centos/6/
安装
rpm -ivh kong-community-edition-0.13.1.el6.noarch.rpm
拷贝配置文件
/etc/kong/kong.conf.default
/etc/kong/kong.conf
初始化数据库
1.4 kong migrations bootstrap
1.3 kong migrations up
启动服务
kong start
安装dashboard
https://github.com/PGBI/kong-dashboard
最新的Kong是0.14.x,而Kong-Dashboard暂时支持最高版本0.13.x
安装npm
curl --silent --location https://rpm.nodesource.com/setup_7.x | bash -
sudo yum install -y nodejs
安装dashboard
npm install -g kong-dashboard
启动
kong-dashboard start --kong-url http://localhost:8001
RPM常用命令
1、安装
rpm -i 需要安装的包文件名
举例如下:
rpm -i example.rpm 安装 example.rpm 包;
rpm -iv example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息;
rpm -ivh example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息及安装进度;
2、查看安装完成的软件
[root@jacky zookeeper]# rpm -qa | grep jdk java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686 java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.i686
3、卸载软件
rpm -e –nodeps 要卸载的软件包
root@jacky zookeeper]# rpm -e –nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686