Configurar uma extensão de tráfego

Com as extensões de serviço, os balanceadores de carga de aplicativo compatíveis podem usar plug-ins ou enviar chamadas para serviços de back-end e inserir processamento personalizado no caminho de processamento. As extensões de tráfego são executadas por último no caminho de processamento de solicitações e primeiro no caminho de processamento de respostas para modificar cabeçalhos e payloads sem afetar a escolha do serviço de back-end. Nesta página, descrevemos como configurar as extensões de tráfego.

Para uma visão geral das extensões do balanceador de carga de aplicativo, consulte Visão geral das extensões do Cloud Load Balancing.

Uma extensão de tráfego para um balanceador de carga de aplicativo aponta para os seguintes recursos:

  • Uma regra de encaminhamento para anexar
  • Um plug-in ou um serviço de back-end de destaque cujos back-ends executam a API gRPC ext_proc.

Uma extensão de tráfego agrupa serviços de extensão relacionados em uma ou mais cadeias. É possível configurar plug-ins e indicadores na mesma cadeia de extensão. Cada cadeia de extensão seleciona o tráfego em que vai agir usando condições de correspondência da Common Expression Language (CEL). O balanceador de carga avalia uma solicitação em relação à condição de correspondência de cada cadeia de maneira sequencial. Quando uma solicitação corresponde às condições definidas por uma cadeia, todas as extensões na cadeia agem na solicitação. Apenas uma cadeia corresponde a uma determinada solicitação.

Cada extensão em uma cadeia pode ter o próprio conjunto de eventos compatíveis. As modificações feitas por uma extensão no conteúdo de solicitação e resposta ficam visíveis para as outras extensões na cadeia. Para extensões configuradas para oferecer suporte a eventos de resposta, a sequência de extensões é invertida no caminho de resposta.

A extensão de tráfego faz referência à regra de encaminhamento do balanceador de carga a ser anexada. Depois de configurar o recurso, o balanceador de carga começa a enviar solicitações correspondentes aos serviços de extensão.

Para informações sobre os limites relacionados a extensões, consulte a página Cotas e limites.

Configurar usando plug-ins

Nesta seção, mostramos como configurar uma extensão de tráfego usando um plug-in.

Todos os recursos de extensão que fazem referência a um determinado plug-in precisam ser do mesmo tipo. As extensões também precisam ter o mesmo esquema de balanceamento de carga. Não é possível configurar extensões do Cloud Load Balancing com plug-ins já usados em extensões do Media CDN.

Antes de começar

  1. Crie um plug-in que contenha seu código personalizado.

  2. Crie e configure um balanceador de carga de aplicativo que ofereça suporte a plug-ins de extensão de tráfego.

    Por exemplo, configure um balanceador de carga de aplicativo externo global com back-ends de grupos de instâncias de VM.

  3. Configure uma maneira de enviar solicitações de teste ao serviço, por exemplo, executando curl. Se você estiver usando um balanceador de carga interno, crie uma VM de cliente para teste.

Configurar uma extensão de tráfego usando um plug-in

