极限网关 INFINI Gateway 从 0 到 1:简单易懂的入门教程

前言

大家好,今天我们来聊聊「极限网关」(Gateway)。

它是一个轻量级、高性能、面向 Elasticsearch 代理的网关服务,既能代理请求,也能做一些高级功能(比如缓存、负载均衡、限流等)。

如果你是技术小白,看完这篇文章,能够快速学会如何安装、启动、配置以及验证极限网关,让它帮你把后端的 Elasticsearch 代理得又稳、又快、又灵活。


1. 什么是极限网关?

先用一句话解释一下:极限网关就是在你的 Elasticsearch 和客户端(浏览器、应用程序等)之间加了一个"中间人",它会截获请求并进行各种处理,然后再把结果返回给客户端。

通过它,我们能做到以下好处:

  • 请求转发:把所有对 Elasticsearch 的请求先经过网关,再发给后端的 Elasticsearch。

  • 权限控制:可以很轻松地在网关层面做权限认证、白名单或其他安全策略。

  • 数据缓存:常见的搜索请求,可以在网关侧做缓存,提高响应速度,减轻后端压力。

  • 负载均衡:如果你有多台 Elasticsearch 节点,可以让网关帮忙做负载均衡,甚至可以自动发现新增或离线节点。

  • 日志与监控:统一处理和采集日志,为后续分析提供数据。

如果你还不是很了解这其中的价值,你可以先记住:加了网关后,"强"就完事了

当你需要做一些"全局控制"的功能时,再来翻翻本文,你就能更好地体会到网关的威力。


2. 安装网关

极限网关支持各种主流操作系统(Linux、Mac、Windows),安装包体积很小,没有额外依赖,安装起来非常简单。

2.1 自动安装

LinuxMac 系统的命令行里,可以一键下载和安装:

go 复制代码
curl -sSL http://get.infini.cloud | bash -s -- -p gateway

执行后,会自动下载最新版本并解压到 /opt/gateway 目录下。

如果你想指定版本号或自定义安装目录,可以用一下可选参数:

  • -v [版本号]:指定安装的版本号,默认拉取最新版本

  • -d [安装目录]:指定安装目录,默认 /opt/gateway

示例:

go 复制代码
# 指定安装目录为 /usr/local/gateway
curl -sSL http://get.infini.cloud | bash -s -- -p gateway -d /usr/local/gateway

2.2 手动安装

我自己的实测安装方式是手动安装。

如果你不想使用脚本,可以直接去官方的发布页面下载对应操作系统平台的压缩包,然后解压到你喜欢的目录下。

解压后,你会看到一个 bin 文件夹,其中包含 gateway 可执行文件。

官方下载地址:https://release.infinilabs.com/gateway/stable/

2.3 Docker 容器部署

如果你的环境喜欢使用 Docker 来跑服务,极限网关也可以在容器中运行。只要写个简单的 Dockerfile 或者直接用已有的镜像,把配置映射进去就可以了。这里就不展开细说,有需要的可以查看官方文档。

本文没有涉及 Docker 部署。


3. 验证安装

安装完成后,我们可以执行以下命令来验证一下:

go 复制代码
# 进入到解压目录
./gateway-linux-amd64  -v

如果能看到类似下面的输出,就说明安装成功,没毛病:

go 复制代码
[GATEWAY] A light-weight, powerful and high-performance search gateway, open-sourced under the GNU AGPLv3.
[GATEWAY] 1.28.1#1978, 2025-01-24 18:12:34, 2025-12-31 10:10:10, 93fd9e32500a, 8ecefd18d9eb, c511f8f4cab9

4. 启动网关

在安装目录下,用管理员权限直接执行 gateway-linux-amd64 即可启动网关:

go 复制代码
sudo ./gateway-linux-amd64

你会看到类似如下的启动日志:

go 复制代码
___   _   _____  __  __    __  _
  / _ \ /_\ /__   \/__\/ / /\ \ \/_\ /\_/\
 / /_\///_\\  / /\/_\  \ \/  \/ //_\\\_ _/
...

[01-11 16:43:31] [INF] [api.go:255] api server listen at: http://0.0.0.0:2900
[01-11 16:43:31] [INF] [entry.go:262] entry [es_gateway] listen at: https://0.0.0.0:8000
[01-11 16:43:32] [INF] [app.go:254] gateway now started.

这些日志表示网关已经启动了,并在 0.0.0.0:80000.0.0.0:2900 上监听请求(一个是代理端口,一个是管理 API)。

配置非常重要,配置在第 8 部分详细解读。先配置好,才能启动!


5. 访问网关

