ApacheAPISix

May 23, 2025 / Administrator / 11阅读 / 0评论/ 分类: Gateway

refer

https://apisix.apache.org/zh/docs/apisix/installation-guide/

Install

https://apisix.apache.org/zh/docs/apisix/installation-guide/

安装 etcd

APISIX 使用 etcd 作为配置中心进行保存和同步配置。在安装 APISIX 之前,需要在你的主机上安装 etcd。

如果你在安装 APISIX 时选择了 Docker 或 Helm 安装,那么 etcd 将会自动安装;如果你选择其他方法或者需要手动安装 APISIX,请参考以下步骤安装 etcd:

ETCD_VERSION='3.5.19'

wget https://github.com/etcd-io/etcd/releases/download/v3.5.19/etcd-v3.5.19-linux-amd64.tar.gz

tar -xvf etcd-v3.5.19-linux-amd64.tar.gz 
cd etcd-v3.5.19-linux-amd64
cp -a etcd etcdctl /usr/bin/

nohup etcd >/tmp/etcd.log 2>&1 &

通过 DEB 仓库安装

# 这个gnupg是给apt-key软件使用的
apt install gnupg && apt install gnupg1

# 安装 DEB 仓库
wget -O - http://repos.apiseven.com/pubkey.gpg | apt-key add -
echo "deb http://repos.apiseven.com/packages/debian bullseye main" | tee /etc/apt/sources.list.d/apisix.list




# 安装 APISIX
apt update
apt install -y apisix=3.12.0-0

管理 APISIX 服务

修改 the maximum number of open file descriptors,默认是1024,为了提高性能,设置为65535

vim /etc/security/limits.conf
# 针对所有用户(或替换 * 为具体用户名),* wildcard doesn't work for root,所以root用户需要单独配置
root               soft     nofile             65535
root                hard     nofile             65535
*               soft     nofile             65535
*               hard     nofile             65535
  • 生效方式
    • 重启系统重新登录用户会话(退出终端再登录)。
    • 验证:ulimit -n 应显示新值(如 65535)。

APISIX 安装完成后,你可以运行以下命令初始化 NGINX 配置文件和 etcd:

sudo apisix init

通过修改本地 ./conf/config.yaml 文件,或者在启动 APISIX 时使用 -c--config 添加文件路径参数 apisix start -c <path string>,完成对 APISIX 服务本身的基本配置。默认配置不应修改,可以在 apisix/cli/config.lua 中找到。

默认配置文件存在于:/usr/local/apisix/apisix/cli/config.lua

可以修改: /usr/local/apisix/conf/config.yaml

更新 Admin API key

建议修改 Admin API 的 key,保护 APISIX 的安全。

请参考如下信息更新配置文件:

./conf/config.yaml

deployment:
  admin:
    admin_key:
      - name: "admin"
        key: newsupersecurekey  # 请修改 key 的值
        role: admin

更新完成后,你可以使用新的 key 访问 Admin API:

curl http://127.0.0.1:9180/apisix/admin/routes?api_key=newsupersecurekey -i

启动 & 停止

使用以下命令启动 APISIX:

sudo apisix start

如果需要停止 APISIX,你可以使用 apisix quit 或者 apisix stop 命令。

apisix quit 将正常关闭 APISIX,该指令确保在停止之前完成所有收到的请求。

apisix quit

apisix stop 命令会强制关闭 APISIX 并丢弃所有请求。

apisix stop

相关端口

以下是 APISIX 相关的核心端口及其用途的详细说明:


1. 数据平面(Data Plane)端口

处理客户端请求的入口和出口流量,是 API 网关的核心端口。

  • 默认端口

    • 9080:HTTP 协议默认监听端口(处理 HTTP 请求)。
    • 9443:HTTPS 协议默认监听端口(处理加密的 HTTPS 请求)。

    用途
    接收来自客户端的 API 请求,并通过路由、插件等机制转发到上游服务。


2. 管理 API(Admin API)端口

