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:
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
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.
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.
Na aba Select Namespace, selecione o cluster de destino.
Na lista de namespaces exibida, clique em unselect à direita de cada namespace que o plano de controle não deve descobrir.
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.
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.
Especifique a regra de rótulo para correspondência dos namespaces. Por exemplo, defina a Key como
asm-discoverye o Operator como Exists para corresponder a todos os namespaces que possuem o rótuloasm-discovery.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
No painel de navegação à esquerda, escolha Instance Information > Base Information.
-
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
Crie os namespaces
ns-in-meshens-not-in-meshpara o cluster ACK no plano de dados. Para mais informações, consulte Create a namespace.Ative a injeção automática de proxy sidecar para o namespace
ns-in-mesh. Para mais informações, consulte Enable automatic injection.-
Execute o comando a seguir para adicionar o rótulo
asm-discovery=enabledao namespacens-in-meshno cluster ACK. O seletor de rótulos na Etapa 3 corresponde a este rótulo.kubectl label namespace ns-in-mesh asm-discovery=enabled -
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 -
Execute os comandos a seguir para criar a aplicação de exemplo httpbin nos namespaces
ns-in-meshens-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
-
Execute o comando a seguir para obter o nome do pod httpbin no namespace
ns-in-mesh.kubectl get pods -n ns-in-meshSaída esperada:
NAME READY STATUS RESTARTS AGE httpbin-6fcb98998c-46qhr 2/2 Running 0 22m -
Execute o comando a seguir para exportar a configuração do proxy sidecar. No comando, substitua
httpbin-6fcb98998c-46qhrpelo 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 -
Abra o arquivo
config_dump.jsonexportado e pesquise porhttpbin.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 namespacens-not-in-mesh, mesmo sem a injeção automática de proxy sidecar ativada para esse namespace. -
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 --- -
Execute o comando a seguir para implantar a aplicação sleep no namespace
ns-not-in-meshdo cluster ACK.kubectl apply -f sleep.yaml -n ns-not-in-mesh 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
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
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.
Na página Base Information, clique em View log ao lado de Control-plane log collection.
-
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 emns-not-in-meshainda 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
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha Log Center.
-
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 emns-not-in-meshainda 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-discoverye o Operator como Exists, o que corresponde ans-in-meshdevido ao rótulo adicionado na Etapa 1.
Etapa 4: Verifique o comportamento de push após restringir o escopo
-
Execute o comando a seguir para exportar novamente a configuração do proxy sidecar. No comando, substitua
httpbin-6fcb98998c-46qhrpelo 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 -
Abra o arquivo
config_dump.jsonexportado e pesquise porhttpbin.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 namespacens-not-in-mesh. -
Execute o comando a seguir para excluir a aplicação sleep do namespace
ns-not-in-meshno cluster ACK.kubectl delete -f sleep.yaml -n ns-not-in-mesh -
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.