本文以对接百炼为例,演示如何通过Gateway with Inference Extension路由至外部MaaS服务,在路由到指定MaaS服务时、自动添加请求API Key并修改请求路径。
前提条件
- 已安装1.4.0及以上版本的Gateway with Inference Extension并勾选启用Gateway API推理扩展。操作入口,请参见安装组件。
- 已开通百炼。并获取了可用的API_KEY。具体操作,请参见获取API Key。
操作步骤
步骤一:在集群中创建包含API Key的Secret
执行以下指令,在集群中部署包含百炼API Key的Secret,用于网关路由请求时添加API Key验证信息。
TOKEN=<百炼 API Key> kubectl create secret generic jwt-credential --from-literal=credential=" Bearer $TOKEN"
步骤二:创建用于自动添加请求API Key的HTTPRouteFilter资源
HTTPRouteFilter用于指定向请求中自动注入请求验证凭据的过程。默认情况下,凭据将被注入到 Authorization 头部中。您也可以通过在 HTTPRouteFilter 的 credentialInjection 部分指定头部字段,将凭据注入到其他头部。
如果请求中已经存在 Authorization 头部或指定的头部,则除非您将 overwrite 设置为 true,否则凭据不会被注入。
执行以下指令,创建HTTPRouteFilter资源。
kubectl apply -f- <<EOF apiVersion: gateway.envoyproxy.io/v1alpha1 kind: HTTPRouteFilter metadata: name: credential-injection spec: credentialInjection: overwrite: true credential: valueRef: name: bailian-credential EOF
步骤三:创建外部MaaS服务后端声明
Backend资源向网关注册了外部后端服务dashscope.aliyuncs.com
,BackendTLSPolicy 指定网关需要以https和百炼服务进行通信。
执行以下指令,创建Backend和BackendTLSPolicy资源。
kubectl apply -f- <<EOF 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: targetRefs: - group: gateway.envoyproxy.io kind: Backend name: bailian validation: hostname: dashscope.aliyuncs.com wellKnownCACertificates: System EOF
步骤四:创建网关和网关路由规则
Gateway资源声明了在集群中创建一个带有8080端口监听的网关,HTTPRoute指定了网关上的路由规则:在转发到百炼服务dashscope.aliyuncs.com
时,将请求中以/v1
开头的路径的请求重写为/compatible-mode/v1
开头的请求,以实现与百炼API的兼容。
执行以下指令,创建Gateway和HTTPRoute资源。
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.networking.k8s.io/v1 kind: HTTPRoute metadata: name: bailian-route spec: 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: - path: type: PathPrefix value: /v1
步骤五:验证网关路由
- 获取网关公网IP
export GATEWAY_HOST=$(kubectl get gateway/qwen-inference-gateway -o jsonpath='{.status.addresses[0].value}')
- 验证网关在8080端口正常将请求转发到百炼服务,并自动添加API Key。
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