ASM vous permet d'accéder à des services LLM externes via une passerelle de sortie. Cette approche convient principalement aux scénarios où l'application cliente réside dans un cluster. Cette rubrique explique comment utiliser une passerelle de sortie pour accéder à un service externe depuis une application exécutée dans un cluster doté d'un sidecar injecté.
Prérequis
Un cluster ACK est ajouté à une instance ASM de version 1.22 ou ultérieure.
Une politique d'injection de sidecar est configurée.
Une passerelle d'entrée est créée.
L'application exemple sleep est déployée. Pour plus d'informations, consultez Créer l'application de test sleep.
Vous avez activé Alibaba Cloud Model Studio et obtenu une clé API valide. Pour plus d'informations, consultez Obtenir une clé API.
Vue d'ensemble
Sans passerelle de sortie, le proxy sidecar intercepte les requêtes clientes avant de les transmettre au fournisseur LLM. Le sidecar et le client étant déployés dans le même Pod, cette méthode expose à plusieurs risques de sécurité, tels que la fuite de clés API et l'accès non autorisé. Si ces risques vous préoccupent, nous vous recommandons vivement d'utiliser une passerelle de sortie pour acheminer les requêtes.
L'utilisation d'une passerelle de sortie ASM améliore la sécurité. Déployée indépendamment du client, la passerelle de sortie vous permet d'utiliser le contrôle d'accès basé sur les rôles (RBAC) de votre cluster ACK pour restreindre sa gestion, renforçant ainsi sa sécurité globale. La passerelle de sortie gère toutes les opérations de sécurité, notamment l'ajout dynamique d'une clé API et l'application des politiques d'authentification et d'autorisation. Cette conception vous permet d'exploiter l'ensemble des fonctionnalités de sécurité des passerelles ASM.
Le diagramme suivant illustre le chemin de requête utilisé dans cette rubrique :
Étape 1 : Créer une passerelle de sortie et une ressource Gateway
Créez une passerelle de sortie, exposez le port 80 et activez Support two-way TLS authentication. Pour plus de détails, consultez Créer une passerelle de sortie.
-
Créez un fichier nommé
egress-gw.yamlavec le contenu suivant.apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: egress-gw namespace: istio-system spec: selector: istio: egressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTPS tls: mode: ISTIO_MUTUAL -
Utilisez le fichier kubeconfig de votre instance ASM pour exécuter la commande suivante et créer la ressource Gateway.
kubectl apply -f egress-gw.yaml
Étape 2 : Créer un LLMProvider pour la passerelle de sortie
En appliquant le LLMProvider uniquement à la passerelle de sortie, vous garantissez que la clé API est stockée exclusivement dans la mémoire de la passerelle, la rendant ainsi inaccessible au client.
-
Créez un fichier nommé
dashscope-qwen.yamlavec le contenu suivant.apiVersion: istio.alibabacloud.com/v1beta1 kind: LLMProvider metadata: name: dashscope-qwen namespace: istio-system spec: workloadSelector: labels: istio: egressgateway host: dashscope.aliyuncs.com path: /compatible-mode/v1/chat/completions configs: defaultConfig: openAIConfig: model: qwen1.5-72b-chat # The Qwen series of open-source large models stream: false apiKey: ${API_KEY} -
Exécutez la commande suivante pour créer le LLMProvider.
kubectl apply -f dashscope-qwen.yaml
Étape 3 : Créer un LLMRoute
-
Créez un fichier nommé
dashscope-route.yamlavec le contenu suivant pour acheminer le trafic vers la passerelle de sortie.apiVersion: istio.alibabacloud.com/v1beta1 kind: LLMRoute metadata: name: dashscope-route spec: host: dashscope.aliyuncs.com gateways: - mesh - istio-system/egress-gw rules: - name: mesh-route # When the sidecar receives a request for dashscope.aliyuncs.com, it forwards the request to the egress gateway. matches: - gateways: - mesh backendRefs: - providerHost: istio-egressgateway.istio-system.svc.cluster.local - name: egress-gw-route # When the egress gateway receives a request for dashscope.aliyuncs.com, it forwards the request to the actual provider. matches: - gateways: - istio-system/egress-gw 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
Utilisez le fichier kubeconfig de votre cluster ACK pour exécuter la commande suivante et tester la configuration.
kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
--header 'Content-Type: application/json' \
--data '{
"messages": [
{"role": "user", "content": "Introduce yourself"}
]
}'
Résultat attendu :
{"choices":[{"message":{"role":"assistant","content":"Hello! I am Qwen, a pre-trained language model developed by Alibaba Cloud. My purpose is to assist users in generating various types of text, such as articles, stories, poems, and answering questions by leveraging my extensive knowledge and understanding of context. Although I'm an AI, I don't have a physical body or personal experiences like human beings do, but I've been trained on a vast corpus of text data, which allows me to engage in conversations, provide information, or help with various tasks to the best of my abilities. So, feel free to ask me anything, and I'll do my best to provide helpful and informative responses!"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":12,"completion_tokens":130,"total_tokens":142},"created":1720680044,"system_fingerprint":null,"model":"qwen1.5-72b-chat","id":"chatcmpl-3608dcd5-e3ad-9ade-bc70-xxxxxxxxxxxxxx"}
Étape 5 : Configurer une politique d'autorisation
-
Créez un fichier nommé
authpolicy.yamlavec le contenu suivant.apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: test namespace: istio-system spec: action: DENY rules: - from: - source: principals: - cluster.local/ns/default/sa/sleep to: - operation: hosts: - dashscope.aliyuncs.com selector: matchLabels: istio: egressgateway -
Utilisez le fichier kubeconfig de votre instance ASM pour exécuter la commande suivante et appliquer la politique d'autorisation.
kubectl apply -f authpolicy.yaml -
Exécutez à nouveau la commande de Étape 4 pour tester la politique.
Résultat attendu :
RBAC: access deniedLe résultat indique que la requête est refusée.
Les capacités de sécurité qu'une passerelle ASM offre pour les requêtes HTTP standard s'appliquent également aux requêtes LLM. Ces capacités incluent une gamme complète de politiques d'autorisation, l'authentification JWT et des services d'autorisation personnalisés. En appliquant ces politiques au niveau de la passerelle de sortie, vous pouvez sécuriser vos applications plus efficacement.