欢迎光临
我们一直在努力

K8s Ingress 路由下的前端静态资源与 AI 流式 API 统一网关

K8s Ingress 路由下的前端静态资源与 AI 流式 API 统一网关

封面信息图

在云原生架构中构建现代 AI 应用时,很多团队经常采用“前后端分离部署在两个不同域名”的架构模式:前端静态页面部署在 app.example.com,大模型推理服务或 BFF 部署在 api.example.com。

这种跨域分离架构在接入流式 AI 响应(SSE / Server-Sent Events)与企业级安全鉴权时,会带来一系列棘手的工程麻烦:

  • CORS 复杂预检请求(Preflight OPTIONS):每次发起流式请求前,浏览器都要先发一个 OPTIONS 请求,增加了至少 50~100ms 的首字延迟(TTFT);
  • 跨域 Cookie 鉴权受阻:在现代浏览器对第三方 Cookie 的严格限制下,跨域身份鉴权容易丢失或失效;
  • Ingress 默认缓冲(Buffering)导致 SSE 无法流式吐字:Nginx 默认会缓存上游的 HTTP 响应,直到攒满 4KB 或响应结束才一次性发给浏览器,导致前端打字机动效彻底失效。
  • 通过 Kubernetes Ingress-Nginx 的路径统一路由规约(Path-based Routing),将前端静态 SPA 与后端 AI 流式 API 收敛至同一个域名下,并针对性调优 SSE 代理参数,是构建高性能 AI 应用网关的标准最佳实践。

    统一网关架构设计

    [用户浏览器访问: https://ai.example.com]
    │
    ▼
    [Kubernetes Ingress-Nginx 网关]
    │
    ┌───────────────────────────┴───────────────────────────┐
    ▼ ▼
    [路径 / (默认全部静态页面)] [路径 /api/v1/ai/ (流式推理 API)]
    │ │
    ▼ ▼
    [Frontend Pod (Nginx 托管静态 Bundle)] [AI Inference Service Pod (vLLM / FastAPI)]
    – 强缓存 (Cache-Control: max-age=31536000) – 禁用代理缓冲 (proxy_buffering off)
    – 开启 Gzip / Brotli 压缩 – 超时时间延长至 300s (proxy_read_timeout)

    生产级 Ingress-Nginx YAML 配置实现

    为了在同一个 Ingress 资源中同时支持“静态资源高吞吐缓存”与“AI 流式响应零缓冲实时推送”,我们利用 Ingress-Nginx 的高级注解(Annotations)进行精细化配置:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: ai-unified-ingress
    namespace: ai-production
    annotations:
    kubernetes.io/ingress.class: "nginx"
    # SSL 与安全协议配置
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    # 核心流式调优:彻底关闭 Nginx 代理缓冲,确保 SSE Token 秒级直达前端
    nginx.ingress.kubernetes.io/proxy-buffering: "off"
    # 延长长连接读取超时时间至 5 分钟,防止大模型长思考时连接被 Nginx 中断
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
    # 启用分块传输编码支持
    nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
    nginx.ingress.kubernetes.io/configuration-snippet: |
    # 针对 API 路由禁用客户端缓存与代理缓存
    proxy_set_header Connection '';
    chunked_transfer_encoding on;
    spec:
    tls:
    – hosts:
    – ai.company.internal
    secretName: ai-tls-cert
    rules:
    – host: ai.company.internal
    http:
    paths:
    # 路由 1:AI 流式 API 接口转发
    – path: /api/v1/ai
    pathType: Prefix
    backend:
    service:
    name: ai-inference-service
    port:
    number: 8000
    # 路由 2:前端静态资源托管服务
    – path: /
    pathType: Prefix
    backend:
    service:
    name: frontend-spa-service
    port:
    number: 80

    前端 Nginx 静态服务容器配置(SPA 路由兜底)

    在前端容器内部的 nginx.conf 中,配置标准的前端 SPA History 路由回退与静态资源长期缓存:

    server {
    listen 80;
    server_name localhost;
    root /usr/share/nginx/html;
    index index.html;

    # 静态资源强缓存(带有构建 Hash 的 JS/CSS/图片)
    location ~* \\.(js|css|png|jpg|jpeg|gif|svg|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, max-age=31536000, immutable";
    access_log off;
    }

    # index.html 永不缓存,确保版本发布秒级生效
    location = /index.html {
    expires -1;
    add_header Cache-Control "no-store, no-cache, must-revalidate";
    }

    # SPA 前端路由兜底重定向
    location / {
    try_files $uri $uri/ /index.html;
    }
    }

    统一网关带来的核心工程收益

  • 彻底消灭跨域预检(OPTIONS)延迟:由于前端页面与 API 位于同域同端口,浏览器直接发送 POST 请求,节省 1 次网络 RTT,首字吐出延迟(TTFT)直接减少 80ms。
  • 彻底解决 SSE 流式卡顿:通过注解 nginx.ingress.kubernetes.io/proxy-buffering: "off",大模型吐出的每一个 Token 在生成的瞬间直接由 TCP 套接字推送至浏览器,打字机动效极其流畅。
  • 同域 HttpOnly Cookie 绝对安全鉴权:登录态 Cookie 自动随同域请求携带,无需在前端 JavaScript 中手动管理与组装 Bearer Token,从根源上杜绝了 XSS 窃取 Token 的安全风险。
  • 赞(0)
    未经允许不得转载:171主机测评 » K8s Ingress 路由下的前端静态资源与 AI 流式 API 统一网关
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址