Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Access external services from an ASM instance

Última atualização: Jun 28, 2026

Por padrão, o proxy sidecar redireciona todo o tráfego de saída dos pods em uma instância do Service Mesh (ASM). Para permitir que os pods acessem serviços fora do mesh — como APIs de terceiros, bancos de dados ou endpoints SaaS —, configure o tratamento de requisições para destinos não registrados.

O ASM oferece três abordagens com diferentes compensações entre esforço de configuração, visibilidade e controle de tráfego:

Abordagem

Visibilidade do tráfego

Controle do tráfego

Esforço de configuração

Mais indicado para

Política de tráfego de saída (ALLOW_ANY)

Nenhuma

Nenhum

Baixo

Testes iniciais e avaliação

ServiceEntry (recomendado)

Completa

Completo (roteamento, novas tentativas, timeouts, injeção de falhas)

Médio

Cargas de trabalho em produção

Interceptação baseada em CIDR

Nenhuma para o tráfego ignorado

Nenhum para o tráfego ignorado

Baixo

Cargas de trabalho sensíveis a desempenho que não toleram sobrecarga do proxy

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma instância do ASM com injeção de proxy sidecar ativada

  • Um pod com proxy sidecar injetado disponível para testar o acesso externo

  • Permissões para modificar configurações da instância do ASM no console do ASM

Para configurar um pod de teste, implante uma carga de trabalho de exemplo e exporte o nome do pod:

export SOURCE_POD=$(kubectl get pod -l <app-label> -o jsonpath='{.items..metadata.name}')

Substitua <app-label> pelo seletor de rótulo da sua carga de trabalho de teste. Execute todos os comandos curl subsequentes dentro deste pod:

kubectl exec "$SOURCE_POD" -c <container-name> -- curl -I http://www.aliyun.com/

Defina a política de tráfego de saída

A configuração Outbound Traffic Policy determina como o proxy sidecar lida com o tráfego destinado a locais não registrados no mesh.

  • ALLOW_ANY: O proxy encaminha todo o tráfego de saída. Os pods conseguem alcançar qualquer serviço externo, mas o Istio não monitora nem controla esse tráfego.

  • REGISTRY_ONLY: O proxy bloqueia o tráfego para qualquer destino não registrado no registro de serviços do mesh.

Importante

Quando a política de tráfego de saída está definida como ALLOW_ANY e nenhum ServiceEntry está configurado, o proxy sidecar permite tráfego TCP para qualquer endereço IP e porta. Essa configuração não possui controle de fluxo explícito e pode causar comportamentos inesperados quando vários serviços escutam na mesma porta. Não utilize este modo para serviços externos como bancos de dados. Em vez disso, defina recursos ServiceEntry para controlar explicitamente os destinos do tráfego.

Defina a política como ALLOW_ANY

  1. Faça login no console do ASM.

  2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  3. Na página Mesh Management, localize a instância do ASM desejada. Clique em no nome da instância ou em Manage na coluna Actions.

  4. No painel de navegação à esquerda, escolha Dataplane Component Management > Sidecar Proxy Setting.

  5. Na aba global, clique em Outbound Traffic Policy, defina o valor como ALLOW_ANY e clique em Update Settings.

Verifique o acesso externo

Em um pod com proxy sidecar injetado, teste o acesso HTTP e HTTPS:

Requisição HTTP:

curl -I http://www.aliyun.com/

Saída esperada:

HTTP/1.1 301 Moved Permanently
server: envoy
date: Mon, 07 Sep 2020 09:28:54 GMT
content-type: text/html
content-length: 239
location: https://www.aliyun.com/
x-envoy-upstream-service-time: 67

Requisição HTTPS:

curl -I https://www.aliyun.com/

Saída esperada:

HTTP/2 200
server: Tengine
content-type: text/html; charset=utf-8
strict-transport-security: max-age=31536000

O cabeçalho server: envoy na resposta HTTP confirma que o tráfego passou pelo proxy sidecar.

Crie um ServiceEntry

Se a política de tráfego de saída estiver configurada como REGISTRY_ONLY, o proxy sidecar bloqueia requisições para serviços externos não registrados no mesh. Por exemplo:

Requisição HTTP bloqueada (retorna 502):

curl -I http://www.aliyun.com/
HTTP/1.1 502 Bad Gateway
server: envoy

Requisição HTTPS bloqueada (conexão recusada):

curl -I https://www.aliyun.com/
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to www.aliyun.com:443

Para permitir o acesso a um serviço externo específico mantendo o modo REGISTRY_ONLY, crie um ServiceEntry para registrar esse serviço no mesh. Um ServiceEntry registrado habilita o gerenciamento completo de tráfego do Istio — regras de roteamento, timeouts, novas tentativas e injeção de falhas — para o tráfego externo.

Etapa 1: Crie o ServiceEntry

  1. Faça login no console do ASM.

  2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  3. Na página Mesh Management, localize a instância do ASM desejada. Clique em no nome da instância ou em Manage na coluna Actions.

  4. No painel de navegação à esquerda, escolha Cluster & Workload Management > External Service(ServiceEntry).

  5. Clique em Create from YAML.

  6. Selecione um namespace, cole o YAML a seguir e clique em Create.

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: aliyun-com-ext
spec:
  hosts:
  - 'www.aliyun.com'
  ports:
  - number: 80
    name: http
    protocol: HTTP
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS
  location: MESH_EXTERNAL

