使用Gateway with Inference Extension路由外部MaaS服务

当 ACK 集群对接外部 MaaS 服务(如百炼)时,为统一处理 API 密钥和请求路径,可基于AI推理网关(Gateway with Inference Extension),配置路由规则(HTTPRoute),实现请求凭证的自动注入及URL重写,从而快速集成模型服务。

工作原理

Gateway with Inference Extension是基于Kubernetes Gateway API的增强,可构建从客户端到外部MaaS(Model as a Service)服务的路由链路。以访问百炼为例,核心处理流程如下:

  1. 接收请求:客户端的请求首先到达网关(Gateway)。

  2. 路由与过滤:Gateway 根据 HTTPRoute 路由规则进行匹配。匹配成功后,请求将按顺序经过 HTTPRoute 中定义的过滤器链(Filter Chain)进行处理:

    • 凭证注入 (ExtensionRef):从预先创建的 Kubernetes Secret 中获取API Key,并自动注入到请求头的 Authorization 字段中,实现认证凭证的统一管理和自动注入。

    • 路径重写 (URLRewrite):对请求路径进行重写(例如,将 /v1 重写为 /compatible-mode/v1),以适配百炼服务要求的API格式。

  3. 后端请求:经过过滤器链处理后的请求,被发送至 HTTPRoute 中引用的 Backend 资源。

  4. 转发请求:Backend资源将请求转发到定义好的外部大模型服务平台百炼。

image

步骤一:开启组件功能

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理

  3. 组件管理页面,搜索Gateway with Inference Extension,在组件卡片中单击安装,在弹出的对话框中,勾选启用Gateway API推理扩展,按提示完成安装操作。请确保组件版本在1.4.0以上。

  4. 组件管理页面,搜索Gateway API,在组件卡片中单击配置,在弹出的对话框中,勾选启用实验性通道功能,并单击确认

步骤二:获取API Key并创建Secret

为使网关能够访问百炼服务,需将API Key存储在集群的保密字典(Secret)中,供后续网关路由配置引用。

  1. 获取百炼API Key

  2. <YOUR_BAILIAN_API_KEY>替换成实际的百炼API Key。

    export TOKEN=<YOUR_BAILIAN_API_KEY>
  3. 创建Secret,存入百炼API Key。

    kubectl create secret generic bailian-credential --from-literal=credential="Bearer $TOKEN"

步骤三:创建后端服务

  • Backend:声明并向网关注册外部百炼服务dashscope.aliyuncs.com

  • BackendTLSPolicy:指定网关需以HTTPS协议与百炼服务进行通信。

  1. 将以下YAML内容保存为maas-policy.yaml文件。

    apiVersion: gateway.envoyproxy.io/v1alpha1
    kind: Backend
    metadata:
      name: bailian
    spec:
      endpoints:
        - fqdn:
            # 百炼服务的域名和端口
            hostname: dashscope.aliyuncs.com
            port: 443
    ---
    apiVersion: gateway.networking.k8s.io/v1alpha3
    kind: BackendTLSPolicy
    metadata:
      name: enable-backend-tls
    spec:
      # 将策略应用到名为bailian的后端
      targetRefs:
      - group: gateway.envoyproxy.io
        kind: Backend
        name: bailian
      validation:
        hostname: dashscope.aliyuncs.com
        wellKnownCACertificates: System
  2. 创建后端资源。

    kubectl apply -f maas-policy.yaml

步骤四:创建网关并配置路由规则

  • Gateway:声明一个监听HTTP协议、8080端口的网关。

  • HTTPRoute:指定网关上的路由规则,转发到百炼服务dashscope.aliyuncs.com时,将请求中以/v1开头的路径的请求重写为/compatible-mode/v1,以实现与百炼API的兼容。

  • HTTPRouteFilter:定义请求百炼时凭证注入逻辑。凭据默认将被注入到 Authorization标头中。如请求中已存在Authorization标头或指定的标头,只有将overwrite设置为true,凭据才会被注入。

将以下YAML内容保存为gateway-route.yaml文件,然后执行kubectl apply -f gateway-route.yaml命令。

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: bailian-gateway
spec:
  gatewayClassName: ack-gateway
  listeners:
  - name: http-bailian
    protocol: HTTP
    port: 8080
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: HTTPRouteFilter
metadata:
  name: credential-injection
spec:
  credentialInjection:
    overwrite: true
    # 引用步骤二中创建的Secret
    credential:
      valueRef:
        name: bailian-credential
---   
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: bailian-route
spec:
  # 绑定到bailian-gateway
  parentRefs:
    - name: bailian-gateway
  rules:
    - backendRefs:
        - group: gateway.envoyproxy.io
          kind: Backend
          name: bailian
      filters:
        # 过滤器执行顺序:先重写,后注入凭证
        - type: URLRewrite
          urlRewrite:
            hostname: dashscope.aliyuncs.com
            path:
              type: ReplacePrefixMatch
              replacePrefixMatch: /compatible-mode/v1
        - type: ExtensionRef
          extensionRef:
            group: gateway.envoyproxy.io
            kind: HTTPRouteFilter
            name: credential-injection
      matches:
        # 匹配所有以/v1开头的请求
        - path:
            type: PathPrefix
            value: /v1

步骤五:验证路由配置

  1. 获取网关地址。

    export GATEWAY_HOST=$(kubectl get gateway/bailian-gateway -o jsonpath='{.status.addresses[0].value}')
  2. 发起测试请求。

    curl http://$GATEWAY_HOST:8080/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "qwen3-32b",
        "messages": [
          {"role": "user", "content": "你好,这是一个测试"}
        ],
        "enable_thinking": false
      }' -v

    预期输出:

    {
        "choices": [
            {
                "message": {
                    "content": "你好!这是一个测试,对吧?有什么我可以帮忙的吗?",
                    "reasoning_content": "",
                    "role": "assistant"
                },
                "finish_reason": "stop",
                "index": 0,
                "logprobs": null
            }
        ],
        "object": "chat.completion",
        "usage": {
            "prompt_tokens": 16,
            "completion_tokens": 15,
            "total_tokens": 31
        },
        "created": 1758263453,
        "system_fingerprint": null,
        "model": "qwen3-32b",
        "id": "chatcmpl-bb0d1343-cff5-41ae-a229-1e1f5ffc73eb"
    }

计费说明

百炼模型推理费用,请参见计费说明

相关文档