60

微服务网关-Kong开源实现(7.30)

 5 years ago
source link: http://blog.sina.com.cn/s/blog_493a84550102xm97.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ZJZRfua.png!web

对于微服务网关或API网关,实际在前面讲微服务架构的文章中都谈到过。你可以将其理解为一个轻量的SOA服务总线。大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API托管服务,从而帮助服务的开发者便捷地对外提供服务,而不用考虑安全控制、流量控制、审计日志等问题,统一在网关层将安全认证,流量控制,审计日志,黑白名单等实现。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供API发布、管理、维护等主要功能。开发者只需要简单的配置操作即可把自己开发的服务发布出去,同时置于网关的保护之下。

首先我们看下GitHub上对Kong微服务网关的一些介绍

当我们决定对应用进行微服务改造时,应用客户端如何与微服务交互的问题也随之而来,毕竟服务数量的增加会直接导致部署授权、负载均衡、通信管理、分析和改变的难度增加。

面对以上问题,API GATEWAY是一个不错的解决方案,其所提供的访问限制、安全、流量控制、分析监控、日志、请求转发、合成和协议转换功能,可以解放开发者去把精力集中在具体逻辑的代码,而不是把时间花费在考虑如何解决应用和其他微服务链接的问题上。

在众多API GATEWAY框架中,Mashape开源的高性能高可用API网关和API服务管理层——KONG(基于NGINX)特点尤为突出,它可以通过插件扩展已有功能,这些插件(使用lua编写)在API请求响应循环的生命周期中被执行。于此同时,KONG本身提供包括HTTP基本认证、密钥认证、CORS、TCP、UDP、文件日志、API请求限流、请求转发及NGINX监控等基本功能。目前,Kong在Mashape管理了超过15,000个API,为200,000开发者提供了每月数十亿的请求支持。

我们来看下Kong API网关提供的一些基本功能:

API注册和服务代理

对于原始的API接口进行注册,并提供服务代理能力,即不同的API接口注册到网关后,网关可以提供一个统一的访问地址和接口。这和ESB总线的代理服务道理是一致的,在服务注册到API网关后,所有的内部服务对外界都是透明的,外部的服务访问必须要通过API网关进行。

该部分对应到Kong API网关的服务注册和Routing部分的功能和能力上。

负载均衡

由于Kong API网关本身底层也是基于Ngnix的,因此对应负载均衡的能力实际上是通过底层的Nginix来完成的。要在Kong上面实现负载均衡和API注册代理实际上需要分开为两个步骤进行。即首先是要配置负载均衡能力,建立upstream组,并添加多个Target,其次才是进行API注册。

http://www.cnblogs.com/chenjinxi/p/8744117.html

AUTHENTICATION实现

通过OAuth 2.0 Authentication插件实现user端口的用户访问限制。其具体步骤如下:

注册Oauth2插件, 配置参考

添加Consumer及Consumer对应的credentials

申请accesstoken并访问,如果不带token访问将被拒绝

安全和访问控制

支持最基本的基于IP的安全访问控制和黑白名单设置。即为相应的端口添加IP Restriction插件扩展,并设置白名单(只有名单内的IP可以访问API)。这和我们当前ESB的基于IP的访问控制和授权是一个道理。但是我们的ESB更加灵活,多了业务系统这一层,即可以直接对业务系统这层统一进行授权。

如果没有授权,在进行访问的时候将返回 Your IP address is not allowed的访问错误。

流量控制-Traffic Control

流量控制在当前Kong网关上,从GitHub上的参考来看,主要是实现了可以基于单位时间内的访问次数进行流量控制,如果超过了这个访问次数,则直接提示流控约束且无法访问的提示。当前的流量控制,暂时不支持基于数据量的流控。

当前的流控暂时没有看到微服务网关常用的熔断操作,即服务并发或服务响应时间大过某个临界值的时候,直接对服务进行熔断和下线操作。

日志Logging实现

通过File-log插件实现对于每次访问日志的获取,需要注意为日志文件写权限,日志格式参考Log Format。具体包括两个步骤。

1. 为端口添加File-log插件,并设置为日志文件路径设为:/tmp/file.log

2. 添加日志插件后,每次访问都会被记录

从用户手册来看,当前的 日志LOGGING是没有提供日志查询的前端功能界面的,如果需要的话还需要自己开发对应的日志查询功能。这个日志功能和我们当前的ESB总线的日志Log完全是类似的。但是我们ESB这块的能力更加强,包括后续的服务运行日志的统计分析和报表查看等。

初步来看,当前我们的ESB主要是缺少了负载均衡层的能力,缺少了对 OAuth 2.0 Authentication的集成,而这两块实现起来并不困难。同时我们也看到,完全可以采用SpringCLoud框架体系里面的Zuul来实现微服务网关能力,同时将Zuul开发的API接口再次注册到ESB总线上面。对于Zuul微服务网关本身提供 OAuth 2.0集成和负载均衡能力完全是没有任何问题的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK