Configure a gestão avançada de tráfego com o Envoy

A configuração é suportada para clientes de pré-visualização, mas não a recomendamos para novos utilizadores do Cloud Service Mesh. Para mais informações, consulte a vista geral do encaminhamento de serviços do Cloud Service Mesh.

Este documento fornece informações sobre como configurar a gestão de tráfego avançada para implementações do Cloud Service Mesh que usam o Envoy.

Antes de começar

Antes de configurar a gestão de tráfego avançada, siga as instruções em Prepare-se para configurar a Cloud Service Mesh com o Envoy, incluindo a configuração da Cloud Service Mesh e de quaisquer anfitriões de máquinas virtuais (VMs) ou clusters do Google Kubernetes Engine (GKE) de que precisa. Crie os recursos Google Cloud necessários.

A disponibilidade da funcionalidade de gestão de tráfego avançada difere consoante o protocolo de pedido que escolher. Este protocolo é configurado quando configura o encaminhamento através do proxy HTTP ou HTTPS de destino, do proxy gRPC de destino ou do recurso de proxy TCP de destino:

  • Com o proxy HTTP de destino e o proxy HTTPS de destino, todas as funcionalidades descritas neste documento estão disponíveis.
  • Com o proxy gRPC de destino, algumas funcionalidades estão disponíveis.
  • Com o proxy TCP de destino, não estão disponíveis funcionalidades avançadas de gestão de tráfego.

Para mais informações, consulte as funcionalidades da Cloud Service Mesh e a gestão avançada de tráfego. Para um guia de configuração ponto a ponto, consulte o artigo Configure a gestão avançada de tráfego com serviços gRPC sem proxy.

Configure a divisão de tráfego

Estas instruções pressupõem o seguinte:

  • A sua implementação do Cloud Service Mesh tem um mapa de URLs denominado review-url-map.
  • O mapa de URLs envia todo o tráfego para um serviço de back-end denominado review1, que funciona como o serviço de back-end predefinido.
  • Planeia encaminhar 5% do tráfego para uma nova versão de um serviço. Esse serviço está a ser executado numa VM ou num ponto final de back-end num grupo de pontos finais da rede (NEG) associado ao serviço de back-end review2.
  • Não são usadas regras de anfitrião nem correspondências de caminhos.

Se estiver a dividir o tráfego para um novo serviço que não tenha sido referenciado pelo mapa de URLs anteriormente, adicione primeiro o novo serviço a weightedBackendServices e atribua-lhe um peso de 0. Em seguida, aumente gradualmente o peso atribuído a esse serviço.

Para configurar a divisão de tráfego, siga estes passos:

Consola

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

  2. Clique em Mapeamentos de regras de encaminhamento.

  3. Clique em Criar mapa de regras de encaminhamento.

  4. Na página Criar um mapa de regras de encaminhamento, introduza um Nome.

  5. No menu Protocolo, selecione HTTP.

  6. Selecione uma regra de encaminhamento existente.

  7. Em Regras de encaminhamento, selecione Regra avançada de anfitrião, caminho e rota.

  8. Em Anfitriões e correspondências de caminhos, clique em Adicionar anfitriões e correspondência de caminhos. Isto adiciona um novo correspondente de caminhos que pode configurar para dividir o tráfego.

  9. Adicione as seguintes definições ao campo Correspondência de caminhos:

        - defaultService: global/backendServices/review1
          name: matcher1
          routeRules:
          - priority: 2
            matchRules:
            - prefixMatch: ''
            routeAction:
             weightedBackendServices:
             - backendService: global/backendServices/review1
               weight: 95
             - backendService: global/backendServices/review2
               weight: 5
    
  10. Clique em Concluído.

  11. Clique em Guardar.

Quando estiver satisfeito com a nova versão, pode ajustar gradualmente as ponderações dos dois serviços e, eventualmente, enviar todo o tráfego para review2.

