API 网关专栏 · 第 22

Apache APISIX API 网关搭建实战

2025年04月03日
Apache APISIX API 网关搭建实战

简介

什么是 API 网关?

API 网关是位于客户端和后端服务之间的服务器,负责处理 API 请求、执行安全策略并高效管理流量。它简化了 API 管理,并提高了性能、安全性和可观测性。

为什么要使用 API 网关?

随着微服务和云原生应用的兴起,API 网关可以帮助开发者:

  • 高效地路由和负载均衡 API 流量。
  • 通过身份验证和授权保护 API 安全。
  • 执行限流并防止滥用。
  • 监控 API 的使用情况和性能。
  • 转换 API 请求和响应。

搭建 API 网关(实战指南)

在本指南中,我们将使用 Apache APISIX 搭建一个 API 网关,并将其配置为将请求路由到后端服务。

准备工作

确保你已安装以下工具:

  • Docker(用于快速部署)
  • cURL(用于 API 测试)
  • 一个后端服务(简单的 HTTP 服务器,如 NGINX 或示例 API)

第 1 步:安装 Apache APISIX

我们将使用 Docker 部署 Apache APISIX。

  1. 克隆 Apache APISIX 仓库并进入目录:

    1git clone https://github.com/apache/apisix-docker.git
    2cd apisix-docker/example
  2. 使用 Docker Compose 启动 APISIX:

    1docker-compose up -d
  3. 验证 APISIX 网关是否正在运行:

    1curl http://127.0.0.1:9080/apisix/admin/routes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
  4. 如果成功,这将返回一个空的路由列表。

第 2 步:添加后端 API

在此示例中,我们将使用一个带有 httpbin 的简单后端 API:

  1. 运行 httpbin 容器:

    1docker run -d --name httpbin -p 8080:80 kennethreitz/httpbin
  2. 测试后端 API:

    1curl http://127.0.0.1:8080/get

第 3 步:配置 API 网关路由

现在,让我们配置 APISIX 以将请求路由到我们的后端。

  1. 在 APISIX 中添加一条路由,以将请求代理到 httpbin

    1curl http://127.0.0.1:9080/apisix/admin/routes/1 \
    2     -X PUT \
    3     -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
    4     -d '{
    5         "uri": "/get",
    6         "upstream": {
    7             "type": "roundrobin",
    8             "nodes": {
    9                 "127.0.0.1:8080": 1
    10             }
    11         }
    12     }'
    
  2. 测试 API 网关路由:

    1curl http://127.0.0.1:9080/get
  3. 你应该会看到来自 httpbin 的响应。

第 4 步:添加限流

为了保护后端服务,让我们启用限流(Rate Limiting)。

  1. 将限流插件应用到我们的路由:

    1curl http://127.0.0.1:9080/apisix/admin/routes/1 \
    2     -X PUT \
    3     -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
    4     -d '{
    5         "uri": "/get",
    6         "plugins": {
    7             "limit-count": {
    8                 "count": 5,
    9                 "time_window": 60,
    10                 "rejected_code": 429,
    11                 "key": "remote_addr"
    12             }
    13         },
    14         "upstream": {
    15             "type": "roundrobin",
    16             "nodes": {
    17                 "127.0.0.1:8080": 1
    18             }
    19         }
    20     }'
    
  2. 测试限流功能:

    1for i in {1..6}; do curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9080/get ; done
  3. 第 6 次请求应返回 429 (Too Many Requests)

第 5 步:启用 API 身份验证

为了保护 API 的安全,我们将添加 API Key 身份验证

  1. 创建一个带有 API Key 的消费者(Consumer):

    1curl http://127.0.0.1:9080/apisix/admin/consumers \
    2     -X PUT \
    3     -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
    4     -d '{
    5         "username": "test-user",
    6         "plugins": {
    7             "key-auth": {
    8                 "key": "my-secure-key"
    9             }
    10         }
    11     }'
    
  2. 更新路由以要求身份验证:

    1curl http://127.0.0.1:9080/apisix/admin/routes/1 \
    2     -X PUT \
    3     -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
    4     -d '{
    5         "uri": "/get",
    6         "plugins": {
    7             "key-auth": {}
    8         },
    9         "upstream": {
    10             "type": "roundrobin",
    11             "nodes": {
    12                 "127.0.0.1:8080": 1
    13             }
    14         }
    15     }'
    
  3. 测试身份验证:

    1curl -H "apikey: my-secure-key" http://127.0.0.1:9080/get
  4. 如果没有提供该密钥,请求将被拒绝。

总结

恭喜你!你已经成功搭建了一个正常运行的 API 网关,其中包含:

  • 基本的请求路由。
  • 用于保护后端服务的限流。
  • 用于提高安全性的 API 身份验证。

微信咨询

获取方案