O Service Mesh (ASM) permite acessar serviços externos de Large Language Model (LLM) por meio de um gateway de entrada. Ao rotear solicitações pelo gateway do ASM, você aproveita recursos avançados, como divisão de tráfego, observabilidade de requisições e mecanismos robustos de autenticação e autorização. Este tópico descreve como um cliente fora do cluster acessa um serviço externo de LLM usando um gateway de entrada do ASM.
Visão geral
Acessar serviços externos de LLM por um gateway de entrada é ideal quando clientes fora do cluster precisam se conectar a eles. O gateway do ASM oferece uma ampla variedade de recursos de roteamento, segurança e observabilidade, além de suportar o gerenciamento de tráfego de LLM. Com o gateway do ASM, você integra serviços externos de LLM com rapidez e segurança.
O rastreamento da solicitação no exemplo deste tópico é o seguinte:
Pré-requisitos
Você adicionou um cluster a uma instância do ASM. A instância do ASM deve estar na versão 1.22 ou posterior.
Você criou um gateway de entrada e obteve seu endereço IP.
Você ativou o Alibaba Cloud Model Studio e obteve uma chave de API válida. Para mais informações, consulte Obter uma chave de API.
Etapa 1: Crie o LLMProvider
-
Crie um arquivo chamado 'LLMProvider.yaml' com o seguinte conteúdo:
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} -
Para criar o LLMProvider, execute o comando abaixo usando o arquivo kubeconfig do seu cluster ASM:
kubectl apply -f LLMProvider.yaml
Etapa 2: Crie a regra do gateway
-
Crie um arquivo chamado 'ingress-gw.yaml' com o conteúdo a seguir:
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 -
Execute o comando a seguir para criar a regra do gateway:
kubectl apply -f ingress-gw.yaml
Etapa 3: Crie o LLMRoute
-
Crie um arquivo chamado 'dashscope-route.yaml' com o conteúdo abaixo:
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 -
Execute o comando a seguir para criar o LLMRoute:
kubectl apply -f dashscope-route.yaml
Etapa 4: Testar a configuração
Execute o comando abaixo no terminal local para validar a configuração:
curl --location '${INGRESS_GATEWAY_IP}:80' --header 'Content-Type: application/json' --header "host: test.com" --data '{
"messages": [
{"role": "user", "content": "Tell me about yourself"}
]
}'
Saída esperada:
{"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"}
Essa saída indica que o gateway roteou a solicitação com sucesso.
Etapa 5: Usar recursos de segurança do gateway do ASM
Esta etapa demonstra como criar uma política de autorização simples para negar acesso ao serviço de LLM a partir do seu endereço IP local pelo gateway do ASM.
-
Crie um arquivo chamado 'auth-policy.yaml' com o seguinte conteúdo:
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 -
Execute o comando abaixo para implantar a política de autorização:
kubectl apply -f auth-policy.yaml -
Execute novamente o comando de teste da Etapa 4. O resultado esperado é:
RBAC: access denied
Os recursos de segurança disponíveis para solicitações HTTP padrão no gateway do ASM, como políticas abrangentes de autorização, autenticação JWT e serviços personalizados de autorização externa, também se aplicam a solicitações de LLM. Aplicar essas políticas no gateway de entrada protege suas aplicações de forma mais eficaz.