流量网关和业务网关

流量网关

  • 全局性流控
  • 日志统计
  • 防止 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

Home

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

滚动至顶部