gcloud

  1. Execute o comando gcloud export para obter a configuração do mapa de URLs:

    gcloud compute url-maps export review-url-map \
        --destination=review-url-map-config.yaml
    
  2. Adicione a seguinte secção ao ficheiro review-url-map-config.yaml:

         hostRules:
         - description: ''
          hosts:
           - '*'
         pathMatcher: matcher1
         pathMatchers:
         - defaultService: global/backendServices/review1
           name: matcher1
           routeRules:
           - priority: 2
             matchRules:
             - prefixMatch: ''
             routeAction:
              weightedBackendServices:
              - backendService: global/backendServices/review1
                weight: 95
              - backendService: global/backendServices/review2
                weight: 5
    
  3. Atualize o mapa de URLs:

    gcloud compute url-maps import review-url-map \
        --source=review-url-map-config.yaml
    

Quando estiver satisfeito com a nova versão, pode ajustar gradualmente as ponderações dos dois serviços e, eventualmente, enviar todo o tráfego para review2.

Configure um lançamento parcial

Use um processo de implementação parcial, por vezes denominado canarying, para lançar uma nova versão de software para uma pequena fração de servidores antes de lançar a nova versão para o resto dos seus servidores de produção.

Um lançamento parcial usa o weightedBackendServices. Para ativar uma versão parcial, designe um serviço de back-end como o serviço de teste ou canary e atribua-lhe um peso baixo, por exemplo, 2 ou 5. Implemente a nova versão do software apenas nesses servidores. Quando tiver a certeza de que a nova versão não tem problemas, implemente-a nos restantes serviços.

  • Para ativar uma versão parcial, use o seguinte exemplo de código YAML:
pathMatchers:
     - defaultService: DEFAULT_SERVICE_URL
       name: matcher1
       routeRules:
       - matchRules:
         - prefixMatch: '/'
         routeAction:
          weightedBackendServices:
          - backendService: BACKEND_SERVICE_PARTIAL_URL
            weight: 2
          - backendService: BACKEND_SERVICE_URL
            weight: 98
  • DEFAULT_SERVICE_URL é o URL predefinido do seu serviço.
  • BACKEND_SERVICE_PARTIAL_URL é o URL do serviço de back-end que recebe 2% do tráfego.
  • BACKEND_SERVICE_URL é o URL do serviço de back-end que recebe 98% do tráfego.

Configure implementações azul-verde

As implementações azul-verde são modelos de lançamento que reduzem o tempo necessário para mudar o tráfego de produção para um novo lançamento de um serviço ou para uma reversão de um lançamento anterior do serviço. Estas implementações mantêm ambas as versões do serviço disponíveis em produção e transferem o tráfego de uma para a outra.

As implementações azul-verde usam weightedBackendServices. No exemplo de YAML que se segue, os back-ends para SERVICE_BLUE_URL estão totalmente implementados com o lançamento de produção atual e os back-ends para SERVICE_GREEN_URL estão totalmente implementados com o novo lançamento. Na configuração do exemplo, a implementação GREEN recebe 100% do tráfego de produção. Se encontrar problemas, pode inverter as ponderações para as duas implementações, o que reverte eficazmente a versão GREEN com defeito e repõe a versão BLUE conhecida como boa. Em qualquer dos casos, o tráfego pode ser alterado rapidamente porque ambas as versões estão disponíveis para receber tráfego.

  • Para ativar uma implementação azul-verde, use o seguinte exemplo de código YAML:
pathMatchers:
     - defaultService: DEFAULT_SERVICE_URL
       name: matcher1
       routeRules:
       - matchRules:
         - prefixMatch: '/'
         routeAction:
          weightedBackendServices:
          - backendService: BACKEND_SERVICE_BLUE_URL
            weight: 0
          - backendService: BACKEND_SERVICE_GREEN_URL
            weight: 100
  • DEFAULT_SERVICE_URL é o URL predefinido do seu serviço.
  • BACKEND_SERVICE_BLUE_URL é o URL do serviço de back-end que não recebe nenhum do seu tráfego.
  • BACKEND_SERVICE_GREEN_URL é o URL do serviço de back-end que recebe 100% do seu tráfego.

Configure o espelhamento de tráfego

Use a replicação de tráfego quando quiser que o tráfego seja direcionado para dois serviços de back-end diferentes para fins de depuração ou teste de novos serviços.

No exemplo seguinte, todos os pedidos são enviados para SERVICE_URL e para MIRROR_SERVICE_URL. Apenas as respostas de SERVICE_URL são enviadas de volta ao cliente. MIRROR_SERVICE_URL não tem impacto no cliente.

Para configurar a replicação de tráfego, siga estes passos:

Consola

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

  2. Clique em Mapeamentos de regras de encaminhamento.

  3. Clique em Criar mapa de regras de encaminhamento.

  4. Na página Criar um mapa de regras de encaminhamento, introduza um Nome.

  5. Na lista Protocolo, selecione HTTP.

  6. Selecione uma regra de encaminhamento existente.

  7. Em Regras de encaminhamento, selecione Regra avançada de anfitrião, caminho e rota.

  8. Em Anfitriões e correspondências de caminhos, clique em Adicionar anfitriões e correspondência de caminhos. Isto adiciona um novo correspondente de caminho que pode configurar para duplicar o tráfego.

  9. Adicione as seguintes definições ao campo Correspondência de caminhos:

        - defaultService: DEFAULT_SERVICE_URL
          name: matcher1
          routeRules:
          - matchRules:
            - prefixMatch: '/'
            routeAction:
             weightedBackendServices:
             - backendService: BACKEND_SERVICE_URL
               weight: 100
             requestMirrorPolicy:
               backendService: BACKEND_SERVICE_MIRROR_URL
    
    • DEFAULT_SERVICE_URL é o URL predefinido do seu serviço.
    • BACKEND_SERVICE_URL é o URL do back-end duplicado.
    • BACKEND_SERVICE_MIRROR_URL é o URL do serviço de back-end que espelha.
  10. Clique em Concluído.

  11. Clique em Guardar.

gcloud

  1. Execute o comando gcloud export para obter a configuração do mapa de URLs:

    gcloud compute url-maps export review-url-map \
        --destination=review-url-map-config.yaml
    
  2. Adicione a seguinte secção ao ficheiro review-url-map-config.yaml:

         hostRules:
         - description: ''
          hosts:
           - '*'
         pathMatcher: matcher1
         pathMatchers:
        - defaultService: DEFAULT_SERVICE_URL
          name: matcher1
          routeRules:
          - matchRules:
            - prefixMatch: '/'
            routeAction:
             weightedBackendServices:
             - backendService: BACKEND_SERVICE_URL
               weight: 100
             requestMirrorPolicy:
               backendService: BACKEND_SERVICE_MIRROR_URL
    
    • DEFAULT_SERVICE_URL é o URL predefinido do seu serviço.
    • BACKEND_SERVICE_URL é o URL do back-end duplicado.
    • BACKEND_SERVICE_MIRROR_URL é o URL do serviço de back-end que espelha.
  3. Atualize o mapa de URLs:

    gcloud compute url-maps import review-url-map \
        --source=review-url-map-config.yaml
    

Configure a interrupção de circuito

A interrupção de circuitos permite-lhe definir limites de falhas para evitar que os pedidos de clientes sobrecarreguem os seus back-ends. Depois de os pedidos atingirem um limite que definiu, o cliente deixa de permitir novas ligações ou enviar pedidos adicionais, dando aos seus back-ends tempo para recuperar.

Como resultado, a interrupção de circuitos impede falhas em cascata devolvendo um erro ao cliente em vez de sobrecarregar um back-end. Isto permite que algum tráfego seja apresentado, ao mesmo tempo que dá tempo para gerir a situação de sobrecarga, como lidar com um pico de tráfego aumentando a capacidade através do dimensionamento automático.

No exemplo seguinte, define os disjuntores da seguinte forma:

  • Máximo de pedidos por ligação: 100
  • Número máximo de associações: 1000
  • Máximo de pedidos pendentes: 200
  • Pedidos máximos: 1000
  • Máximo de novas tentativas: 3

Para configurar a interrupção de circuito, siga estes passos:

Consola

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

  2. Clique no nome do serviço de back-end que quer atualizar.

  3. Clique em Editar.

  4. Clique em Configurações avançadas.

  5. Em Disjuntores, selecione a caixa de verificação Ativar.

  6. Clique em Editar.

    1. Em Máximo de pedidos por ligação, introduza 100.
    2. Em Ligações máximas, introduza 1000.
    3. Em Máximo de pedidos pendentes, introduza 200.
    4. Em Pedidos máximos, introduza 1000.
    5. Em Máximo de tentativas, introduza 3.
  7. Clique em Guardar e, de seguida, clique novamente em Guardar.

