服务网关实例支持私有或共享两种类型,私有表示仅实例创建者所在组织内的用户可见可用;共享则表示系统内所有用户可见可用,即任何组织的用户都可以查看共享实例,并向其注册服务。此外,服务网关也支持服务发布(即注册)审批功能,开启后,发布到该服务网关的服务均需admin用户进行审批,审批通过后,注册成功。
服务发布者将自身的服务能力封装成接口,发布到服务网关,发布后即可通过该接口访问后端服务。
为了更好的将若干个共同对外提供服务的接口抽象为一个整体,实现众多接口间的逻辑隔离,并对其进行统一管理,提出了接口组的概念。一个接口组中可以包含多个接口,服务发布者在创建接口时需为接口选择所属的接口组。在接口组中,服务发布者可实现对接口的生命周期管理,如增删查、上下线等操作。
API(Application Programming Interface,应用程序编程接口)是服务网关的核心,主要包括基本信息、前后端的请求路径和参数以及请求相关协议。如果发布到开启了服务发布审批功能的网关实例,则需要admin用户审批,审批通过后,发布成功。
用于实现接口的版本管理和灰度发布功能:
接口版本是向前兼容的,即接口的请求地址保持不变,但可以对接多个后端服务。
可以实现接口粒度的灰度发布,即支持同时访问接口多个版本的灰度发布策略,根据权重或其他请求数据,分流请求到对应的后端服务。
一种最常见的容错模式。在服务调用的场景中,主要解决了当服务出现建立网络连接或响应延迟时,不用无限等待的问题,网关可以根据事先设计的超时时间中断调用,及时释放关键资源。
可以按照秒、分钟、小时、天等单位对请求接口的频率进行限制。
服务发布者为接口配置IP过滤,即允许或拒绝某IP地址/IP地址段的访问该接口。
服务发布者为接口配置认证策略,配置后,请求该接口时需要通过认证后才能访问后端服务。
用户名密码认证
服务发布者为接口配置type为Basic Auth的用户名密码认证方式。安全系数低。
密钥认证
密钥认证将以key=value的形式出现在代码的Headers中,服务网关需要使用key-auth认证插件来支持这样一种应用场景。服务发布者需要在服务注册阶段向网关提供一段自定义的KEY用作后续接口的权限校验,如果服务注册时不指定,网关将自动生成一段字串用作后续认证的API-KEY,并随着注册接口的响应返回服务。后续所有请求该服务的流量都需要在header或者query_string中带有此段API-KEY,才能通过网关认证。由于Key是固定不变的,因此安全系数较低,适用于机器之间的认证。
AK/SK认证
又称“HMAC认证”,需配合服务订阅使用。服务发布者选择AK/SK认证策略发布接口后,由服务消费者生成access key(AK)和SecretKey(SK),服务消费者访问接口时需要通过签名的方式完成认证请求,可以防止请求内容被篡改。这种方式可以避免传输SecretKey,并且在大多数情况下签名只允许使用一次,避免了重放攻击。安全系数中等,适用于人机认证。但每次请求都需要进行签名,相对比较麻烦。
JWT认证
即token二次认证,需配合服务订阅使用。服务发布者选择JWT认证策略发布接口后,由服务消费者生成access key(AK)和SecretKey(SK),根据AK、SK获取一个临时的token(JWT),之后即可使用此临时token作为调用其他业务接口的凭证。临时token有有效期限制,可以在一定程度上降低token泄露引起的安全风险。在有效期内,服务消费者应该将临时token缓存起来,以便重复使用。当token过期时,应该重新获取新的临时token。安全系数相对较高。
服务消费者对AK/SK进行封装,只需要指定APP的名称,系统即会自动生成一对AK/SK,用于在访问接口时完成认证。
服务消费者通过订阅功能可以获得对本组织私有网关实例和系统共享网关实例中已发布接口的使用权限,仅支持订阅绑定了AK/SK、JWT认证策略的接口服务。订阅后需admin用户审批,审批通过,服务消费者即可使用该接口服务。
图-1 服务发布与订阅