Nacos

API网关能够集成Nacos实现服务发现的功能,从而与微服务架构深入融合,降低系统的耦合度并提高程序的可管理性。网关可作为微服务系统的请求入口,负责所有客户端的接入、请求的路由和转发、以及保证微服务应用的安全和稳定。本文主要介绍API网关集成Nacos访问微服务后端的原理,以及介绍如何创建、发布并调用服务发现类型的API。

1. 概述

本文依次介绍如下步骤:

  • 原理说明

  • 创建VPC融合专享实例

  • 部署Nacos服务并注册微服务应用

  • 创建分组

  • 创建后端服务

  • 创建API

  • 创建应用并授予API的调用权限

  • 调试API

2. 原理说明

Nacos作为服务的注册中心,可以接收微服务实例的注册请求,并将实例信息保存在注册表中。API网关集成Nacos主要应用的是Nacos的服务发现能力,如下图所示,网关作为服务的订阅者,可以从Nacos获取微服务实例的地址、端口等信息,并根据地址和端口将请求分发到后端的多个微服务实例中,从而实现动态路由和负载均衡。

image.png

以下流程图展示了API网关访问微服务后端的具体过程:

image.png

  1. 服务的提供者将微服务应用注册到Nacos服务器;

  2. API网关向Nacos发送请求,获取服务实例的相关信息,包括服务的IP地址、端口Port以及权重Weight等。为了减少网络间的通信次数、提高响应速度,网关会将获取到的服务实例信息缓存起来;

  3. 客户端的请求到达API网关后,网关首先从缓存中获取一个可用的微服务实例地址,每个实例被选择的概率与其权重Weight成正比。然后网关根据"IP:Port"向指定的微服务Server发送HTTP请求并获取后端响应,最后将响应结果返回给客户端;

  4. 如果微服务应用的信息发生变动,例如某个服务实例下线或者增加了新的服务实例,那么Nacos会将更新后的实例信息推送给网关,网关则会根据接收到的服务信息实时更新缓存,以确保网关侧和Nacos侧的服务信息保持相同;

  5. 客户端再次请求API网关,网关会根据最新的微服务地址信息进行请求的路由和转发。

重要

API网关与Nacos、与微服务实例之间的交互仅支持内网通信,因此在创建API时,Nacos的服务地址需配置为内网地址,否则网关将返回Nacos地址无效的异常信息。同样的,注册在Nacos上的微服务应用的后端地址也必须为内网地址。在调用API时,若网关从Nacos获取到的微服务后端地址为公网地址,那么本次请求将无法处理成功,此时网关会返回错误码I504IA,若网关未能从Nacos获取到任何微服务后端地址,则返回错误码I504BA

3. 创建VPC融合专享实例

由于API网关与Nacos、与注册在Nacos上的微服务应用之间仅支持内网通信,而传统的专享实例又无法实现自定义内网通信,因此我们提供了一种新型的VPC融合专享实例,以支持API网关通过内网打通用户的VPC,融合实例的创建过程可参考创建VPC融合专享实例。创建实例时,您需要将自己的VPC绑定到网关实例上,即在实例创建页面选择可用的用户VPC ID,并设置可用区、交换机和安全组。配置完成后,网关便可通过内网访问指定交换机下的云资源。

image.png

4. 部署Nacos服务并注册微服务应用

4.1 部署Nacos服务

Nacos服务需部署在步骤3中选择的【VPC-可用区-交换机】下,您可以选择原生的Nacos服务,将其部署在所选交换机下的ECS中,这样Nacos服务的访问地址便可设置为"ECS的内网IP:Nacos服务的Port"。创建ECS时,网络类型选择专有网络,VPC和交换机需和步骤3中的配置保持相同。

说明

原生Nacos的创建过程可参考部署Nacos,ECS的创建过程可参考创建ECS

您也可以使用阿里云的微服务引擎(MSE)来创建Nacos服务,创建Nacos时,网络类型选择专有网络,VPC和交换机需和步骤3中的配置保持相同。创建完成后,可在MSE的实例列表页查看Nacos的访问地址。

说明

使用MSE创建Nacos的过程可参考创建Nacos引擎

4.2 注册微服务应用

您的微服务应用也需部署在步骤3中选择的【VPC-可用区-交换机】下,这样才能确保微服务能够成功注册到Nacos并能够被API网关成功访问。您可以选择将微服务应用部署在ECS中,该ECS需创建在步骤3中指定的交换机下。

重要

注册到Nacos上的微服务应用必须支持HTTP调用

5. 创建分组

API分组是API的管理单元,因此需要先创建API分组,然后在分组下创建API。 登录API网关控制台,在左侧导航栏选择API 管理>分组管理,单击界面右上角的创建分组按钮,在弹窗页面填写分组信息,实例选择步骤3中创建的VPC融合实例,分组名称和BasePath可自行设置。创建完成后,可在分组列表查看刚刚创建好的分组,单击名称即可进入到分组详情页,在详情页您可以执行绑定域名、修改基本信息、切换实例类型等操作。