gcloud

  1. Execute o comando gcloud export para exportar a configuração do serviço de back-end. Substitua BACKEND_SERVICE_NAME pelo nome do serviço de back-end.

     gcloud compute backend-services export BACKEND_SERVICE_NAME \
         --destination=BACKEND_SERVICE_NAME-config.yaml --global
    
  2. Atualize o ficheiro BACKEND_SERVICE_NAME.yaml da seguinte forma:

     affinityCookieTtlSec: 0
     backends:
     - balancingMode: UTILIZATION
       capacityScaler: 1.0
        group:https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroups/INSTANCE_GROUP_NAME
       maxUtilization: 0.8
     circuitBreakers:
       maxConnections: 1000
       maxPendingRequests: 200
       maxRequests: 1000
       maxRequestsPerConnection: 100
       maxRetries: 3
     connectionDraining:
       drainingTimeoutSec: 300
     healthChecks:
       - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/HEALTH_CHECK_NAME
     loadBalancingScheme: INTERNAL_SELF_MANAGED
     localityLbPolicy: ROUND_ROBIN
     name: BACKEND_SERVICE_NAME
     port: 80
     portName: http
     protocol: HTTP
     sessionAffinity: NONE
     timeoutSec: 30
    
  3. Atualize o ficheiro de configuração do serviço de back-end:

    gcloud compute backend-services import BACKEND_SERVICE_NAME \
        --source=BACKEND_SERVICE_NAME-config.yaml --global
    

A gestão avançada de tráfego permite-lhe configurar a afinidade de sessão com base num cookie fornecido.

Para configurar a afinidade de sessão através do HTTP_COOKIE, siga estes passos:

Consola

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

  2. Clique no nome do serviço de back-end que quer atualizar.

  3. Clique em Editar.

  4. Clique em Configurações avançadas.

  5. Em Afinidade de sessão, selecione Cookie HTTP.

  6. Em Política de equilíbrio de carga de localidade, selecione Ring hash.

    1. No campo Nome do cookie HTTP, introduza http_cookie.
    2. No campo Caminho do cookie HTTP, introduza /cookie_path.
    3. No campo TTL de cookies HTTP, introduza 100.
    4. No campo Tamanho mínimo do anel, introduza 10000.
  7. Clique em Guardar.

gcloud

  1. Execute o comando gcloud export para exportar a configuração do serviço de back-end. Substitua BACKEND_SERVICE_NAME pelo nome do serviço de back-end.

    gcloud compute backend-services export BACKEND_SERVICE_NAME \
        --destination=BACKEND_SERVICE_NAME-config.yaml --global
    
  2. Atualize o ficheiro YAML da seguinte forma:

    sessionAffinity: 'HTTP_COOKIE'
    localityLbPolicy: 'RING_HASH'
    consistentHash:
    httpCookie:
      name: 'http_cookie'
      path: '/cookie_path'
      ttl:
        seconds: 100
        nanos: 30
    minimumRingSize: 10000
    
  3. Importe o ficheiro de configuração do serviço de back-end:

    gcloud compute backend-services import BACKEND_SERVICE_NAME \
        --source=BACKEND_SERVICE_NAME-config.yaml --global
    

Configure a deteção de valores atípicos

A deteção de valores atípicos controla a remoção de anfitriões não saudáveis do conjunto de equilíbrio de carga. O Cloud Service Mesh faz isto através de um conjunto de políticas que especificam os critérios para a remoção de VMs ou pontos finais de back-end não íntegros em NEGs, juntamente com critérios que definem quando um back-end ou um ponto final é considerado suficientemente íntegro para receber tráfego novamente.

No exemplo seguinte, o serviço de back-end tem um grupo de instâncias como back-end. A definição de deteção de valores atípicos especifica que a análise de deteção de valores atípicos é executada a cada segundo. Se um ponto final devolver cinco erros 5xx consecutivos, é rejeitado da consideração do equilíbrio de carga durante 30 segundos pela primeira vez. O tempo de ejeção real para o mesmo ponto final é de 30 segundos multiplicado pelo número de vezes que é ejetado.

