O ASM permite acessar serviços externos de LLM por meio de um egress gateway. Essa abordagem é indicada principalmente para cenários em que a aplicação cliente está localizada dentro de um cluster. Este tópico mostra como usar um egress gateway para acessar um serviço externo a partir de uma aplicação em execução dentro de um cluster com sidecar injetado.
Pré-requisitos
Um cluster ACK adicionado a uma instância do ASM da versão 1.22 ou posterior.
Uma política de injeção de sidecar configurada.
Um ingress gateway criado.
A aplicação de exemplo sleep implantada. Para mais informações, consulte Crie a aplicação de teste sleep.
Alibaba Cloud Model Studio ativado e uma chave de API válida obtida. Para mais informações, consulte Obter uma chave de API.
Visão geral
Sem um egress gateway, o sidecar proxy intercepta as requisições do cliente e as envia ao provedor de LLM. Como o sidecar e o cliente residem no mesmo Pod, esse método apresenta vários riscos de segurança, como vazamento de chaves de API e acesso não autorizado. Caso esses riscos sejam uma preocupação, recomendamos fortemente o uso de um egress gateway para rotear as requisições.
O uso de um egress gateway do ASM aumenta a segurança. Como o egress gateway é implantado independentemente do cliente, é possível usar o mecanismo de Controle de Acesso Baseado em Função (RBAC) do cluster ACK para restringir quem pode gerenciá-lo, melhorando a segurança geral do gateway. O egress gateway lida com todas as operações de segurança, como adicionar dinamicamente uma chave de API e aplicar políticas de autenticação e autorização. Esse design permite utilizar todo o conjunto de recursos de segurança do gateway do ASM.
O diagrama a seguir mostra o caminho da requisição utilizado neste tópico:
Etapa 1: Crie um egress gateway e um recurso Gateway
Crie um egress gateway, exponha a porta 80 e ative a opção Support two-way TLS authentication. Para obter detalhes, consulte Crie um Egress Gateway.
-
Crie um arquivo chamado
egress-gw.yamlcom o seguinte conteúdo.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 -
Use o arquivo kubeconfig da sua instância do ASM para executar o comando a seguir e crie o recurso Gateway.
kubectl apply -f egress-gw.yaml
Etapa 2: Crie um LLMProvider para o egress gateway
Aplicar o LLMProvider apenas ao egress gateway garante que a chave de API seja armazenada exclusivamente na memória do gateway, tornando-a inacessível ao cliente.
-
Crie um arquivo chamado
dashscope-qwen.yamlcom o seguinte conteúdo.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} -
Execute o comando a seguir para crie o LLMProvider.
kubectl apply -f dashscope-qwen.yaml
Etapa 3: Crie um LLMRoute
-
Crie um arquivo chamado
dashscope-route.yamlcom o seguinte conteúdo para rotear o tráfego para o egress gateway.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 -
Execute o comando a seguir para crie o LLMRoute.
kubectl apply -f dashscope-route.yaml
Etapa 4: Testar a configuração
Use o arquivo kubeconfig do seu cluster ACK para execute o comando a seguir e testar a configuração.
kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
--header 'Content-Type: application/json' \
--data '{
"messages": [
{"role": "user", "content": "Introduce yourself"}
]
}'
Saída esperada:
{"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"}
Etapa 5: Configure uma política de autorização
-
Crie um arquivo chamado
authpolicy.yamlcom o seguinte conteúdo.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 -
Use o arquivo kubeconfig da sua instância do ASM para execute o comando a seguir e aplicar a política de autorização.
kubectl apply -f authpolicy.yaml -
Execute novamente o comando da Etapa 4 para testar a política.
Saída esperada:
RBAC: access deniedA saída indica que a requisição foi negada.
Os recursos de segurança que um gateway do ASM fornece para requisições HTTP padrão também se aplicam a requisições de LLM. Esses recursos incluem uma ampla gama de políticas de autorização, autenticação JWT e serviços de autorização personalizados. Ao aplicar essas políticas no egress gateway, você protege suas aplicações de forma mais eficaz.