Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Configure o escopo de descoberta de services para melhorar a eficiência do push de configuração da malha

Última atualização: Aug 28, 2026

Configure o escopo de descoberta de services se os pushes de configuração demorarem muito, o plano de controle do Alibaba Cloud Service Mesh (ASM) estiver sobrecarregado ou as configurações de recursos não forem precisas o suficiente. O ASM descobre e processa services apenas nos namespaces especificados, acelerando a sincronização de configurações.

Pré-requisitos

  • Instância do ASM versão 1.10.5.32 ou posterior. Para obter instruções, consulte Create an ASM instance.

  • kubectl configurado para acessar o cluster do Container Service for Kubernetes (ACK) no plano de dados. Todos os comandos neste tópico são executados nesse cluster.

  • Coleta de logs do plano de controle ativada para a instância do ASM. O exemplo deste tópico usa esse recurso para observar os pushes de configuração. Consulte Enable control-plane log collection and log-based alerting (legacy) se a instância do ASM for anterior à versão 1.17.2.35 ou Enable control-plane log collection and log-based alerting (new) se for versão 1.17.2.35 ou posterior.

  • (Opcional) Instância do ASM versão 1.20 ou posterior. Essa versão é necessária apenas para excluir pods com rótulos específicos do escopo de descoberta de services.

Como funciona o escopo de descoberta de services

Neste tópico, a configuração do proxy sidecar refere-se às informações de configuração da malha que um proxy sidecar recebe do plano de controle.

Por padrão, um proxy sidecar no plano de dados armazena informações sobre todos os services em cada namespace do cluster do plano de dados. Essas informações permanecem armazenadas mesmo que os workloads nesses namespaces não tenham a injeção automática de proxy sidecar ativada. O plano de controle do ASM também monitora services em todos os namespaces da malha. Portanto, qualquer alteração relacionada a services faz com que o plano de controle envie as configurações correspondentes para todos os proxies sidecar.

O escopo de descoberta de services usa seletores de rótulos baseados nos rótulos dos namespaces no cluster do plano de dados. Esses seletores garantem que o plano de controle do ASM descubra e processe services de aplicação apenas nos namespaces especificados. Assim, a configuração do proxy sidecar retém somente as informações de services dos namespaces selecionados. Alterações em services de namespaces não selecionados deixam de acionar pushes de configuração para os proxies sidecar.

Os seletores de rótulos do escopo de descoberta de services suportam dois tipos de regras:

  • Regra de correspondência exata de rótulo: especifique uma chave e um valor de rótulo. Um namespace será correspondido apenas se seu rótulo coincidir exatamente com a chave e o valor especificados.

  • Regra de correspondência por expressão de rótulo: especifique uma chave de rótulo, um operador de expressão e um conjunto de valores de rótulo para corresponder aos rótulos de namespace no plano de dados. Estão disponíveis os seguintes operadores:

    • In: o namespace no plano de dados deve ter a chave de rótulo especificada, e o valor dessa chave deve estar no conjunto de valores definido.

    • NotIn: o namespace no plano de dados deve ter a chave de rótulo especificada, e o valor dessa chave não deve estar no conjunto de valores definido.

    • Exists: o namespace no plano de dados deve ter a chave de rótulo especificada. Não são necessários valores de rótulo quando o operador é Exists.

    • DoesNotExist: o namespace no plano de dados não deve ter a chave de rótulo especificada. Não são necessários valores de rótulo quando o operador é DoesNotExist.

Configure o escopo de descoberta de services

Por padrão, o plano de controle do ASM descobre services em todos os namespaces do cluster do plano de dados. Defina o Mesh Discovery Mode como descoberta seletiva para limitar a descoberta aos namespaces correspondentes ao escopo de descoberta de services. Utilize apenas um dos dois métodos a seguir. Ambos definem o mesmo valor para Mesh Discovery Mode e diferem apenas na forma de especificar os namespaces a serem descobertos.

Antes de usar qualquer um dos métodos, abra a página de configuração:

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha Service Discovery Selectors.

Método 1: Selecione os namespaces a serem descobertos

Use este método para enumerar os namespaces a serem descobertos. Apenas os namespaces selecionados permanecem no escopo de descoberta de services. Portanto, atualize a seleção sempre que adicionar um namespace que o plano de controle precise descobrir.

  1. Na página Service Discovery Selectors, defina o Mesh Discovery Mode como Automatically Discover Services in the Selected Namespace of a Kubernetes Cluster on the Data Plane.

  2. Na aba Select Namespace, selecione o cluster de destino.

  3. Na lista de namespaces exibida, clique em unselect à direita de cada namespace que o plano de controle não deve descobrir.

  4. Na parte inferior da página, clique em OK. Na caixa de diálogo Confirm, clique em OK.

Método 2: Usar um seletor de rótulos