Para configurar a deteção de valores atípicos no recurso de serviço de back-end, siga estes passos:

Consola

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

  2. Clique no nome de um serviço.

  3. Clique em Editar.

  4. Clique em Configurações avançadas.

  5. Selecione a caixa de verificação Deteção de valores atípicos.

  6. Clique em Editar.

    1. Defina Erros consecutivos como 5.
    2. Defina o Intervalo para 1000 milissegundos.
    3. Defina o Tempo de ejeção base para 30000 milissegundos.
  7. Clique em Guardar e, de seguida, clique novamente em Guardar.

gcloud

  1. Execute o comando gcloud export para exportar a configuração do serviço de back-end. Substitua BACKEND_SERVICE_NAME pelo nome do serviço de back-end.

    gcloud compute backend-services export BACKEND_SERVICE_NAME \
        --destination=BACKEND_SERVICE_NAME-config.yaml --global
    
  2. Atualize o ficheiro YAML da seguinte forma, substituindo o nome do serviço de back-end por BACKEND_SERVICE_NAME:

    name: BACKEND_SERVICE_NAME
    loadBalancingScheme: INTERNAL_SELF_MANAGED
    backends:
    - balancingMode: UTILIZATION
     capacityScaler: 1.0
     group: $INSTANCE_GROUP_URL
    healthChecks:
    - $HEALTH_CHECK_URL
    port: 80
    portName: http
    protocol: HTTP
    outlierDetection:
     consecutiveErrors: 5,
     interval:
         seconds: 1,
         nanos: 0
     baseEjectionTime:
         seconds: 30,
         nanos: 0
    
  3. Importe o ficheiro de configuração do serviço de back-end:

    gcloud compute backend-services import BACKEND_SERVICE_NAME \
        --source=BACKEND_SERVICE_NAME-config.yaml --global
    

Defina a política de equilíbrio de carga de localidade

Use a política de balanceamento de carga de localidade para escolher um algoritmo de balanceamento de carga com base no peso e na prioridade da localidade fornecidos pela Cloud Service Mesh. Por exemplo, pode fazer um round robin ponderado entre pontos finais saudáveis ou fazer uma hash consistente.

No exemplo seguinte, o serviço de back-end tem um grupo de instâncias como back-end. A política de equilíbrio de carga de localidade está definida como RING_HASH.

Para definir a política de equilíbrio de carga de localidade, siga estes passos:

Consola

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

  2. Clique no nome de um serviço.

  3. Clique em Editar.

  4. Clique em Configurações avançadas.

  5. Em Política de tráfego, no menu Política de equilíbrio de carga de localidade, selecione Hash de anel.

  6. Clique em Guardar.

gcloud

  1. Execute o comando gcloud export para exportar a configuração do serviço de back-end. Substitua BACKEND_SERVICE_NAME pelo nome do serviço de back-end.

    gcloud compute backend-services export BACKEND_SERVICE_NAME \
        --destination=BACKEND_SERVICE_NAME-config.yaml --global
    
  2. Atualize o ficheiro BACKEND_SERVICE_NAME.yaml da seguinte forma:

    name: shopping-cart-service
    loadBalancingScheme: INTERNAL_SELF_MANAGED
    backends:
    - balancingMode: UTILIZATION
     capacityScaler: 1.0
     group: $INSTANCE_GROUP_URL
    healthChecks:
    - $HEALTH_CHECK_URL
    port: 80
    portName: http
    protocol: HTTP
    localityLbPolicy: RING_HASH
    
  3. Importe o ficheiro de configuração do serviço de back-end:

    gcloud compute backend-services import BACKEND_SERVICE_NAME \
        --source=BACKEND_SERVICE_NAME-config.yaml --global
    

Para mais informações sobre como funciona a política de equilíbrio de carga de localidade, consulte a documentação do recurso backendService.

Configure o redirecionamento de URL

