Service Mesh (ASM) vous permet d'accéder à des services externes de grands modèles de langage (LLM) via une passerelle d'entrée. En acheminant les requêtes via une passerelle ASM, vous bénéficiez de fonctionnalités avancées telles que le fractionnement du trafic, l'observabilité des requêtes, ainsi qu'une authentification et une autorisation robustes. Cette rubrique explique comment un client externe au cluster peut accéder à un service LLM externe via une passerelle d'entrée ASM.
Vue d'ensemble
L'accès aux services LLM externes via une passerelle d'entrée est idéal lorsque des clients situés hors du cluster doivent s'y connecter. La passerelle ASM offre une large gamme de fonctionnalités de routage, de sécurité et d'observabilité, et prend en charge la gestion du trafic LLM. Elle vous permet d'intégrer rapidement et en toute sécurité des services LLM externes.
Le cheminement de la requête pour l'exemple présenté dans cette rubrique est le suivant :
Prérequis
Vous avez ajouté un cluster à une instance ASM. L'instance ASM doit être en version 1.22 ou ultérieure.
Vous avez créé une passerelle d'entrée et obtenu son adresse IP.
Vous avez activé Alibaba Cloud Model Studio et obtenu une clé API valide. Pour plus d'informations, consultez la rubrique Obtenir une clé API.
Étape 1 : Créer le LLMProvider
-
Créez un fichier nommé
LLMProvider.yamlavec le contenu suivant.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: qwen1.5-72b-chat # Qwen open-source series large language model stream: false apiKey: ${API_KEY} -
Pour créer le LLMProvider, exécutez la commande suivante en utilisant le fichier kubeconfig de votre cluster ASM.
kubectl apply -f LLMProvider.yaml
Étape 2 : Créer la règle de passerelle
-
Créez un fichier nommé
ingress-gw.yamlavec le contenu suivant.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 -
Exécutez la commande suivante pour créer la règle de passerelle.
kubectl apply -f ingress-gw.yaml
Étape 3 : Créer le LLMRoute
-
Créez un fichier nommé
dashscope-route.yamlavec le contenu suivant.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 # Routes requests for dashscope.aliyuncs.com. Otherwise, a 404 error is returned. - headers: host: exact: test.com # Routes requests for test.com. After the request is processed by the ASM LLM plugin, it re-triggers route matching, causing the request to match the rule above. backendRefs: - providerHost: dashscope.aliyuncs.com -
Exécutez la commande suivante pour créer le LLMRoute.
kubectl apply -f dashscope-route.yaml
Étape 4 : Tester la configuration
Exécutez la commande suivante dans votre terminal local pour tester la configuration.
curl --location '${INGRESS_GATEWAY_IP}:80' --header 'Content-Type: application/json' --header "host: test.com" --data '{
"messages": [
{"role": "user", "content": "Tell me about yourself"}
]
}'
Résultat attendu :
{"choices":[{"message":{"role":"assistant","content":"I am a Large Language Model from Alibaba Cloud, and my name is Qwen. My main function is to answer user questions, provide information, and engage in conversation. I can understand user queries and generate corresponding answers or suggestions based on natural language. I can also learn new knowledge and apply it to various scenarios. If you have any questions or need help, please feel free to let me know, and I will do my best to support you."},"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":"qwen1.5-72b-chat","id":"chatcmpl-3d117bd7-9bfb-9121-9fc2-xxxxxxxxxxxx"}
Ce résultat indique que la passerelle a correctement acheminé la requête.
Étape 5 : Utiliser les fonctionnalités de sécurité de la passerelle ASM
Cette étape montre comment créer une politique d'autorisation simple pour refuser l'accès au service LLM depuis votre adresse IP locale via la passerelle ASM.
-
Créez un fichier nommé
auth-policy.yamlavec le contenu suivant.apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: labels: gateway: ingressgateway name: auth-policy namespace: istio-system spec: action: DENY rules: - from: - source: ipBlocks: - ${YOUR_LOCAL_IP} to: - operation: hosts: - test.com selector: matchLabels: istio: ingressgateway -
Exécutez la commande suivante pour déployer la politique d'autorisation.
kubectl apply -f auth-policy.yaml -
Exécutez à nouveau la commande de test de l'étape 4. Le résultat suivant doit s'afficher :
RBAC: access denied
Les fonctionnalités de sécurité disponibles pour les requêtes HTTP standard sur la passerelle ASM, telles que les politiques d'autorisation complètes, l'authentification JWT et les services d'autorisation externes personnalisés, s'appliquent également aux requêtes LLM. En appliquant ces politiques à la passerelle d'entrée, vous renforcez la sécurité de vos applications.