API 网关

技术架构

API 网关是实现微服务架构的必要组件。平台提供的 API 网关基于 OpenResty 和 Kong 实现,具备高并发低延时的特性,同时结合了 Kubernetes Ingress Controller,基于云原生的声明式配置方式,实现丰富的 API 策略。其核心功能包含微服务 API 管理和流量入口管理两部分。

  • 微服务 API 管理:用于 API 创建及精细化的流量管控,可针对每个 API 分析 QPS、延时、流量数据等内容。
  • 流量入口管理:可快速创建域名,并将来自此域名的流量请求转发至相应的微服务 API,支持针对域名配置 QPS 限流、IP 拦截等安全策略。

tip 提示

当前 Kong 版本为 2.2.0,平台将持续升级,以提供更稳定、安全的服务。

您可以使用集群原生安装的 Kubernetes Ingress,并结合 Kong 的能力增强 API 网关功能。鉴于 Kong 是以 Addon 扩展插件的方式存在,您还可以灵活选择域名流量是否经过 Kong。整体框架示意如下:

API 网关 - 图1

核心概念

流量入口

流量入口由一组域名及域名下的路由规则构成,用于接入特定业务流量的访问入口。

进入 微服务治理平台 > 服务治理 > API 网关 > 流量入口管理 创建流量入口。

API 网关 - 图2

某些特殊的企业环境对域名的管理十分严格,例如必须有独立的 DNS 解析,或在企业自己的 LB 节点上添加域名转发配置。此时便需要将一个环境下的所有服务收敛至同一域名下。

API 网关可提供针对集群泛域名生成的四个环境域名,以泛域名 app.terminus.io 为例,其环境域名如下:

  • gateway.app.terminus.io
  • staging-gateway.app.terminus.io
  • test-gateway.app.terminus.io
  • dev-gateway.app.terminus.io

在 API 网关的流量入口中,默认的“统一域名入口”即用于该场景。

API 网关 - 图3

进入 流量入口详情 查看具体路由规则:

API 网关 - 图4

微服务 API

用于暴露微服务、提供流量入口的 API。

默认情况下,所有服务将自动注册 API,包含所有方法和路径,从而暴露该 API。但是对于某些特定服务而言,这是不安全的,此时可删除该自动注册的 API,并根据需要重新添加 API 即可。

调用方

在开放 API 的场景下,需识别出调用方的角色,从而判断该调用方是否具有调用权限,同时可针对调用方分析其调用量等情况。

API 网关 - 图5

调用方的核心为凭证信息,在请求中需携带对应的 Key/Secret 凭证,提供网关进行识别认证。

API 网关 - 图6

认证

开放 API 的场景涉及网关的认证功能,认证方式即识别调用方的方式,有多种认证方式可选。

API 网关 - 图7

授权

在开放 API 的场景下,调用方通过认证后,仍需检查该调用方是否具有访问该 API 的权限。

通过编辑流量入口,可添加允许访问的调用方:

API 网关 - 图8

也可为调用方添加允许访问的流量入口:

API 网关 - 图9