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
Crie um plug-in que contenha seu código personalizado.
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.
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.
Verifique se há uma correspondência para
example.comno mapa de URL.Execute o seguinte comando
curlna regra de encaminhamento da VM do cliente:curl -D - -H "host: example.com" FORWARDING_RULE_IP
Substitua
FORWARDING_RULE_IPpelo endereço IP da regra de encaminhamento. Para encontrar o endereço IP, use o comandogcloud 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
Configure a extensão de trânsito.
Console
No console do Google Cloud , acesse a página Extensões de serviço.
Clique em Criar extensão.
Um assistente vai abrir para orientar você nas etapas iniciais.
Para o produto, selecione Load Balancing. Em seguida, clique em Continuar.
Uma lista de balanceadores de carga de aplicativo compatíveis aparece.
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.
No tipo de extensão, selecione Extensões de tráfego e clique em Continuar.
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.
Na seção Noções básicas, faça o seguinte:
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.
Opcional: digite uma breve descrição sobre a extensão usando até 1.024 caracteres.
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.
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.
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
500gené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.
Clique em Criar extensão.
gcloud
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 EOFSubstitua:
- 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 comoglobalou uma região.WASM_PLUGIN: o ID ou o nome totalmente qualificado do plug-in.
- O ID do projeto.
Importe a extensão de tráfego. Use o comando
gcloud service-extensions lb-traffic-extensions importcom 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.
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 googlePara validar se a extensão segmenta apenas o tráfego
example.com, repita o comandocurlsem o cabeçalhohost.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.
Verifique se há uma correspondência para
example.comno mapa de URL.Execute o seguinte comando
curlna regra de encaminhamento da VM do cliente:curl -D - -H "host: example.com" FORWARDING_RULE_IP
Substitua
FORWARDING_RULE_IPpelo endereço IP da regra de encaminhamento. Para encontrar o endereço IP, use o comandogcloud 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
Configure a extensão de trânsito.
Console
No console do Google Cloud , acesse a página Extensões de serviço.
Clique em Criar extensão.
Um assistente vai abrir para orientar você nas etapas iniciais.
Para o produto, selecione Load Balancing. Em seguida, clique em Continuar.
Uma lista de balanceadores de carga de aplicativo compatíveis aparece.
Selecione um tipo de balanceador de carga. Para balanceadores de carga regionais, especifique também a região. Clique em Continuar.
No tipo de extensão, selecione Extensões de tráfego e clique em Continuar.
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.
Na seção Noções básicas, faça o seguinte:
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.
Opcional: digite uma breve descrição sobre a extensão usando até 1.024 caracteres.
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.
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.
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
authorityda 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
500gené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
keye em Valor, especifiquevalue.Clique em Adicionar metadados para adicionar outro par de chave-valor. Em Chave, especifique
fre em Valor, especifiqueforwarding_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
ProcessingRequeste codificados comoprotobuf.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.
Clique em Criar extensão.
gcloud
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 EOFSubstitua
PROJECT_IDpelo ID do projeto.O campo
metadatana 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 mensagemProcessingRequeste codificados comoprotobuf.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
metadataprecisa 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.Importe a extensão de tráfego. Use o comando
gcloud service-extensions lb-traffic-extensions importcom os seguintes valores de exemplo.gcloud service-extensions lb-traffic-extensions import traffic-ext \ --source=traffic.yaml \ --location=us-west1
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-1c7tPara validar se a extensão segmenta apenas o tráfego
example.com, repita o comandocurlsem o cabeçalhohost.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
- Visualize exemplos de plug-ins em Rust, Go e C++ e ferramentas de teste no repositório do GitHub do Service Extensions para plug-ins.
- Confira exemplos de servidores
ext_procem Python e Go no repositório do GitHub do Service Extensions para callouts. - Configurar extensões de rota
- Gerenciar extensões
- Gerenciar plug-ins
- Configurar uma extensão para um serviço do Google