APISIX

Apache APISIX 是 Apache 软件基金会下的顶级项目,由 API7.ai 开发并捐赠。它是一个具有动态、实时、高性能等特点的云原生 API 网关。

你可以使用 APISIX 网关作为所有业务的流量入口,它提供了动态路由、动态上游、动态证书、A/B 测试、灰度发布(金丝雀发布)、蓝绿部署、限速、防攻击、收集指标、监控报警、可观测、服务治理等功能。

安装APISIX

(

  • 已安装 Docker,用于部署 etcdAPISIX
  • 已安装 curl,用于验证 APISIX 是否安装成功。

请确定本机已经安装了Docker

)

安装 APISIX

APISIX 可以借助 quickstart 脚本快速安装并启动:

复制代码
curl -sL https://run.api7.ai/apisix/quickstart | sh

该命令启动 apisix-quickstartetcd 两个容器,APISIX 使用 etcd 保存和同步配置。APISIX 和 etcd 容器使用 Docker 的 host 网络模式,因此可以从本地直接访问。

如果一切顺利,将输出如下信息:

复制代码
✔ APISIX is ready!

安装过程如下:

本机已经安装成功.

验证

你可以通过 curl 来访问正在运行的 APISIX 实例。比如,你可以发送一个简单的 HTTP 请求来验证 APISIX 运行状态是否正常:

复制代码
curl "http://127.0.0.1:9080" --head | grep Server

如果一切顺利,将输出如下信息:

复制代码
Server: APISIX/Version

这里的 Version 是指你已经安装的 APISIX 版本,比如 APISIX/3.3.0

现在,你已经成功安装并运行了 APISIX!

复制代码
curl "http://127.0.0.1:9080/ip"

你将会得到类似下面的返回:

APISIX 提供内置的 Dashboard UI,可访问 http://127.0.0.1:9180/ui 使用。

Route 是什么

Route(也称之为路由)是访问上游目标的路径,在 Apache APISIX 中,Route 首先通过预定的规则来匹配客户端请求,然后加载和执行相应的插件,最后将请求转发至特定的 Upstream。

在 APISIX 中,一个最简单的 Route 仅由匹配路径和 Upstream 地址两个信息组成。

Upstream 是什么

Upstream(也称之为上游)是一组具备相同功能的节点集合,它是对虚拟主机的抽象。Upstream 可以通过预先配置的规则对多个服务节点进行负载均衡。

创建路由

你可以创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。

通过下面的命令,你将创建一个路由,把请求http://127.0.0.1:9080/ip 转发至 httpbin.org/ip

复制代码
curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{
  "id": "getting-started-ip",
  "uri": "/ip",
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "httpbin.org:80": 1
    }
  }
}'

如果配置成功,将会返回 HTTP/1.1 201 Created

启用负载均衡

创建一个具有两个上游服务的路由,访问 /headers 将被转发到 httpbin.orgmock.api7.ai 这两个上游服务,并且会返回请求头。

复制代码
curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{
  "id": "getting-started-headers",
  "uri": "/headers",
  "upstream" : {
    "type": "roundrobin",
    "nodes": {
      "httpbin.org:443": 1,
      "mock.api7.ai:443": 1
    },
    "pass_host": "node",
    "scheme": "https"
  }
}'

如果路由创建成功,你将会收到返回 HTTP/1.1 201 Created

info
  1. pass_host 字段设置为 node,将传递请求头给上游。
  2. scheme 字段设置为 https,向上游发送请求时将启用 TLS。

APISIX的配置文件是:

apisix-docker-master/example/apisix_conf/config.yaml

查看key:

cat /etc/sca/apisix-docker-master/example/apisix_conf/config.yaml I grep key

密钥验证

API 网关主要作用是连接 API 消费者和提供者。出于安全考虑,在访问内部资源之前,应先对消费者进行身份验证和授权。

APISIX 拥有灵活的插件扩展系统,目前有很多可用于用户身份验证和授权的插件。

Consumer 是什么

Consumer(也称之为消费者)是指使用 API 的应用或开发人员。

在 APISIX 中,消费者需要一个全局唯一的 名称 ,并从上面的列表中选择一个身份验证 插件

Key Authentication 是什么

Key Authentication(也称之为密钥验证)是一个相对比较简单但是应用广泛的身份验证方法,它的设计思路如下:

  1. 管理员为路由添加一个身份验证密钥(API 密钥)。
  2. API 消费者在发送请求时,在查询字符串或者请求头中添加密钥。

创建消费者

创建一个名为 tom 的消费者,并启用 key-auth 插件,密钥设置为 secret-key。所有携带密钥 secret-key 的请求都会被识别为消费者 tom

caution

生产环境请使用复杂的密钥。

复制代码
curl -i "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT -d '
{
  "username": "tom",
  "plugins": {
    "key-auth": {
      "key": "secret-key"
    }
  }
}'

如果消费者创建成功,你将得到返回 HTTP/1.1 201 Created

启用 Authentication

在教程配置路由中,我们已经创建了路由 getting-started-ip,我们通过 PATCH 方法为该路由增加 key-auth 插件:

复制代码
curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
  "plugins": {
    "key-auth": {}
  }
}'

如果增加插件成功,你将得到返回 HTTP/1.1 201 Created

禁用 Authentication

将参数设置 _meta.disabletrue,即可禁用密钥验证插件。

复制代码
curl "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
  "plugins": {
    "key-auth": {
      "_meta": {
        "disable": true
      }
    }
  }
}'

APISIX 是一个统一的控制中心,它管理 API 和微服务的进出流量。除了客户端发来的合理的请求,还可能存在网络爬虫产生的不必要的流量,此外,网络攻击(比如 DDos)也可能产生非法请求。

APISIX 提供限速功能,通过限制在规定时间内发送到上游服务的请求数量来保护 APIs 和微服务。请求的计数在内存中完成,具有低延迟和高性能的特点。

在本教程中,你将启用 limit-count 插件来限制传入流量的速率。

启用 Rate Limiting

在教程配置路由中,我们已经创建了路由 getting-started-ip,我们通过 PATCH 方法为该路由增加 limit-count 插件:

复制代码
curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
  "plugins": {
    "limit-count": {
        "count": 2,
        "time_window": 10,
        "rejected_code": 503
     }
  }
}'

如果增加插件成功,你将得到返回 HTTP/1.1 201 Created。上述配置将传入流量的速率限制为每 10 秒最多 2 个请求。

禁用 Rate Limiting

将参数设置 _meta.disabletrue,即可禁用限速插件。

复制代码
curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
    "plugins": {
        "limit-count": {
            "_meta": {
                "disable": true
            }
        }
    }
}'

别人分享:

相关推荐
plainGeekDev2 小时前
单例模式 → object 声明
android·java·kotlin
用户298698530143 小时前
Java 实现 Word 文档文本与图片提取的方法
java·后端
SimonKing4 小时前
铁子,IntelliJ IDEA 2026.1.3来了,升不升?
java·后端·程序员
咖啡八杯15 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
用户128526116021 天前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
java
Linsk1 天前
组件 = 模板 + 业务逻辑
java·前端·vue.js
星沉远浦1 天前
用Gemini高效解决Java代码报错难以定位的问题
java
用户298698530141 天前
Word 文档字符级格式化:Java 实现方案详解
java·后端
笨鸟飞不快1 天前
从单个服务到集群:一次完整的性能排查复盘
java·前端