API分组会自动创建公网二级域名,此二级域名仅供调试使用,如果直接访问此域名,每天有1000次的限制(海外Region及中国香港限制100次/天),因此建议您在使用时为分组绑定您的独立域名。

6. 创建后端服务

进入API网关控制台,在左侧导航栏选择API 管理>后端服务。在界面的右上角单击创建后端服务,在弹窗创建后端服务页面填写后端服务名称,后端类型选择服务发现。创建完成后,您可以在后端服务列表中找到刚刚创建的后端服务,单击服务名称即可进入后端服务详情界面。

说明

服务发现类型的API仅支持通过已有的后端服务进行创建,因此需要先创建后端服务,然后创建API。

本例中,我们选择线上环境,只有在环境上创建了后端服务,创建的API才可以发布到相应的环境。在界面的右侧单击创建,进入后端服务配置界面:

image.png

您需要在上图中的配置界面填写Nacos服务和微服务应用的相关信息,包括:

  • NACOS地址:Nacos服务的内网地址,必填参数,可参考步骤3填写Nacos的实际部署地址。

  • 命名空间:微服务应用所属的Namespace,必填参数,注意此处应填写的是命名空间ID

  • 分组:微服务应用所在的分组的名称,必填参数。

  • 服务名:微服务应用的名称,必填参数。

  • 权限认证:Nacos的权限认证方式,必填参数,认证方式可选择无认证账号密码认证密钥对认证

  • 集群:微服务应用所在的集群名称,非必填参数,如果需要设置多个集群,那么多个集群名称请以逗号间隔。

若您的Nacos服务开启了权限认证,那么您也需要填写相关的鉴权信息。如果您使用的是原生Nacos且开启了账号密码认证,那么您需要选择的权限认证方式为账号密码认证,并需要填写相应的账号和密码信息;如果您使用阿里云的MSE来管理Nacos,那么您可以选择使用密钥对认证的鉴权方式,采用此种认证方式时,您需要先创建一个RAM用户,并需要为该用户授予MSE资源的只读权限,然后在后端服务配置页面填写RAM用户的AccessKey和SecretKey;如果您的Nacos服务并未启用权限认证,那么您可以选择无认证

说明

原生Nacos开启、配置鉴权可参考Nacos权限认证,在MSE中开启、配置Nacos鉴权可参考Nacos Client访问鉴权

重要

若您的Nacos服务更新了配置信息,那么请及时修改后端服务的相关配置,以避免网关无法访问到指定的微服务应用。

7. 创建API

进入API网关控制台,在左侧导航栏选择API 管理>后端服务。在后端服务列表页面选择已创建的后端服务

操作列下,然后单击创建API

  1. API基本信息

本环节介绍如何配置API的基本信息,包括API分组、API名称、安全认证方式、API类型和描述等。API分组选择刚刚创建的分组,安全认证选择阿里云APP,AppCode认证选择APPcode(header&Query),API名称和描述信息您可以自行设置。

说明

安全认证方式可根据实际需求配置,如果不需要API网关做安全校验,可以选择无认证。

  1. 定义API请求

本环节是定义client端(如浏览器、手机APP或其他的业务系统)如何请求您的API,需要确定的内容包括请求类型、协议、请求Path、HTTP Method、入参请求模式、和入参定义,您可以根据实际情况设置客户端请求的Path和Method等信息。

  1. 定义API后端服务

本环节是定义API网关收到client端的请求后,进行何种参数映射、处理,以及连接哪个后端地址。本例中的后端配置选择使用已有的后端服务,后端服务类型选择服务发现,后端服务选择之前创建的后端服务,后端请求的Path、Method以及超时时间您可以自行设置。

  1. 定义返回结果

本环节用于API帮助文档的自助生成,帮助API使用者更好理解。可以设置返回结果示例和失败返回结果示例。本例中不涉及到这部分,因此可以单击保存按钮。

  1. 发布API

在上一环节保存成功后,需要发布API。您对API进行过任何的配置,都需要发布到对应的环境中才能够生效。本例中在创建后端服务的时候,只在线上环境进行了后端服务配置,因此这里只可以发布到线上环境,如果您需要发布到其他环境,需要在您刚创建的后端服务的其他环境配置后端服务定义。单击发布,按照控制台页面的提示,把此API发布到“线上“环境。

8. 创建应用并授予API的调用权限

应用(APP)是您调用API服务时的身份,在本例创建API的时候,认证方式选择的是“阿里云APP认证“,因此在API发布后,还需要创建APP,并将APP和API的对应关系建立好,才能够正常访问。具体操作步骤可参考授权管理

9. 调试API

API网关提供了在线调试的功能,因此一般建议在API网关上完成API配置之后,先通过此功能确认API是否配置成功,然后再通过client端进行调用。

在API列表页,单击前面步骤中新增的API,进入详情页,单击调试API。如果您定义了API的入参,在调试API页面中也可以输出不同的参数查看API的执行情况。

在调试API中,请注意选择已经授权的APP,并且Stage选择此APP授权好的环境,如果选择错误的Stage,可能会造成API调试失败。