Estas instruções pressupõem o seguinte:

  • A sua implementação do Cloud Service Mesh tem um mapa de URLs denominado review-url-map.
  • O mapa de URLs envia todo o tráfego para um serviço de back-end denominado review1, que funciona como o serviço de back-end predefinido.
  • Quiser redirecionar o tráfego de um anfitrião para outro.

Para configurar o redirecionamento de URL, siga estes passos:

Consola

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

  2. Clique em Mapeamentos de regras de encaminhamento.

  3. Clique em Criar mapa de regras de encaminhamento.

  4. Na página Criar um mapa de regras de encaminhamento, introduza um Nome.

  5. No menu Protocolo, selecione HTTP.

  6. Selecione uma regra de encaminhamento existente.

  7. Em Regras de encaminhamento, selecione Regra avançada de anfitrião, caminho e rota.

  8. Em Anfitriões e correspondências de caminhos, clique em Adicionar anfitriões e correspondência de caminhos. Isto adiciona um novo correspondente de caminho que redireciona o tráfego.

  9. Adicione as seguintes definições ao campo Correspondência de caminhos:

        - defaultService: global/backendServices/review1
          name: matcher1
          routeRules:
          - matchRules:
            - prefixMatch: ''
            urlRedirect:
             hostRedirect: '[REDIRECT_HOST]'
             pathRedirect: '[REDIRECT_URL]'
             redirectResponseCode: 'FOUND',
            stripQuery: True
    
  10. Clique em Concluído.

  11. Clique em Guardar.

gcloud

  1. Execute o comando gcloud export para obter a configuração do mapa de URLs:

    gcloud compute url-maps export review-url-map \
        --destination=review-url-map-config.yaml
    
  2. Adicione a seguinte secção ao ficheiro review-url-map-config.yaml:

         hostRules:
         - description: ''
          hosts:
           - '*'
         pathMatcher: matcher1
         pathMatchers:
        - defaultService: global/backendServices/review1
          name: matcher1
          routeRules:
          - matchRules:
            - prefixMatch: ''
            urlRedirect:
             hostRedirect: '[REDIRECT_HOST]'
             pathRedirect: '[REDIRECT_URL]'
             redirectResponseCode: 'FOUND',
            stripQuery: True
    
  3. Atualize o mapa de URLs:

    gcloud compute url-maps import review-url-map \
        --source=review-url-map-config.yaml
    

Configure o encaminhamento de tráfego com a reescrita de URLs

O encaminhamento de tráfego permite-lhe direcionar o tráfego para diferentes serviços de back-end com base em atributos de pedido, como valores de cabeçalho. Além disso, pode configurar ações como reescrever o URL no pedido antes de o pedido ser direcionado para o serviço de back-end.

No exemplo seguinte, o pedido é direcionado para SERVICE_ANDROID_URL se o caminho do pedido tiver o prefixo /mobile/ e o User-Agent do pedido contiver Android. Antes de enviar o pedido para o serviço de back-end, o prefixo do URL pode ser alterado para, por exemplo, REWRITE_PATH_ANDROID, /android/. No entanto, se o caminho tiver o prefixo /mobile/ e tiver um User-Agent que contenha iPhone, o tráfego é direcionado para SERVICE_IPHONE_URL e o prefixo do URL é alterado para REWRITE_PATH_IPHONE. Todos os outros pedidos com o prefixo /mobile/ e que tenham um User-Agent com um valor diferente de Android ou iPhone são direcionados para SERVICE_GENERIC_DEVICE_URL.

pathMatchers:
     - defaultService: [DEFAULT_SERVICE_URL]
       name: matcher1
       routeRules:
       - matchRules:
         - prefixMatch: /mobile/
           headerMatches:
           - headerName: User-Agent
             regexMatch: .*Android.*
         service: $[SERVICE_ANDROID_URL]
         routeAction:
           urlRewrite:
             pathPrefixRewrite: [REWRITE_PATH_ANDROID]
       - matchRules:
         - prefixMatch: /mobile/
           headerMatches:
           - headerName: User-Agent
             regexMatch: .*iPhone.*
         service: [SERVICE_IPHONE_URL]
         routeAction:
           urlRewrite:
             pathPrefixRewrite: [REWRITE_PATH_IPHONE]
       - matchRules:
         - prefixMatch: /mobile/
         service: [SERVICE_GENERIC_DEVICE_URL]

