在 OpenShift 或 OKD 上部署 AISIX OSS
AISIX OSS 无需控制面即可在 OpenShift 和 OKD 上运行。网关从声明式 resources.yaml 文件加载模型、模型服务提供方凭据、调用方 API Key 和策略,平台则通过默认的 restricted-v2 安全上下文约束(SCC)分配运行时 UID。
本流程安装一个网关副本,通过边缘 Route 暴露服务,并验证 AISIX 配置与 OpenShift 安全上下文。如果限制或缓存条目需要在副本间保持一致,请在增加副本数之前配置共享 Redis。
前提条件
- 已有 OpenShift 或 OKD 4.11 或更高版本的集群。
oc会话能够在目标项目中管理工作负载、Service、Secret 和 Route,读取 Pod 日志并运行oc exec。- 已获得应用域名和入口 CA 证书,或拥有读取集群 Ingress 配置和
openshift-config-managed中default-ingress-certConfigMap 的权限。集群管理员也可以直接提供域名和 CA,而无需授予这些权限。 - Helm 3、Docker 和 cURL。
- 上游模型服务提供方密钥和调用方 API Key。示例使用 OpenAI 和模型别名
gpt-4o-mini。
准备项目与凭据
选择现有项目;如果集群允许创建项目,也可以申请新项目:
oc project aisix-dp
# 或申请新项目。
oc new-project aisix-dp
导出示例所用凭据,然后将其存储为 Secret:
export OPENAI_API_KEY="YOUR_PROVIDER_API_KEY"
export CALLER_API_KEY="YOUR_CALLER_API_KEY"
oc -n aisix-dp create secret generic openai-credentials \
--from-literal=api-key="$OPENAI_API_KEY"
oc -n aisix-dp create secret generic aisix-caller-keys \
--from-literal=my-caller="$CALLER_API_KEY"
准备并验证 AISIX 资源
选择资源来源前,先添加 Chart 仓库:
helm repo add api7 https://charts.api7.ai
helm repo update
将以下 Chart values 保存为 values.yaml。Chart 会把内联资源文档存入 Secret,凭据仍保存在前面创建的 Secret 中:
replicaCount: 1
image:
repository: ghcr.io/api7/aisix
tag: "1.7.0"
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
如果 resources.yaml 由其他系统管理,请先准备资源文件,再选择使用现有 Secret或使用现有 ConfigMap。执行这些命令时使用 aisix-dp 项目和 oc。跳过下方的内联资源渲染与验证,然后携生成的 values.yaml 返回本文部署网关部分。
渲染由 Chart 管理的 Secret,并提取从 values.yaml 组装的完整资源文档:
helm template aisix-dp api7/aisix --namespace aisix-dp --version 1.7.0 \
-f values.yaml --show-only templates/secret.yaml |
awk '
/^ resources\.yaml: \|$/ { in_resources = 1; next }
in_resources && /^---$/ { exit }
in_resources { sub(/^ /, ""); print }
' > rendered-resources.yaml
使用网关将接收的相同凭据验证渲染出 的文档:
docker run --rm -i \
-e OPENAI_API_KEY -e CALLER_API_KEY \
--entrypoint /bin/sh ghcr.io/api7/aisix:1.7.0 \
-c 'umask 077; cat > /tmp/resources.yaml && exec /usr/local/bin/aisix validate --resources /tmp/resources.yaml' \
< rendered-resources.yaml
以流式方式传入文档,可避免放宽宿主机文件权限或更改其 SELinux 标签。
部署网关
在选定项目中安装 Chart:
helm install aisix-dp api7/aisix \
--namespace aisix-dp \
--version 1.7.0 \
--values values.yaml
网关 Chart 不固定 runAsUser、runAsGroup 或 fsGroup。它启用 runAsNonRoot 和 RuntimeDefault seccomp 配置,允许 restricted-v2 从项目范围内分配 ID。容器使用只读根文件系统、禁用权限提升,并丢弃除 NET_BIND_SERVICE 以外的所有能力;运行时可写路径使用 emptyDir 卷。
不要向网关 ServiceAccount 授予 anyuid。如果集群管理员为组织策略或自定义卷分配了固定 ID,请将 podSecurityContext.runAsUser、podSecurityContext.runAsGroup 和 podSecurityContext.fsGroup 设为所分配的值。除非镜像 UID 10001 属于项目允许的范围,否则不要复用它。
如果组织策略使用比 restricted-v2 更严格的 SCC,请由集群管理员审查渲染后的清单,并明确分配所需的 ID 或能力。
暴露网关
为默认的纯 HTTP proxy Service 端口创建边缘 Route。OpenShift 路由器终止 TLS,并通过 HTTP 将流量转发到网关。如果应用域名由集群管理员提供,请将 ROUTE_DOMAIN 设置为该域名,并省略下方第一条导出命令:
export ROUTE_DOMAIN="$(oc get ingresses.config.openshift.io cluster \
-o jsonpath='{.spec.domain}')"
export GATEWAY_ROUTE_HOST="aisix-gateway.$ROUTE_DOMAIN"
oc create route edge aisix-dp \
--service=aisix-dp \
--port=proxy \
--hostname="$GATEWAY_ROUTE_HOST" \
--namespace aisix-dp
此命令使用默认发布名称和 proxy Service 端口。如果发布使用了名称覆盖或自定义监听器,请运行 oc get service -n aisix-dp,并替换为实际的 Service 名称和命名端口。
如果使用组织管理的 DNS,请在创建 Route 前将 GATEWAY_ROUTE_HOST 设置为对应主机名,并确保它解析到路由器。提供匹配的 Route 证书和私钥,或配置 Ingress Controller 的默认证书以覆盖该主机名。
如果网关监听器在 Pod 内终止 TLS,请使用 passthrough Route。如果路由器需要与 Service 建立新的、经过验证的 TLS 连接,请使用 re-encrypt 终止方式。
验证部署
默认应用域名通常使用由集群内部入口 CA 签发的通配符证书。如果工作站尚未信任此 CA,请导出它,供 curl 检查使用:
oc get configmap default-ingress-cert -n openshift-config-managed \
-o jsonpath='{.data.ca-bundle\.crt}' > ingress-ca.crt
export CURL_CA_BUNDLE="$PWD/ingress-ca.crt"
如果 CA 文件由管理员提供,请将其保存为 ingress-ca.crt,并只运行 CURL_CA_BUNDLE 导出命令。如果 Route 或默认 Ingress Controller 使用工作站已信任的证书,则跳过此导出步骤。
等待网关 Deployment 就绪,并确认其分配到的 SCC 和 UID:
oc rollout status deployment/aisix-dp -n aisix-dp --timeout=5m
export GATEWAY_POD="$(oc get pod -n aisix-dp \
-l 'app.kubernetes.io/instance=aisix-dp,app.kubernetes.io/component=gateway' \
-o jsonpath='{.items[0].metadata.name}')"
oc get pod -n aisix-dp "$GATEWAY_POD" \
-o jsonpath='{.metadata.annotations.openshift\.io/scc}{"\n"}'
oc exec -n aisix-dp "$GATEWAY_POD" -- id -u
第一行应显示 restricted-v2,第二行应显示运行中进程使用的 UID。请确认该 UID 位于项目分配的范围内。
通过 Route 发送请求,验证就绪状态、调用方身份验证和上游模型服务提供方连接:
export AISIX_PROXY="https://$GATEWAY_ROUTE_HOST"
curl -sS "$AISIX_PROXY/readyz"
curl -sS "$AISIX_PROXY/v1/models" \
-H "Authorization: Bearer $CALLER_API_KEY"
curl -sS "$AISIX_PROXY/v1/chat/completions" \
-H "Authorization: Bearer $CALLER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [
{
"role": "user",
"content": "Reply with: AISIX is ready"
}
]
}'
就绪检查请求应返回 ok,模型列表应包含 gpt-4o-mini,补全结果应包含所请求的助手消息。
后续步骤
- 在 OpenShift 或 OKD 上升级 AISIX OSS。
- 为生产环境做准备。
- 在 Kubernetes 上部署和运维 AISIX 网关,了解共享 Redis、扩缩容、中断处理和高级监听器。