用于配置 APISIX 的接口(如路由、服务、插件等)。

  • 默认端口

    • 9180:HTTP 管理接口(非加密)。
    • 9443:HTTPS 管理接口(加密,需配置证书)。

    用途
    通过 RESTful API 动态管理 APISIX 的配置(例如添加路由、启用插件)。
    安全建议

    • 默认 Admin API 的 key 为 edd1c9f034335f136f87ad84b625c8f1必须修改(参考 config.yaml 中的 admin_key)。
    • 生产环境建议仅允许内网访问或通过防火墙限制来源 IP。

3. etcd 端口

APISIX 使用 etcd 作为配置中心存储动态配置。

  • 默认端口

    • 2379:etcd 客户端通信端口(APISIX 读写配置)。
    • 2380:etcd 节点间通信端口(集群模式下使用)。

    用途
    APISIX 从 etcd 获取路由、插件等配置信息。
    注意
    如果 etcd 与 APISIX 不在同一主机,需确保网络互通且端口开放。


4. 插件相关端口

部分插件可能需要额外端口:

  • Prometheus 插件
    • 9091:默认暴露 Prometheus 指标的端口(通过 /apisix/prometheus/metrics 获取)。
  • gRPC 转发
    • 9081:gRPC 协议监听端口(需在路由中配置 protocols: ["grpc"])。
  • TCP/UDP 流代理
    • 自定义端口:如通过 stream-proxy 插件代理 TCP/UDP 流量时,需配置额外端口。

ufw allow 9080
ufw status numbered

5. Dashboard(可选)

APISIX Dashboard 是独立的管理界面,默认端口:

  • 9000:HTTP 访问端口。
  • 9443:HTTPS 访问端口。
    用途
    通过 Web 界面管理 APISIX 配置(需单独安装)。

端口配置修改

所有端口均可在 config.yaml 中自定义:

apisix:
  node_listen: 8000       # 修改数据平面 HTTP 端口
  ssl_listen: 8443        # 修改数据平面 HTTPS 端口
deployment:
  admin:
    admin_listen: 9180    # 修改 Admin API 端口

安全建议

  1. 最小化暴露端口
    • 数据平面端口(如 9080/9443)对外开放。
    • Admin API(9180)和 etcd(2379)仅限内网访问
  2. 启用 HTTPS
    为 Admin API 和数据平面配置 TLS 证书,避免敏感信息明文传输。
  3. 防火墙规则
    使用 iptables 或云平台安全组限制来源 IP。

检查端口占用

# 查看 APISIX 监听的端口
netstat -tulnp | grep nginx
# 检查 etcd 端口
netstat -tulnp | grep etcd

总结

端口 协议 用途 安全等级
9080 HTTP 客户端请求入口 对外开放
9443 HTTPS 加密客户端请求入口 对外开放
9180 HTTP Admin API 配置管理 内网隔离
2379 HTTP etcd 配置中心通信 内网隔离
9091 HTTP Prometheus 指标暴露 按需开放监控系统

根据实际需求调整端口和安全策略,确保 APISIX 高效安全运行。

Admin API

https://apisix.apache.org/zh/docs/apisix/admin-api/

consumer & route

apisix 请求是先由consumer处理,还是先由route处理?

在 Apache APISIX 的请求处理流程中,请求会先经过 Route(路由)匹配,再进入 Consumer(消费者)认证环节。以下是具体流程解析:


🔄 请求处理核心流程

  1. 路由匹配(Route Matching)优先
    • 当请求到达 APISIX 时,网关首先根据请求的 URI、Host、请求头、Cookie 等特征匹配预先定义的 Route 规则。
    • 若匹配成功,则进入该 Route 绑定的插件执行阶段;若失败,直接返回 404 或自定义错误。
  2. 插件执行阶段触发 Consumer 认证
    • 在路由匹配成功后,APISIX 会按顺序执行该 Route 绑定的插件(如限流、认证等)。
    • 认证类插件(如 key-authjwt-auth)在此阶段运行
      • 插件从请求中提取凭证(如 API Key、JWT Token);
      • 通过凭证匹配对应的 Consumer(消费者),例如通过 API Key 找到绑定的用户身份。
    • 若未配置认证插件或未携带凭证,且 Route 启用了匿名 Consumer(anonymous),请求会被分配至匿名用户。
  3. Consumer 身份生效后的操作
    • 匹配到 Consumer 后,APISIX 会加载该 Consumer 专属的插件配置(如限流规则、上游服务覆盖),并覆盖 Route 或 Service 的同名插件配置(因 Consumer 优先级最高)。
    • 最终请求被转发至指定的上游服务(Upstream)。