O exemplo a seguir ajuda você a configurar uma extensão de tráfego usando um plug-in que adiciona um cabeçalho de resposta, hello: service-extensions, quando o host corresponde a example.com.

  1. Verifique se há uma correspondência para example.com no mapa de URL.

    1. Execute o seguinte comando curl na regra de encaminhamento da VM do cliente:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      Substitua FORWARDING_RULE_IP pelo endereço IP da regra de encaminhamento. Para encontrar o endereço IP, use o comando gcloud compute forwarding-rules describe.

      O resultado será o seguinte:

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
  2. Configure a extensão de trânsito.

    Console

    1. No console do Google Cloud , acesse a página Extensões de serviço.

      Acessar Extensões de serviço

    2. Clique em Criar extensão.

      Um assistente vai abrir para orientar você nas etapas iniciais.

    3. Para o produto, selecione Load Balancing. Em seguida, clique em Continuar.

      Uma lista de balanceadores de carga de aplicativo compatíveis aparece.

    4. Para o tipo de balanceador de carga, selecione o balanceador de carga de aplicativo externo global ou o balanceador de carga de aplicativo interno entre regiões. Depois clique em Continuar.

    5. No tipo de extensão, selecione Extensões de tráfego e clique em Continuar.

    6. Para abrir o formulário Criar extensão, clique em Continuar.

      No formulário Criar extensão, observe que as seleções anteriores, que aparecem na parte de cima da página, não podem ser editadas.

    7. Na seção Noções básicas, faça o seguinte:

      1. Especifique um nome exclusivo para a extensão.

        O nome precisa começar com uma letra minúscula seguida por até 62 letras minúsculas, números ou hifens e não pode terminar com um hífen.

      2. Opcional: digite uma breve descrição sobre a extensão usando até 1.024 caracteres.

      3. Opcional: na seção Rótulos, clique em Adicionar rótulo. Em seguida, na linha que aparece, faça o seguinte:

        • Em Chave, insira um nome de chave.
        • Em Valor, insira um valor para a chave.

        Para adicionar mais pares de chave-valor, clique em Adicionar rótulo. É possível adicionar no máximo 64 pares de chave-valor.

        Para mais informações sobre rótulos, consulte Criar e atualizar rótulos para projetos.

    8. Em Regras de encaminhamento, selecione uma ou mais regras de encaminhamento para associar à extensão, por exemplo, http-content-rule.

      As regras de encaminhamento já associadas a outra extensão não podem ser selecionadas e aparecem como indisponíveis.

    9. Para Cadeias de extensão, adicione uma ou mais cadeias de extensão para executar em uma solicitação correspondente.

      Para adicionar uma cadeia de extensões, faça o seguinte e clique em Concluído:

      • Em Nova cadeia de extensão, especifique um nome exclusivo.

        O nome precisa estar em conformidade com a RFC-1034, usar apenas letras minúsculas, números e hifens e ter um comprimento máximo de 63 caracteres. Além disso, o primeiro caractere precisa ser uma letra, e o último, uma letra ou um número.

      • Para corresponder a solicitações em que a cadeia de extensão é executada, em Condição de correspondência, especifique uma expressão da Common Expression Language (CEL), por exemplo, request.host == "example.com".

        Para mais informações sobre expressões CEL, clique em Receber ajuda com a sintaxe ou consulte a referência da linguagem de correspondência da CEL.

      • Adicione uma ou mais extensões para executar em uma solicitação correspondente.

        Para cada extensão, em Extensões, faça o seguinte e clique em Concluído:

        • Em Tipo de programação, selecione Plug-ins.

        • Em Nome da extensão, especifique um nome exclusivo.

          O nome precisa estar em conformidade com a RFC-1034, usar apenas letras minúsculas, números e hifens e ter um comprimento máximo de 63 caracteres. Além disso, o primeiro caractere precisa ser uma letra e o último caractere precisa ser uma letra ou um número.

        • Em Plug-in, selecione um plug-in criado usando as extensões de serviço para o mesmo produto e tipo de extensão.

        • Em Eventos, selecione um ou mais tipos de eventos HTTP que chamam a extensão.

        • Em Encaminhar cabeçalhos, clique em Adicionar cabeçalho e adicione cabeçalhos HTTP para encaminhar à extensão (do cliente ou do back-end). Se um cabeçalho não for especificado, todos os cabeçalhos serão enviados.

        • Opcional: se a extensão atingir o tempo limite ou falhar e você quiser que o processamento de solicitações ou respostas continue, selecione Ativado em Falha aberta. As extensões subsequentes na cadeia também são executadas.

          Por padrão, a opção Falha ao abrir não está selecionada. Nesse caso, quando ocorre um erro, o processamento da solicitação ou da resposta é interrompido. Se os cabeçalhos de resposta não tiverem sido entregues ao cliente downstream, um código de status HTTP 500 genérico será retornado ao cliente. Se os cabeçalhos de resposta tiverem sido entregues, o fluxo HTTP para o cliente será redefinido.

          A opção padrão de manter Falha aberta desmarcada é preferível ao priorizar a segurança ou a integridade. Ativar a opção Falha aberta, principalmente para operações não críticas, ajuda a priorizar a disponibilidade.

    10. Clique em Criar extensão.

    gcloud

    1. Defina o plug-in em um arquivo YAML e associe-o a uma regra de encaminhamento. Por exemplo, http-content-rule.

      cat >traffic-plugin.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/http-content-rule
          loadBalancingScheme: EXTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext1'
              service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN
              failOpen: false
              supportedEvents:
              - RESPONSE_HEADERS
      EOF
      

      Substitua:

      • O ID do projeto.PROJECT_ID
      • REGION: a região da regra de encaminhamento. O valor precisa corresponder ao especificado para o local do plug-in.
      • LOCATION: o local do plug-in como global ou uma região.
      • WASM_PLUGIN: o ID ou o nome totalmente qualificado do plug-in.
    2. Importe a extensão de tráfego. Use o comando gcloud service-extensions lb-traffic-extensions import com os seguintes valores de exemplo.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic-plugin.yaml \
          --location=global
      

    Depois que uma extensão de tráfego é criada, leva um tempo para o novo plug-in ser distribuído em todos os locais. O tempo pode variar entre os locais porque o plug-in não é entregue a todos os locais simultaneamente.

  3. Para verificar se a extensão de tráfego funciona conforme o esperado, use o mesmo comando curl:

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    A saída inclui o cabeçalho de resposta hello: service-extensions.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    

    Para validar se a extensão segmenta apenas o tráfego example.com, repita o comando curl sem o cabeçalho host.

    curl -D - FORWARDING_RULE_IP
    

    O resultado será o seguinte:

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    