Defina o campo hosts com o hostname do serviço externo alvo. Este exemplo registra www.aliyun.com nas portas 80 (HTTP) e 443 (HTTPS).

Etapa 2: Verifique o acesso externo

Teste o acesso novamente em um pod com proxy sidecar injetado:

Requisição HTTP:

curl -I http://www.aliyun.com/

Saída esperada:

HTTP/1.1 301 Moved Permanently
server: envoy
date: Mon, 07 Sep 2020 09:49:17 GMT
content-type: text/html
content-length: 239
location: https://www.aliyun.com/
x-envoy-upstream-service-time: 66

Requisição HTTPS:

curl -I https://www.aliyun.com/

Saída esperada:

HTTP/2 200
server: Tengine
content-type: text/html; charset=utf-8
strict-transport-security: max-age=31536000

Uma resposta bem-sucedida confirma o funcionamento do ServiceEntry.

Etapa 3: Aplique regras de gerenciamento de tráfego (opcional)

Após registrar um serviço externo com um ServiceEntry, aplique regras de gerenciamento de tráfego do Istio. O exemplo a seguir cria um VirtualService que adiciona um atraso de 5 segundos a cada requisição para www.aliyun.com. Isso é útil para testar a resiliência da sua carga de trabalho contra dependências externas lentas.

  1. No painel de navegação à esquerda, escolha Traffic Management Center > VirtualService.

  2. Clique em Create from YAML.

  3. Selecione um namespace, cole o YAML a seguir e clique em Create.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: aliyun-com-ext
spec:
  hosts:
    - 'www.aliyun.com'
  http:
  - fault:
      delay:
        percent: 100
        fixedDelay: 5s
    route:
      - destination:
          host: www.aliyun.com
        weight: 100

Etapa 4: Verifique a regra de tráfego

Confirme a aplicação do atraso de 5 segundos:

time curl -o /dev/null -s -w "%{http_code}\n" http://www.aliyun.com/

Saída esperada:

301
real  0m 5.07s
user  0m 0.00s
sys 0m 0.00s

O tempo real de aproximadamente 5 segundos confirma que a regra de injeção de falhas do VirtualService está em vigor.

Configure a interceptação baseada em CIDR

Por padrão, o proxy sidecar intercepta o tráfego para todos os endereços IP. Restrinja o escopo de interceptação a blocos CIDR específicos para que o tráfego destinado a outros locais ignore completamente o proxy sidecar.

Um padrão comum é definir o escopo de interceptação como o bloco CIDR de serviço dos clusters Kubernetes no plano de dados. O tráfego para serviços internos do cluster passa pelo proxy sidecar para garantir observabilidade e controle, enquanto o tráfego para serviços externos o ignora para reduzir a latência.

Nota

Diferentemente das outras duas abordagens, o bypass baseado em CIDR desativa completamente os recursos do Istio (observabilidade, gerenciamento de tráfego, políticas de segurança) para o tráfego ignorado. Utilize esta abordagem apenas quando a sobrecarga do proxy for inaceitável para destinos externos específicos.

Procedimento

  1. Faça login no console do ASM.

  2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  3. Na página Mesh Management, localize a instância do ASM desejada. Clique em no nome da instância ou em Manage na coluna Actions.

  4. No painel de navegação à esquerda, escolha Dataplane Component Management > Sidecar Proxy Setting.

  5. Na aba global, clique em Enable/Disable Sidecar Proxy by Ports or IP Addresses.

  6. No campo Addresses to Which External Access Is Redirected to Sidecar Proxy, insira o bloco CIDR a ser interceptado e clique em Update Settings.

Nota

O valor padrão é *, que intercepta todo o tráfego. Insira um bloco CIDR conforme suas necessidades de negócio. Geralmente, insira o bloco CIDR de serviço dos clusters Kubernetes no plano de dados da instância do ASM.

Alternativamente, use o campo Addresses to Which External Access Is Not Redirected to Sidecar Proxy para especificar blocos CIDR que ignoram o proxy sidecar. Todo o restante do tráfego será interceptado.

Considerações de segurança

Ao configurar o acesso externo, observe os seguintes pontos:

  • **Prefira REGISTRY_ONLY com recursos ServiceEntry em produção.** Essa abordagem garante que apenas serviços externos explicitamente registrados sejam acessíveis, reduzindo o risco de exfiltração não intencional de dados.

  • **Evite ALLOW_ANY para acesso a bancos de dados.** Sem definições explícitas de ServiceEntry, o tráfego para bancos de dados carece de controle de fluxo e pode causar comportamentos inesperados quando múltiplos serviços escutam na mesma porta.

Próximos passos

  • Para visualizar os serviços registrados no mesh, acesse ASM Instance > Instances Status no console do ASM.

  • Para saber mais sobre a configuração do ServiceEntry do Istio, consulte a referência do ServiceEntry do Istio.