Configure a injeção de falhas

A injeção de falhas permite-lhe injetar um atraso fixo ou uma paragem forçada, denominada anulação, numa rota específica para testar a resiliência de uma aplicação.

No exemplo que se segue, todos os pedidos são enviados para SERVICE_URL, com um atraso fixo de 10 segundos adicionado a 100% dos pedidos. O cliente que envia os pedidos vê que todas as respostas estão atrasadas 10 segundos. Além disso, é aplicada uma falha com uma resposta Service Unavailable 503 a 50% dos pedidos. O cliente vê que 50% dos seus pedidos recebem uma resposta 503. Estes pedidos não chegam ao serviço de back-end.

pathMatchers:
     - defaultService: [DEFAULT_SERVICE_URL]
       name: matcher1
       routeRules:
       - matchRules:
         - prefixMatch: '/'
         routeAction:
          weightedBackendServices:
          - backendService: [SERVICE_URL]
            weight: 100
          faultInjectionPolicy:
            delay:
              fixedDelay:
                seconds: 10
                nanos: 0
              percentage: 100
            abort:
              httpStatus: 503
              percentage: 50

Configure a filtragem de configurações com base na correspondência MetadataFilters

MetadataFilters estão ativadas com regras de encaminhamento e HttpRouteRuleMatch. Use esta funcionalidade para controlar uma regra de encaminhamento ou uma regra de trajeto específica, de modo que o plano de controlo envie a regra de encaminhamento ou a regra de trajeto apenas para proxies cujos metadados do nó correspondam à definição do filtro de metadados. Se não especificar nenhum MetadataFilters, a regra é enviada para todos os proxies Envoy.

Esta funcionalidade facilita a implementação faseada de uma configuração. Por exemplo, crie uma regra de encaminhamento denominada forwarding-rule1, que quer que seja enviada apenas para os Envoys cujos metadados de nós contenham app: review e version: canary.

Para adicionar MetadataFilters a uma regra de encaminhamento, siga estes passos:

gcloud

  1. Execute o comando gcloud export para obter a configuração da regra de encaminhamento:

    gcloud compute forwarding-rules export forwarding-rule1 \
        --destination=forwarding-rule1-config.yaml \
        --global
    
  2. Elimine a regra de encaminhamento:

    gcloud compute forwarding-rules delete forwarding-rule1 \
        --global
    
  3. Atualize o ficheiro forwarding-rule1-config.yaml.

    O exemplo seguinte cria um filtro de metadados MATCH_ALL:

     metadataFilters:
     - filterMatchCriteria: 'MATCH_ALL'
       filterLabels:
       - name: 'app'
         value: 'review'
       - name: 'version'
         value: 'canary'
    

    O exemplo seguinte cria um filtro de metadados MATCH_ANY:

     metadataFilters:
     - filterMatchCriteria: 'MATCH_ANY'
       filterLabels:
       - name: 'app'
         value: 'review'
       - name: 'version'
         value: 'production'
    
  4. Remova todos os campos só de saída do ficheiro forwarding-rule1-config.yaml Para mais informações, consulte a documentação de gcloud compute forwarding-rules import.

  5. Execute o comando gcloud import para atualizar o ficheiro:forwarding-rule1-config.yaml

    gcloud compute forwarding-rules import forwarding-rule1 \
        --source=forwarding-rule1-config.yaml \
        --global
    
  6. Use estas instruções para adicionar metadados de nós ao Envoy antes de iniciar o Envoy. Apenas é suportado um valor de string.

    a. Para uma implementação baseada em VMs, em bootstrap_template.yaml, adicione o seguinte na secção metadata:

       app: 'review'
       version: 'canary'
    

    b. Para uma implementação baseada no Google Kubernetes Engine ou no Kubernetes, em trafficdirector_istio_sidecar.yaml, adicione o seguinte na secção env:

       - name: ISTIO_META_app
         value: 'review'
       - name: ISTIO_META_version
         value: 'canary'
    

Exemplos de filtragem de metadados

Use as seguintes instruções para um cenário em que vários projetos estão na mesma rede VPC partilhada e quer que os recursos do Cloud Service Mesh de cada projeto de serviço sejam visíveis para proxies no mesmo projeto.