如果你想确认能不能正常代理 Elasticsearch,可以用浏览器或其他 HTTP 工具(如 curl)访问 http://<网关地址>:8000

  • 如果后续配置了具体的后端 Elasticsearch 地址,那么通过这个端口访问,就相当于访问后端的 Elasticsearch。

6. 停止网关

想停止的话,直接按下 Ctrl+C 就能让网关退出:

go 复制代码
^C
[GATEWAY] got signal: interrupt, start shutting down
[01-11 16:44:41] [INF] [app.go:303] gateway now terminated.
[GATEWAY] 1.0.0_SNAPSHOT, uptime: 1m10.550336s

Thanks for using GATEWAY, have a good day!

7. 以系统服务运行

自行参考如下步骤验证即可。

如果你想把网关跑在后台,当一个系统服务(非常适合生产环境),可以用如下命令:

go 复制代码
# 安装为系统服务
./gateway -service install
# 启动服务
./gateway -service start

如果不想用了,可以用:

go 复制代码
./gateway -service stop
./gateway -service uninstall

如果你需要在同一台机器上跑多个网关实例,可以自定义服务名:

go 复制代码
sudo SERVICE_NAME=mygw ./gateway -service install
sudo SERVICE_NAME=mygw ./gateway -service start
...

8. 配置网关

如前所述,这是关键!没有配置的话,前面第4部分可能启动不起来。

极限网关的配置文件默认叫做 gateway.yml,放在执行目录下。它能控制网关的大部分行为,包括监听地址、路由逻辑、后端 Elasticsearch 集群信息等。

8.1 命令行参数