Utilize este método para corresponder namespaces por rótulo. Todo namespace cujos rótulos corresponderem ao seletor permanece no escopo de descoberta de services, incluindo namespaces criados posteriormente. Antes de configurar o seletor, certifique-se de que cada namespace a ser descoberto pelo plano de controle possua um rótulo correspondente. Namespaces sem um rótulo correspondente são excluídos do escopo.

  1. Na página Service Discovery Selectors, defina o Mesh Discovery Mode como Automatically Discover Services in the Selected Namespace of a Kubernetes Cluster on the Data Plane e clique em na aba Edit Label Selector.

  2. Especifique a regra de rótulo para correspondência dos namespaces. Por exemplo, defina a Key como asm-discovery e o Operator como Exists para corresponder a todos os namespaces que possuem o rótulo asm-discovery.

  3. Na parte inferior da página, clique em OK. Na caixa de diálogo Confirm, clique em OK.

Verifique se a instância do ASM aplicou a configuração

  1. No painel de navegação à esquerda, escolha Instance Information > Base Information.

  2. Na página Base Information, verifique o Status da malha.

    Se o Status for Running, a instância do ASM aceitou a configuração e está pronta novamente. Esse status confirma apenas a prontidão da instância. Para confirmar que o plano de controle deixou de processar services nos namespaces fora do escopo, verifique a configuração do proxy sidecar e os logs do plano de controle conforme mostrado em Example: Verify that the service discovery scope takes effect.

Exemplo: Verifique se o escopo de descoberta de services entrou em vigor

Este exemplo compara o comportamento de push de configuração antes e depois de restringir o escopo de descoberta de services. Ele utiliza dois namespaces no cluster ACK do plano de dados: ns-in-mesh, que tem a injeção automática de proxy sidecar ativada e possui o rótulo asm-discovery=enabled, e ns-not-in-mesh, que não possui nenhuma dessas configurações. A aplicação de exemplo httpbin executa em ambos os namespaces, e a aplicação de exemplo sleep é implantada em ns-not-in-mesh para acionar uma alteração de service.

Etapa 1: Preparar os namespaces e a aplicação de exemplo

  1. Crie os namespaces ns-in-mesh e ns-not-in-mesh para o cluster ACK no plano de dados. Para mais informações, consulte Create a namespace.

  2. Ative a injeção automática de proxy sidecar para o namespace ns-in-mesh. Para mais informações, consulte Enable automatic injection.

  3. Execute o comando a seguir para adicionar o rótulo asm-discovery=enabled ao namespace ns-in-mesh no cluster ACK. O seletor de rótulos na Etapa 3 corresponde a este rótulo.

    kubectl label namespace ns-in-mesh asm-discovery=enabled
  4. Utilize o conteúdo a seguir para criar o arquivo httpbin.yaml.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          serviceAccountName: httpbin
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  5. Execute os comandos a seguir para criar a aplicação de exemplo httpbin nos namespaces ns-in-mesh e ns-not-in-mesh.

    kubectl apply -f httpbin.yaml -n ns-in-mesh
    kubectl apply -f httpbin.yaml -n ns-not-in-mesh

Etapa 2: Verifique o comportamento de push antes de restringir o escopo

  1. Execute o comando a seguir para obter o nome do pod httpbin no namespace ns-in-mesh.

    kubectl get pods -n ns-in-mesh

    Saída esperada:

    NAME                       READY   STATUS    RESTARTS   AGE
    httpbin-6fcb98998c-46qhr   2/2     Running   0          22m
  2. Execute o comando a seguir para exportar a configuração do proxy sidecar. No comando, substitua httpbin-6fcb98998c-46qhr pelo nome do pod httpbin obtido na etapa anterior.

    kubectl exec -it httpbin-6fcb98998c-46qhr -c istio-proxy -n ns-in-mesh -- curl -s localhost:15000/config_dump > config_dump.json
  3. Abra o arquivo config_dump.json exportado e pesquise por httpbin.ns-not-in-mesh.

    A pesquisa retorna httpbin.ns-not-in-mesh, indicando que a configuração do proxy sidecar ainda contém informações de service do namespace ns-not-in-mesh, mesmo sem a injeção automática de proxy sidecar ativada para esse namespace.

  4. Utilize o conteúdo a seguir para criar o arquivo sleep.yaml.

    ##################################################################################################
    # Sleep service
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: sleep
      labels:
        app: sleep
    spec:
      ports:
      - port: 80
        name: http
      selector:
        app: sleep
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sleep
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sleep
      template:
        metadata:
          labels:
            app: sleep
        spec:
          containers:
          - name: sleep
            image: pstauffer/curl
            command: ["/bin/sleep", "3650d"]
            imagePullPolicy: IfNotPresent
    ---
  5. Execute o comando a seguir para implantar a aplicação sleep no namespace ns-not-in-mesh do cluster ACK.

    kubectl apply -f sleep.yaml -n ns-not-in-mesh
  6. Verifique os logs do plano de controle. O ponto de entrada no console depende da versão da instância do ASM.

