网络与安全
请将代理监听器、Admin 监听器、指标端点、etcd 和托管控制面连接视为彼此独立的信任区域。
网络边界
可以参考下表决定每个网络中允许访问哪些内容:
| 暴露面 | 承载内容 | 暴露范围 |
|---|---|---|
| 代理监听器 | 面向调用方的 AI 流量,例如 /v1/chat/completions | 预期调用方或入口层 |
| Admin 监听器 | Admin API、Admin 健康检查、OpenAPI 和 playground | loopback、私有子网或仅管理员可访问网络 |
| 指标/状态监听器 | Prometheus 指标以及配置和模型状态 | 可信监控网络 |
| 配置存储 | 自托管部署中位于 etcd 的动态网关资源 | 仅 AISIX 和配置管理系统 |
| 托管控制面连接 | 与 AISIX 托管控制面之间经过 mTLS 认证的网关通信 | 到控制面的出站 mTLS 路径 |
只向调用方暴露代理监听器。Admin、指标/状态、OpenAPI、playground 和 etcd 应保留在私有网络中。指标路径和 /status/* 路由不做认证,并通过专用指标/状态监听器提供。模型状态 包含模型 ID 和显示名称,因此不要将此监听器暴露到公网。
当网络位置要求加密传输或双向认证传输时,请使用 TLS 或 mTLS。启用 etcd mTLS 时,启动配置必须指向网关进程可读取的 CA、客户端证书和客户端密钥文件。
选择特权端口策略
只有当 AISIX 必须直接绑定低于 1024 的端口时,才使用特权容器端口。否则,请让网关监听器使用非特权端口,并通过 Service、Ingress 或负载均衡器映射面向调用方的端口。
发布的 AISIX 容器镜像以非 root 用户(UID 10001)运行。网关二进制文件具有生效的 CAP_NET_BIND_SERVICE 文件能力,因此进程无需以 root 身份运行即可绑定低于 1024 的监听端口。Docker 和 containerd 的默认能力集合包含该能力,因此默认部署无需额外配置能力。
容器能力和 Kubernetes 暴露端口的方式是两个独立决定。请选择符合集群安全策略的模式。
保留镜像能力
Kubernetes 在容器 securityContext 中将该能力写作 NET_BIND_SERVICE。如果 Pod 丢弃所有能力,请为发布的 AISIX 镜像加回该能力,即使配置的监听器使用非特权端口:
securityContext:
capabilities:
drop: ["ALL"]
add: ["NET_BIND_SERVICE"]
Kubernetes Restricted Pod Security Standard 允许在丢弃所有能力后加回 NET_BIND_SERVICE,但 Pod 规范的其余部分仍必须符合该标准。由于二进制文件的文件能力已设置 effective bit,如果运行时阻止授予该能力,容器可能在启动时失败并报告 exec: Operation not permitted。