ASM支持通过入口网关访问外部LLM服务。在请求链路中引入ASM网关之后,您可以使用ASM网关提供的诸多能力,比如流量按比例分流、请求可观测以及丰富的认证、授权能力。本文主要介绍集群外客户端如何通过ASM入口网关访问外部LLM服务。
功能概述
通过入口网关访问外部LLM服务主要适用于集群外客户端访问LLM服务的场景,ASM网关提供了诸多的路由、安全以及可观测的能力,并且支持LLM流量管理。通过ASM网关,您可以快速、安全地对接外部LLM服务。
本文示例的请求链路如下所示:
前提条件
已添加集群到ASM实例,且ASM实例版本为1.22及以上。
已创建入口网关,并获取了网关IP。
已经开通模型服务灵积,并且获取了可用的API_KEY。具体操作,请参见API-KEY的获取与配置。
步骤一:创建LLMProvider
使用以下内容,创建如下LLMProvider.yaml。
apiVersion: istio.alibabacloud.com/v1beta1 kind: LLMProvider metadata: name: dashscope-qwen namespace: istio-system spec: workloadSelector: labels: istio: ingressgateway host: dashscope.aliyuncs.com path: /compatible-mode/v1/chat/completions configs: defaultConfig: openAIConfig: model: qwen-1.8b-chat # 千问开源系列大模型 stream: false apiKey: ${API_KEY}
使用ASM集群kubeconfig,执行以下命令,创建LLMProvider。
kubectl apply -f LLMProvider.yaml
步骤二:创建网关规则
使用以下内容,创建如下网关规则ingress-gw.yaml。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: ingress-gw namespace: istio-system spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP
执行以下命令,创建网关规则。
kubectl apply -f ingress-gw.yaml
步骤三:创建LLMRoute
使用以下内容,创建dashscope-route.yaml。
apiVersion: istio.alibabacloud.com/v1beta1 kind: LLMRoute metadata: name: dashscope-route spec: host: "*" gateways: - istio-system/ingress-gw rules: - name: ingress-route matches: - headers: host: exact: dashscope.aliyuncs.com # 处理dashscope.aliyuncs.com的路由,否则会返回404。 - headers: host: exact: test.com # 处理test.com的请求。请求被ASM LLM插件处理后,会重新触发路由匹配,进入上面的匹配条件。 backendRefs: - providerHost: dashscope.aliyuncs.com
执行以下命令,创建LLMRoute。
kubectl apply -f dashscope-route.yaml
步骤四:测试
在本地终端执行以下命令进行测试。
curl --location '${ASM网关IP}:80' \
--header 'Content-Type: application/json' \
--header "host: test.com" \
--data '{
"messages": [
{"role": "user", "content": "请介绍你自己"}
]
}'
预期输出:
{"choices":[{"message":{"role":"assistant","content":"我是来自阿里云的大规模语言模型,我叫通义千问。我的主要功能是回答用户的问题、提供信息和进行对话交流。我可以理解用户的提问,并基于自然语言生成相应的答案或建议。我也可以学习新的知识,并将其应用于各种场景中。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":3,"completion_tokens":72,"total_tokens":75},"created":1720682745,"system_fingerprint":null,"model":"qwen-1.8b-chat","id":"chatcmpl-3d117bd7-9bfb-9121-9fc2-xxxxxxxxxxxx"}
可以看到请求链路已经打通。
步骤五:使用ASM网关安全能力
本步骤将创建一个简单的授权策略,拒绝本机IP通过ASM网关访问LLM服务。
使用以下内容创建auth-policy.yaml。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: labels: gateway: ingressgateway name: auth-policy namespace: istio-system spec: action: DENY rules: - from: - source: ipBlocks: - ${本机IP} to: - operation: hosts: - test.com selector: matchLabels: istio: ingressgateway
执行以下命令,部署授权策略。
kubectl apply -f auth-policy.yaml
再次执行步骤四中的测试命令进行测试,可以看到如下结果:
RBAC: access denied
说明
ASM网关针对普通HTTP请求所具备的安全能力同样适用于LLM请求,包括完整的授权策略、JWT认证和自定义授权服务等。通过在出口网关上应用这些策略,可以更有效地保障您的应用安全。
文档内容是否对您有帮助?