⚠️ 关键逻辑说明

  • 执行顺序不可逆
    必须先匹配 Route,才能执行后续插件(包括 Consumer 认证)。未匹配 Route 的请求不会触发任何 Consumer 逻辑。
  • 插件配置优先级
    Consumer > Route > Plugin Config > Service。即使 Route 和 Consumer 都配置了同一插件,最终生效的是 Consumer 的配置。
  • 匿名 Consumer 的兜底作用
    若请求未通过认证且配置了匿名 Consumer,网关会将其视为匿名用户处理,否则返回 401/403

简言之:Route 是流量的“入口关卡”,Consumer 是身份“识别器”。两者协同实现动态路由与用户级策略管控。

consumer存在的意义

当不同的人,对同一个uri地址发起请求时,可以通过consumer来判断,当前请求是来自于哪个用户,从而实现,针对某个用户,做限流操作 或者 黑名单操作

示例

创建routes,支持认证

curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H "X-API-KEY: weipengadmin" -X PUT -i -d '{
    "name": "WaterkbDevRoute",
    "uri": "/v1/chat/completions",
    "plugins": {
        "key-auth": {
            "header": "Authorization",
            "hide_credentials": true
        }
    },
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "218.94.128.34:18102": 1
        }
    }
}'

创建consumer,并支持认证

curl http://127.0.0.1:9180/apisix/admin/consumers  \
-H "X-API-KEY: weipengadmin" -X PUT -i -d '
{
    "username": "WaterkbDevConsumer",
    "plugins": {
        "key-auth": {
            "key": "Bearer waterkb-dev-202505"
        }
    }
}'

进行验证

curl --http1.1 http://127.0.0.1:9080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer waterkb-dev-202505" \
  -d '{
        "model": "deepseek-ai",
        "messages": [
          {"role": "system", "content": "You are a helpful assistant."},
          {"role": "user", "content": "Hello!"}
        ],
        "stream": false
      }'

如果不加Authorization以及对应的bear值,就会出现401 unanthorized提示。

查看routes列表:

curl http://127.0.0.1:9180/apisix/admin/routes \
-H "X-API-KEY: weipengadmin" -X GET

创建其他的routes和 consumer

route:

curl http://127.0.0.1:9180/apisix/admin/routes/2 \
-H "X-API-KEY: long123456@Apisix" -X PUT -i -d '{
    "name": "WaterkbDevEmbeddingRoute",
    "uri": "/v1/embeddings",
    "plugins": {
        "key-auth": {
            "header": "Authorization",
            "hide_credentials": true
        }
    },
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "192.168.10.168:8103": 1
        }
    }
}'

consumer:

curl http://127.0.0.1:9180/apisix/admin/consumers  \
-H "X-API-KEY: long123456@Apisix" -X PUT -i -d '
{
    "username": "WaterkbDevEmbeddingConsumer",
    "plugins": {
        "key-auth": {
            "key": "Bearer waterkb-dev-embedding-202505"
        }
    }
}'

验证:

curl --http1.1 http://127.0.0.1:9080/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer waterkb-dev-embedding-202505" \
  -d '{
        "model": "conan-embedding-v1",
        "input": "今天星期几"
      }'

Stream Proxy & Stream Route

https://apisix.apache.org/zh/docs/apisix/stream-proxy/

文章作者:Administrator

文章链接:http://localhost:8090//archives/apacheapisix

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议,转载请注明出处!


评论