Instâncias do ASM anteriores à 1.17.2.35

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha Instance Information > Base Information.

  3. Na página Base Information, clique em View log ao lado de Control-plane log collection.

  4. No canto superior direito da página Project, defina o intervalo de tempo como 5 Minutes para restringir o escopo dos logs.

    Na aba Raw Log, os logs sobre a criação da aplicação sleep ficam visíveis. Isso indica que, embora a injeção automática de proxy sidecar não esteja ativada para o namespace ns-not-in-mesh, implantar uma aplicação em ns-not-in-mesh ainda aciona o envio de configurações pelo plano de controle para os proxies sidecar no plano de dados.

{"content":"2024-01-04T10:27:00.056248Z\tinfo\tads\tPush debounce stable[16] 1 for config ServiceEntry/ns-not-in-mesh/sleep.ns-not-in-mesh.svc.cluster.local: 100.183738ms since last change, 100.183497ms since last push, full=true","_time_":"2024-01-04T18:27:00.056310074+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"1|MTcwNDM2MjU0MjUyMjE4OTYxMA==|10|4","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364020"}
{"content":"2024-01-04T10:26:59.956023Z\tinfo\tads\tFull push, new service ns-not-in-mesh/sleep.ns-not-in-mesh.svc.cluster.local","_time_":"2024-01-04T18:26:59.956087922+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"1|MTcwNDM2MjU0MjUyMjE4OTYxMA==|10|3","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364020"}

Instâncias do ASM 1.17.2.35 e posteriores

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha Log Center.

  3. Na página Log Center, clique em na aba Control-Plane Logs e defina o intervalo de tempo como 5 Minutes para restringir o escopo dos logs.

    Na aba Raw Log, os logs sobre a criação da aplicação sleep ficam visíveis. Isso indica que, embora a injeção automática de proxy sidecar não esteja ativada para o namespace ns-not-in-mesh, implantar uma aplicação em ns-not-in-mesh ainda aciona o envio de configurações pelo plano de controle para os proxies sidecar no plano de dados.

{"content":"2024-01-04T10:33:21.180016Z\tinfo\tads\tPush debounce stable[28] 2 for config Address//c847e048f73054cb192835f8a60ea5219//Pod/ns-not-in-mesh/sleep-fc5cdb9c5-pkfvr and 1 more configs: 100.488198ms since last change, 121.179298ms since last push, full=true","_time_":"2024-01-04T18:33:21.180104591+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"0|MTcwNDM1NjA0OTcxOTcxNzAyMw==|11|9","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364401"}
{"content":"2024-01-04T10:33:21.079470Z\tinfo\tmodel\tFull push, new service ns-not-in-mesh/sleep.ns-not-in-mesh.svc.cluster.local","_time_":"2024-01-04T18:33:21.07954976+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"0|MTcwNDM1NjA0OTcxOTcxNzAyMw==|11|8","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364401"}

Etapa 3: Restringir o escopo de descoberta de services ao namespace ns-in-mesh

Siga o procedimento em Configure the service discovery scope para manter apenas o namespace ns-in-mesh no escopo:

  • Com o Método 1, clique em unselect à direita de todos os namespaces, exceto ns-in-mesh.

  • Com o Método 2, defina a Key como asm-discovery e o Operator como Exists, o que corresponde a ns-in-mesh devido ao rótulo adicionado na Etapa 1.

Etapa 4: Verifique o comportamento de push após restringir o escopo

  1. Execute o comando a seguir para exportar novamente a configuração do proxy sidecar. No comando, substitua httpbin-6fcb98998c-46qhr pelo nome do pod httpbin obtido na Etapa 2.

    kubectl exec -it httpbin-6fcb98998c-46qhr -c istio-proxy -n ns-in-mesh -- curl -s localhost:15000/config_dump > config_dump.json
  2. Abra o arquivo config_dump.json exportado e pesquise por httpbin.ns-not-in-mesh.

    A pesquisa não retorna httpbin.ns-not-in-mesh, indicando que a configuração do proxy sidecar não contém mais informações de service do namespace ns-not-in-mesh.

  3. Execute o comando a seguir para excluir a aplicação sleep do namespace ns-not-in-mesh no cluster ACK.

    kubectl delete -f sleep.yaml -n ns-not-in-mesh
  4. Verifique novamente os logs do plano de controle. Use o caminho de navegação correspondente à sua versão do ASM em Step 2: Check the push behavior before you narrow the scope, mas defina o intervalo de tempo como 15 Minutes para que a janela cubra o momento da exclusão da aplicação sleep.

    Nenhum log sobre a exclusão da aplicação sleep aparece. Isso indica que alterações em namespaces fora do escopo de descoberta de services não acionam o envio de configurações pelo plano de controle para os proxies sidecar.