跳到主要内容
版本:3.10.x

服务发现

API7 网关中的服务发现使用动态端点解析替代静态节点列表。无需手动更新上游服务的 IP 地址,你可以配置数据面查询服务注册中心并自动发现后端节点。

服务发现的工作原理​

使用服务发现时,需要在上游配置中指定服务名称和发现类型,而不是使用静态 nodes 数组。

  1. 查询注册中心:数据面(DP)定期查询配置的服务注册中心,例如 Kubernetes API、Nacos 服务器或 Consul Agent。
  2. 获取端点:注册中心返回所请求服务的健康 IP 地址和端口列表。
  3. 本地缓存:数据面将这些端点缓存在内存中,以实现高性能路由。
  4. 更新节点:数据面根据获取的端点更新上游节点列表。
  5. 负载均衡:网关负载均衡器将传入请求分发到发现的节点。

支持的发现类型​

API7 网关控制面支持将服务连接到以下服务注册中心:

  • Kubernetes:直接查询 API 服务器,解析 Kubernetes Service 的端点。
  • Nacos:与阿里巴巴 Nacos 注册中心集成,实现动态服务发现。
  • Consul:与 HashiCorp Consul Catalog 集成,实现动态服务发现。

静态节点与服务发现对比​

特性静态节点服务发现
配置手动(IP/端口)自动(服务名称)
维护高(节点变更时必须更新)低(自动更新)
可扩展性扩缩容时需要手动更新支持即时扩缩容
环境物理机、旧应用Kubernetes、微服务

配置字段​

使用服务发现配置上游时,通常需要提供:

  • 服务名称:注册中心特定的服务标识符。对于 Nacos,请使用 <registry_id>/<namespace>/<group>/<service_name>,例如 <registry_id>/public/DEFAULT_GROUP/httpbin。Kubernetes DNS 名称并不是通用的服务发现标识符。
  • 发现类型:注册中心类型(kubernetes、nacos 或 consul)。
  • 命名空间选择器:对于 Kubernetes,用于筛选网关应监视的命名空间。
  • 默认权重:注册中心未提供权重时,分配给已发现节点的权重。

服务注册中心状态​

以下服务注册中心状态详情自 API7 企业版 3.10.9 起引入。此前的 3.10.x 版本仅报告 healthy、lost_connection 和 connecting 状态,且不返回 lost_connection_instances。

网关组的**服务注册中心(Service Registries)**页面显示每个服务注册中心的连接状态。网关实例会上报自己能否连接各个注册中心,控制面基于网关组内在线网关实例(即最近 60 秒内发送过心跳的实例)的上报结果汇总状态。

状态含义
健康上报过该注册中心的在线网关实例全部与其保持连接。
部分失去连接其中部分网关实例与该注册中心失去连接。
失去连接其中所有网关实例均与该注册中心失去连接。
正在连接尚无在线网关实例上报该注册中心,或该注册中心未启用健康检查。

将鼠标悬停在部分失去连接或失去连接上,可以查看与该注册中心失去连接的网关实例,列表显示每个网关实例的主机名、实例 ID 和失去连接时间。

/api/gateway_groups/{gateway_group_id}/service_registries 相关接口返回相同的信息。status 字段的取值为 healthy、partially_lost_connection、lost_connection 或 connecting;lost_connection_instances 字段列出每个失去连接的网关实例的 instance_id、hostname 和 lost_since。

如需在网关实例与注册中心持续失去连接时收到通知,请创建事件为 Service Registry Lost Connection(注册中心连接异常)的告警策略,详见注册中心连接异常告警。

后续步骤​