跳到主要内容
版本:1.3.0

在 Kubernetes 上部署开源网关

api7/aisix Helm chart 支持两种安装模式。默认模式连接到 AISIX Cloud 控制面,相关内容见在 Kubernetes 上部署 AISIX 网关。本文介绍另一种模式:设置 controlPlane.enabled: false,以完全不依赖控制面的方式运行开源 AISIX 网关

在独立模式下,全部资源——服务提供方密钥、模型、调用方 API Key、安全护栏、MCP 服务器、限流策略——都来自你通过 chart 提供的一份声明式 resources.yaml 文件controlPlane 下的任何配置都不会被读取,也不需要网关证书。

前提条件

  • 一个 Kubernetes 集群,已配置好可访问它的 kubectl,以及 Helm 3。
  • 一份 resources.yaml 文件,至少声明一个服务提供方密钥、一个模型和一个调用方 API Key。可参照开源 AISIX 网关快速入门资源文件参考编写。

安装前请先校验该文件。validate 子命令只解析文件,不会绑定监听端口:

docker run --rm -v "$(pwd):/work:ro" \
--entrypoint /usr/local/bin/aisix ghcr.io/api7/aisix:1.3.0 \
validate --resources /work/resources.yaml

选择资源来源

chart 从以下三处之一读取 resources.yaml,且必须且只能设置其中一处。一处都不设置或设置多处都会让渲染失败,并在报错中点名这三个 values 键——不会按优先级取其一。

Values 键文件存放位置适用场景
standalone.resources以 YAML 映射的形式内联在 values 中,由 chart 渲染成它自己管理的 Secret。文件与 release 一起管理。
standalone.existingSecret你自己创建的 Secret,键名为 resources.yaml文件中含有明文凭据,或其生命周期由别处管理。
standalone.existingConfigMap你自己创建的 ConfigMap,键名为 resources.yaml文件中的每个凭据都是 ${VAR} 引用而非明文。

chart 把 standalone.resources 渲染成 Secret 而不是 ConfigMap,因为服务提供方密钥属于凭据。即便如此,凭据也不必写进 values 文件:${VAR} 引用会在文件加载时从容器环境中解析,因此可以改为通过 extraEnvVars 提供。参见环境变量插值

使用内联资源安装

controlPlane:
enabled: false

standalone:
resources:
_format_version: "1"
provider_keys:
- display_name: openai-main
provider: openai
adapter: openai
api_key: ${OPENAI_API_KEY}
api_base: https://api.openai.com/v1
models:
- display_name: gpt-4o-mini
provider: openai
model_name: gpt-4o-mini
provider_key: openai-main
api_keys:
- display_name: my-caller
key_env: CALLER_API_KEY
allowed_models:
- gpt-4o-mini

extraEnvVars:
- name: OPENAI_API_KEY
valueFrom:
secretKeyRef:
name: openai-credentials
key: api-key
- name: CALLER_API_KEY
valueFrom:
secretKeyRef:
name: aisix-caller-keys
key: my-caller
helm repo add api7 https://charts.api7.ai
helm repo update

kubectl create namespace aisix
helm install aisix api7/aisix --namespace aisix --version 1.3.0 -f values.yaml

从已有 Secret 安装

kubectl -n aisix create secret generic aisix-resources \
--from-file=resources.yaml=./resources.yaml

helm install aisix api7/aisix --namespace aisix --version 1.3.0 \
--set controlPlane.enabled=false \
--set standalone.existingSecret=aisix-resources

当文件中不含明文凭据时,standalone.existingConfigMap 的用法相同。

chart 配置了什么

chart 会把资源文件以只读方式挂载到 /etc/aisix/resources/resources.yaml,并在 /etc/aisix/standalone/config.yaml 渲染一份启动配置,其中只有两项设置:

resources_file: /etc/aisix/resources/resources.yaml
admin:
enabled: false

其余全部通过环境变量传给网关,环境变量的优先级高于该文件。代理和指标监听地址由 chart 自己设置;其他启动配置字段请通过 extraEnvVarsAISIX_<SECTION>__<KEY> 的形式提供:

extraEnvVars:
- name: AISIX_OBSERVABILITY__LOG_LEVEL
value: debug
- name: AISIX_CACHE__BACKEND
value: redis

chart 还会在网关 Pod 上设置 enableServiceLinks: false。否则 Kubernetes 会为命名空间中的每个 Service 向容器注入一个 Docker 风格的链接变量,而名为 aisixaisix-xxx 的 Service 产生的变量恰好带有网关会读取的 AISIX_ 前缀。参见 Kubernetes Service 链接变量

让资源文件的改动生效

网关只在收到 SIGHUP 时重新读取 resources.yaml,而 chart 从不发送该信号。让改动生效的是一次 Pod 滚动更新。

  • **内联资源。**编辑 standalone.resources 并执行 helm upgrade。Pod 模板中带有已渲染文件的 checksum,因此改动会自动触发滚动更新。

  • **已有的 Secret 或 ConfigMap。**在 chart 之外编辑该对象不会触发任何滚动更新——Kubernetes 会原地更新挂载的文件,不会通知网关。请显式执行:

    kubectl rollout restart deploy/<release>-aisix -n <namespace>

chart 会在安装后的提示信息中打印适用于你这次安装的命令。

健康检查

两个探针都指向代理端口。/livez 在代理监听端口绑定后即有响应;/readyz 在实例可服务时返回 200,在排空期间返回 503。使用文件作为资源来源时,文件解析完成后监听端口即绑定,因此独立模式的网关会立即开始服务,而不必等待拉取配置。参见健康检查

暴露、扩缩容与运维

独立模式改变的是资源从哪里来,而不是网关如何运行。Service 暴露方式、使用 HorizontalPodAutoscaler 或 KEDA 扩缩容、在 Redis 中共享限流计数器、PodDisruptionBudget,以及终止与排空行为,都与连接控制面的模式完全相同,相关内容见在 Kubernetes 上部署 AISIX 网关

在运行多个副本之前,请先配置共享 Redis 后端。限流计数器默认按副本各自计数,因此 N 个副本会把每条限流放大 N 倍。

listeners values 在这里同样适用,因此独立模式的网关也可以并列提供一个 HTTPS 端口和一个明文 HTTP 端口,参阅同时提供 HTTPS 和明文 HTTP

查看 chart 接受的全部 values:

helm show values api7/aisix --version 1.3.0

Chart 源码和软件包发布在 aisix-1.3.0 Helm Chart Release 中。

哪些能力不可用

独立模式没有控制面,因此 AISIX Cloud 的各项能力都不存在:没有控制台,没有组织和环境,没有集中的用量与成本上报,没有预算,也没有按环境的配置下发。请改为把日志和指标导出到你自己运维的系统——参见导出器

Admin API 同样不会绑定。以文件作为资源来源时它是只读的,而绑定它需要 chart 并不管理的 admin key。如果确实需要,可以通过 extraEnvVars 打开:

extraEnvVars:
- name: AISIX_ADMIN__ENABLED
value: "true"
- name: AISIX_ADMIN__ADDR
value: "0.0.0.0:9180"
- name: AISIX_ADMIN__ADMIN_KEYS
value: <admin-key>

如果之后要迁移到受控部署,请以 controlPlane.enabled 的默认值安装 chart,并从控制面签发网关证书。资源不会被自动带过去,需要在控制面重新创建,参见规划迁移