Configurar extensões de tráfego para serviços gerenciados pelo usuário usando frases de destaque

Nesta seção, mostramos como configurar uma extensão de tráfego para um serviço de back-end de callout gerenciado pelo usuário usando um callout.

Antes de começar

Crie os recursos necessários, conforme descrito em Configurar um serviço de back-end de callout.

Configurar uma extensão de tráfego usando um destaque

O exemplo a seguir ajuda você a configurar uma extensão de tráfego usando uma destaque para chamar quando o host corresponder a example.com. O servidor de extensão de tráfego no callout-vm adiciona um cabeçalho de resposta, hello: service-extensions, às solicitações correspondentes.

  1. Verifique se há uma correspondência para example.com no mapa de URL.

    1. Execute o seguinte comando curl na regra de encaminhamento da VM do cliente:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      Substitua FORWARDING_RULE_IP pelo endereço IP da regra de encaminhamento. Para encontrar o endereço IP, use o comando gcloud compute forwarding-rules describe.

      O resultado será o seguinte:

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
      Page served from: l7-ilb-backend-example-1c7t
      
  2. Configure a extensão de trânsito.

    Console

    1. No console do Google Cloud , acesse a página Extensões de serviço.

      Acessar Extensões de serviço

    2. Clique em Criar extensão.

      Um assistente vai abrir para orientar você nas etapas iniciais.

    3. Para o produto, selecione Load Balancing. Em seguida, clique em Continuar.

      Uma lista de balanceadores de carga de aplicativo compatíveis aparece.

    4. Selecione um tipo de balanceador de carga. Para balanceadores de carga regionais, especifique também a região. Clique em Continuar.

    5. No tipo de extensão, selecione Extensões de tráfego e clique em Continuar.

    6. Para abrir o formulário Criar extensão, clique em Continuar.

      No formulário Criar extensão, observe que as seleções anteriores, que aparecem na parte de cima da página, não podem ser editadas.

    7. Na seção Noções básicas, faça o seguinte:

      1. Especifique um nome exclusivo para a extensão.

        O nome precisa começar com uma letra minúscula seguida por até 62 letras minúsculas, números ou hifens e não pode terminar com um hífen.

      2. Opcional: digite uma breve descrição sobre a extensão usando até 1.024 caracteres.

      3. Opcional: na seção Rótulos, clique em Adicionar rótulo. Em seguida, na linha que aparece, faça o seguinte:

        • Em Chave, insira um nome de chave.
        • Em Valor, insira um valor para a chave.

        Para adicionar mais pares de chave-valor, clique em Adicionar rótulo. É possível adicionar no máximo 64 pares de chave-valor.

        Para mais informações sobre rótulos, consulte Criar e atualizar rótulos para projetos.

    8. Em Regras de encaminhamento, selecione uma ou mais regras de encaminhamento para associar à extensão, por exemplo, l7-ilb-forwarding-rule.

      As regras de encaminhamento já associadas a outra extensão não podem ser selecionadas e aparecem como indisponíveis.

    9. Para Cadeias de extensão, adicione uma ou mais cadeias de extensão para executar em uma solicitação correspondente.

      Para adicionar uma cadeia de extensões, faça o seguinte e clique em Concluído:

      • Em Tipo de programação, selecione Callouts.

      • Em Novo nome da cadeia de extensão, especifique um nome exclusivo.

        O nome precisa estar em conformidade com a RFC-1034, usar apenas letras minúsculas, números e hifens e ter um comprimento máximo de 63 caracteres. Além disso, o primeiro caractere precisa ser uma letra, e o último, uma letra ou um número.

      • Para corresponder a solicitações em que a cadeia de extensão é executada, em Condição de correspondência, especifique uma expressão da Common Expression Language (CEL), por exemplo, request.host == "example.com".

        Para mais informações sobre expressões CEL, clique em Receber ajuda com a sintaxe ou consulte a referência da linguagem de correspondência da CEL.

      • Adicione uma ou mais extensões para executar em uma solicitação correspondente.

        Para cada extensão, em Extensões, faça o seguinte e clique em Concluído:

        • Em Nome da extensão, especifique um nome exclusivo.

          O nome precisa estar em conformidade com a RFC-1034, usar apenas letras minúsculas, números e hifens e ter um comprimento máximo de 63 caracteres. Além disso, o primeiro caractere precisa ser uma letra e o último caractere precisa ser uma letra ou um número.

        • Para Autoridade, insira o cabeçalho authority da solicitação gRPC enviada do balanceador de carga para o serviço de extensão.

        • Em Serviço de back-end, selecione um serviço de back-end criado seguindo as instruções em Configurar um serviço de back-end de callout.

        • Para Tempo limite, especifique um valor entre 10 e 1.000 milissegundos após o qual uma mensagem na transmissão expira.

        • Em Eventos, selecione um ou mais tipos de eventos HTTP que chamam a extensão.

        • Em Encaminhar cabeçalhos, clique em Adicionar cabeçalho e adicione cabeçalhos HTTP para encaminhar à extensão (do cliente ou do back-end). Se um cabeçalho não for especificado, todos os cabeçalhos serão enviados.

        • Opcional: se a extensão atingir o tempo limite ou falhar e você quiser que o processamento de solicitações ou respostas continue, selecione Ativado em Falha aberta. As extensões subsequentes na cadeia também são executadas.

          Por padrão, a opção Falha ao abrir não está selecionada. Nesse caso, quando ocorre um erro, o processamento da solicitação ou da resposta é interrompido. Se os cabeçalhos de resposta não tiverem sido entregues ao cliente downstream, um código de status HTTP 500 genérico será retornado ao cliente. Se os cabeçalhos de resposta tiverem sido entregues, o fluxo HTTP para o cliente será redefinido.

          A opção padrão de manter Falha aberta desmarcada é preferível ao priorizar a segurança ou a integridade. Ativar a opção Falha aberta, principalmente para operações não críticas, ajuda a priorizar a disponibilidade.

        • Em Metadados, clique em Adicionar metadados e especifique valores de amostra conforme sugerido. Em Chave, especifique key e em Valor, especifique value.

          Clique em Adicionar metadados para adicionar outro par de chave-valor. Em Chave, especifique fr e em Valor, especifique forwarding_rule_id.

          O campo Metadados permite transmitir informações adicionais do balanceador de carga para o servidor de extensão. Os metadados são enviados em uma mensagem ProcessingRequest e codificados como protobuf.Struct. Qualquer texto nos metadados que corresponda ao ID da regra de encaminhamento especificada será substituído pelo URL do recurso totalmente qualificado da regra de encaminhamento associada à solicitação do cliente.

          O tamanho total dos metadados precisa ser inferior a 1 KiB. O número total de chaves nos metadados precisa ser menor que 20. O comprimento de cada chave precisa ser menor que 64 caracteres. O comprimento de cada valor precisa ser menor que 1.024 caracteres. Todos os valores precisam ser strings.

    10. Clique em Criar extensão.

    gcloud

    1. Defina o destaque em um arquivo YAML e associe-o à regra de encaminhamento. Use os valores de amostra fornecidos.

      cat >traffic.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/l7-ilb-forwarding-rule
          loadBalancingScheme: INTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext11'
              authority: ext11.com
              service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-callout-service
              failOpen: false
              timeout: 0.1s
              metadata:
                "key": "value"
                "fr": "forwarding_rule_id"
              supportedEvents:
              - RESPONSE_HEADERS
      EOF
      

      Substitua PROJECT_ID pelo ID do projeto.

      O campo metadata na configuração da extensão permite transmitir qualquer informação adicional do balanceador de carga para o servidor de extensão. Os metadados são enviados em uma mensagem ProcessingRequest e codificados como protobuf.Struct. Qualquer texto nos metadados que corresponda ao ID da regra de encaminhamento especificada é substituído pelo URL do recurso totalmente qualificado da regra de encaminhamento associada à solicitação do cliente.

      O tamanho total de metadata precisa ser menor que 1 KiB. O número total de chaves nos metadados precisa ser menor que 16. O comprimento de cada chave precisa ser menor que 64 caracteres. O comprimento de cada valor precisa ser menor que 1.024 caracteres. Todos os valores precisam ser strings.

    2. Importe a extensão de tráfego. Use o comando gcloud service-extensions lb-traffic-extensions import com os seguintes valores de exemplo.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic.yaml \
          --location=us-west1
      
  3. Verifique se a extensão de tráfego funciona conforme o esperado. Use o mesmo comando curl:

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    A saída inclui o cabeçalho de resposta hello: service-extensions.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

    Para validar se a extensão segmenta apenas o tráfego example.com, repita o comando curl sem o cabeçalho host.

    curl -D - FORWARDING_RULE_IP
    

    O resultado será o seguinte:

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

A seguir