A configuração da VPC partilhada é a seguinte:

  • Nome do projeto anfitrião: vpc-host-project
  • Projetos de serviços: project1, project2
  • Serviços de back-end com instâncias ou pontos finais de back-end que executam um proxy compatível com xDS em project1 e project2

Para configurar a Cloud Service Mesh para isolar project1, siga estes passos:

gcloud

  1. Crie todas as regras de encaminhamento em project1 com o seguinte filtro de metadados:

         metadataFilters:
         - filterMatchCriteria: 'MATCH_ALL'
           filterLabels
           - name: 'project_name'
             value: 'project1'
           - name: 'version'
             value: 'production'
    
  2. Quando configurar os proxies implementados em instâncias ou pontos finais no project1, inclua os seguintes metadados na secção de metadados do nó do ficheiro de arranque:

       project_name: 'project1'
       version: 'production'
    
  3. Verifique se os proxies já implementados em project2 não receberam a regra de encaminhamento criada no primeiro passo. Para o fazer, tente aceder aos serviços em project1 a partir de um sistema que execute um proxy em project2. Para obter informações sobre como verificar se uma configuração da Cloud Service Mesh está a funcionar corretamente, consulte Verificar a configuração.

Para testar uma nova configuração num subconjunto de proxies antes de a disponibilizar a todos os proxies, siga estes passos:

gcloud

  1. Inicie os proxies que está a usar para testes com os seguintes metadados do nó. Não inclua os metadados deste nó para proxies que não esteja a usar para testes.

      version: 'test'
    
  2. Para cada nova regra de encaminhamento que quer testar, inclua o seguinte filtro de metadados:

      metadataFilters:
      - filterMatchCriteria: 'MATCH_ALL'
        filterLabels:
        - name: 'version'
          value: 'test'
    
  3. Teste a nova configuração enviando tráfego para os proxies de teste e faça as alterações necessárias. Se a nova configuração estiver a funcionar corretamente, apenas os proxies que testar recebem a nova configuração. Os restantes proxies não recebem a nova configuração e não a podem usar.

  4. Quando confirmar que a nova configuração funciona corretamente, remova o filtro de metadados associado à mesma. Isto permite que todos os proxies recebam a nova configuração.

Resolução de problemas

Use estas informações para resolver problemas quando o tráfego não está a ser encaminhado de acordo com as regras de encaminhamento e as políticas de tráfego que configurou.

Sintomas:

  • Aumento do tráfego para serviços em regras acima da regra em questão.
  • Um aumento inesperado nas respostas HTTP 4xx e 5xx para uma determinada regra de encaminhamento.

Solução: uma vez que as regras de encaminhamento são interpretadas por ordem de prioridade, reveja a prioridade atribuída a cada regra.

Quando definir regras de percursos, certifique-se de que as regras com prioridade mais elevada (ou seja, com números de prioridade mais baixos) não encaminham inadvertidamente tráfego que, de outra forma, teria sido encaminhado por uma regra de percurso subsequente. Considere o seguinte exemplo:

  • Regra do primeiro trajeto

    • Regra de encaminhamento com correspondência pathPrefix = /shopping/
    • Ação de redirecionamento: enviar tráfego para o serviço de back-end service-1
    • Prioridade da regra: 4
  • Segunda regra de trajeto

    • Route rule match regexMatch = /shopping/cart/ordering/.*
    • Ação de redirecionamento: enviar tráfego para o serviço de back-end service-2
    • Prioridade da regra: 8

Neste caso, um pedido com o caminho /shopping/cart/ordering/cart.html é encaminhado para service-1. Embora a segunda regra tivesse sido correspondente, é ignorada porque a primeira regra tinha prioridade.

Bloqueie o tráfego entre serviços

Se quiser bloquear o tráfego entre o Serviço A e o Serviço B, e a sua implementação estiver no GKE, configure a segurança do serviço e use uma política de autorização para bloquear o tráfego entre serviços. Para ver instruções completas, consulte o artigo Segurança do serviço Cloud Service Mesh e as instruções de configuração com o Envoy e o gRPC sem proxy.

O que se segue?