网络与安全
AISIX 网关提供彼此独立的代理监听器和指标/状态监听器。根据资源来源,它还可能连接到 etcd 或 AISIX Cloud。请将部署中存在的每个网络暴露面视为独立的信任区域。这些暴露面承载不同的流量、凭证和状态数据,因此需要根据各自角色制定相应的暴露策略。下表列出了本文介绍的监听器和配置 暴露面。
网络边界
可以参考下表决定每个网络中允许访问哪些内容:
| 暴露面 | 承载内容 | 暴露范围 |
|---|---|---|
| 代理监听器 | 面向调用方的 AI 流量,例如 /v1/chat/completions | 预期调用方或入口层 |
| 指标/状态监听器 | Prometheus 指标以及配置和模型状态 | 可信监控网络 |
| 诊断监听器 | GET /debug/pprof/heap 上的网关进程堆 profile,默认位于 127.0.0.1:9091 | 仅回环地址;从主机上或通过 kubectl port-forward 访问 |
| 配置存储 | 通过 etcd 配置的开源 AISIX 网关动态资源 | 仅 AISIX 和配置管理系统 |
| AISIX Cloud 控制面连接 | AISIX 网关与 AISIX Cloud 控制面之间经过 mTLS 认证的通信 | 到控制面的出站 mTLS 路径 |
只向调用方暴露代理监听器。将指标/状态监听器和 etcd 保留在私有网络中,并让诊断监听器只绑定回环地址:堆 profile 会列出占用内存的函数,而该路由不需要身份认证。指标路径和 /status/* 路由不需要身份认证,并通过专用指标/状态监听器提供。模型状态包含模型 ID 和显示名称,因此不要将此监听器暴露到公网。
当网络位置要求加密传输或双向认证传输时,请使用 TLS 或 mTLS。启用 etcd mTLS 时,启动配置必须指向网关进程可读取的 CA、客户端证书和客户端密钥文件。
暴露代理监听器
除非网关必须直接绑定低于 1024 的端口,否则请让网关监听非特权容器端口。通过负载均衡器、Ingress 或 Service 发布面向调用方的端口,不要扩大其他监听器的访问范围。
发布的 AISIX 镜像以非 root 用户(UID 10001)运行。网关二进制文件具有生效的 CAP_NET_BIND_SERVICE 文件能力,因此无需以 root 身份运行即可绑定 80、443 等端口。如果运行时策略不允许授予该能力,容器可能在启动时失败,并报告 exec: Operation not permitted。
请在 AISIX 代理监听器上终止 TLS,或在其前方的可信入口层终止 TLS。当其他代理终止或转发流量时,只为确切的可信代理网段和转发请求头配置真实客户端 IP 解析。
监听器层也可以并列暴露一个 HTTPS 端口和一个明文 HTTP 端口,用于暂时无法切换到 HTTPS 的调用方。此时每个监听器都是各自的信任区域:明文监听器上传输的调用方 API 密钥和提示词内容都是明文,因此请只把它绑定到可信的网络接口。参阅 TLS 与 mTLS。
如果要通过终止 TLS 的出口链路将 GitHub Copilot 流量发送到 AISIX,同时让客户端继续使用官方服务端点,请参阅 IDE AI 流量正向代理。
对于运行在 Kubernetes 上并连接 AISIX Cloud 的 AISIX 网关,请参阅在 Kubernetes 上部署 AISIX 网关,了解 Service 暴露、容器能力、自动扩缩容和中断处理。