执行 ./gateway --help 能看到常用的参数:

  • -config string:指定配置文件位置(默认是当前目录下的 gateway.yml

  • -debug:启用调试模式

  • -log string:指定日志级别(trace/debug/info/warn/error)

常见用法示例:

go 复制代码
./gateway -config /etc/gw/gateway.yml -log debug

8.2 配置示例

gateway.yml 中,你最少需要配置以下几个核心部分:

  • entry(入口)

  • router(路由)

  • flow(流程)

  • elasticsearch(后端资源)

我们可以先看一段简单示例:

go 复制代码
entry:
  - name: es_gateway
    enabled: true
    router: default
    network:
      binding: 0.0.0.0:8000

router:
  - name: default
    default_flow: cache_first

flow:
  - name: cache_first
    filter:
      - get_cache:
      - elasticsearch:
          elasticsearch: prod
      - set_cache:

elasticsearch:
  - name: prod
    enabled: true
    endpoint: http://192.168.3.201:9200
    discovery:
      enabled: true
      refresh:
        enabled: true
    basic_auth:
      username: elastic
      password: pass

需要我们修改配置为:

properties 复制代码
entry:
  - name: es_gateway
    enabled: true
    router: default
    network:
      binding: 0.0.0.0:8000


router:
  - name: default
    default_flow: cache_first


flow:
  - name: cache_first
    filter:
      - get_cache:
      - basic_auth:
          valid_users:
              elastic: changeme
      - elasticsearch:
          elasticsearch: prod
      - set_cache:


elasticsearch:
  - name: prod
    enabled: true
    endpoint: https://0.0.0.0:9200
    discovery:
      enabled: true
      refresh:
        enabled: true
    basic_auth:
      username: elastic
      password: changeme

下面我们一条条说清楚:

8.2.1 Entry ------ 对外暴露的"入口"
go 复制代码
entry:
  - name: es_gateway
    enabled: true
    router: default
    network:
      binding: 0.0.0.0:8000
  • name:自定义名字,比如 es_gateway

  • enabled:是否启用。

  • router:关联到我们后面定义的路由规则,这里指定为 default

  • network.binding:本地监听的地址和端口。这里用 0.0.0.0:8000 表示接受所有网卡 IP 的 8000 端口连接。(由于我是云服务器,所以配置 0.0.0.0,读者朋友根据自己网络状态可以配置内网 ip 地址)

8.2.2 Router ------ 请求"转发"与"流量"走向
go 复制代码
router:
  - name: default
    default_flow: cache_first
  • name:路由名称,这里叫 default

  • default_flow:表示默认走哪个流程,这里是 cache_first(后面会定义流程)。

当请求通过 Entry 进来后,会先看这是哪个 router,然后 router 会告诉它,走哪条 flow(流)来进行处理。

8.2.3 Flow ------ 请求的处理"流水线"
go 复制代码
flow:
  - name: cache_first
    filter:
      - get_cache:
      - elasticsearch:
          elasticsearch: prod
      - set_cache:
  • name: 这里叫 cache_first,表示我们想先查缓存,再不行再去 Elasticsearch,然后再写回缓存。

  • filter:就是一个个处理单元,按顺序执行。

这里的三个过滤器:

  1. get_cache::如果命中缓存,就直接返回,不往下执行了。

  2. elasticsearch::如果没有缓存,就把请求转发给后端 Elasticsearch,elasticsearch: prod 表示用下面定义的名字为 prod 的 Elasticsearch 实例。

  3. set_cache::把结果保存到缓存里,方便下次使用。

8.2.4 Elasticsearch ------ "后端资源"设置
go 复制代码
elasticsearch:
  - name: prod
    enabled: true
    endpoint: http://192.168.3.201:9200
    discovery:
      enabled: true
      refresh:
        enabled: true
    basic_auth:
      username: elastic
      password: pass
  • name: 后端集群名。你可以定义多个集群,比如 prodstagingtest 等。

  • endpoint: Elasticsearch 的地址。

  • basic_auth: 如果 ES 需要用户名密码,这里可以配置。

  • discovery.enabled: true: 自动发现 ES 节点,更新健康状态。


9. 工作流程示意(Mermaid 图解)

为了让大家对整个流程有一个直观认识,我们用一张简化的图示意:

  • 当客户端的请求来到网关(Entry),会先匹配对应的 Router;

  • Router 决定走哪条 Flow(这里就是 cache_first);

  • 在 Flow 中,先尝试从缓存拿数据(get_cache);

    • 如果命中缓存,就直接返回给客户端;

    • 如果没命中,就转发到后端的 elasticsearch(prod)

    • 拿到搜索结果后,还要执行 set_cache,让下次查询可能走缓存;

  • 最后把结果返回给客户端。


10. 小结

到这里,你已经基本了解了:

  1. 什么是极限网关:它就是个在 Elasticsearch 前加一层代理,能做各种功能(缓存、负载均衡、安全等)。

  2. 如何安装:自动脚本或手动下载,选择自己喜欢的方式即可。

  3. 如何启动和停止 :直接 sudo ./gateway 或者使用 -service 方式部署为系统服务。

  4. 如何配置 :编辑 gateway.yml 来设置入口、路由、流程以及后端资源,然后重启服务生效。

如果你想进一步"折腾"网关,比如给它加上多条路由多种流量控制日志收集监控告警等高级功能,可以去翻阅更详细的官方文档或配置手册。

不过,就算是最简单的功能,你已经可以用极限网关轻松代理并缓存 Elasticsearch 的请求了。


扩展阅读

如果本文对你有所帮助,欢迎点赞收藏或分享给更多小伙伴。让我们一起用简单的方式,玩转搜索代理和网关技术!

极限网关------一个面向Elasticsearch的高性能应用网关

如何防止 Elasticsearch 服务 OOM ?极限网关来为你的 ES 服务保驾护航!

Elasticsearch 国产化替代方案之一 Easysearch 的介绍与部署指南

读者留言:有 Elasticsearch 国产化替代品吗?现在国产化不让用 ES 了......

Elasticsearch 性能测试工具 Loadgen 之 001------部署及应用详解

Elasticsearch 性能测试工具 Loadgen 之 002------命令行及参数详解

Elasticsearch 性能测试工具 Loadgen 之 003------断言模式详解

Elasticsearch 性能测试工具 Loadgen 之 004------高级用法示例

更短时间更快习得更多干货!

和全球2000+ Elastic 爱好者一起精进!

elastic6.cn------ElasticStack进阶助手

抢先一步学习进阶干货!

相关推荐
研究司马懿3 天前
【云原生】Gateway API介绍
云原生·gateway
研究司马懿3 天前
【云原生】Gateway API路由、重定向、修饰符等关键操作
云原生·gateway
研究司马懿3 天前
【云原生】初识Gateway API
云原生·gateway
七夜zippoe4 天前
API网关设计模式实战 Spring Cloud Gateway路由过滤限流深度解析
java·设计模式·gateway·路由·api网关
汪碧康4 天前
一文讲解kubernetes的gateway Api的功能、架构、部署、管理及使用
云原生·容器·架构·kubernetes·gateway·kubelet·xkube
大佐不会说日语~4 天前
Docker Compose 部署 Spring Boot 应用 502 Bad Gateway 问题排查与解决
spring boot·docker·gateway·maven·故障排查
Dontla6 天前
Kubernetes流量管理双雄:Ingress与Gateway API解析(Nginx与Ingress与Gateway API的关系)
nginx·kubernetes·gateway
JavaLearnerZGQ6 天前
Gateway网关将登录用户信息传递给下游微服务(完整实现方案)
微服务·架构·gateway
Ares-Wang7 天前
网络》》BGP Border Gateway Protocol,边界网关协议
网络·gateway
一方_self8 天前
cloudflare AI gateway实战代理任意第三方大模型服务提供商
人工智能·gateway