Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Acesse um serviço de LLM a partir de um cluster usando um egress gateway do ASM

Última atualização: Jun 28, 2026

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

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:

image

Etapa 1: Crie um egress gateway e um recurso Gateway

  1. 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.

  2. Crie um arquivo chamado egress-gw.yaml com 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
  3. 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.

  1. Crie um arquivo chamado dashscope-qwen.yaml com 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}
  2. Execute o comando a seguir para crie o LLMProvider.

    kubectl apply -f dashscope-qwen.yaml

Etapa 3: Crie um LLMRoute

  1. Crie um arquivo chamado dashscope-route.yaml com 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
  2. 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

  1. Crie um arquivo chamado authpolicy.yaml com 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
  2. 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
  3. Execute novamente o comando da Etapa 4 para testar a política.

    Saída esperada:

    RBAC: access denied

    A saída indica que a requisição foi negada.

Nota

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.