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 rota são executadas no caminho de processamento de solicitações quando o balanceador de carga recebe cabeçalhos de solicitação e antes de avaliar o mapa de URL. Nesta página, descrevemos como configurar extensões de rota.
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 rota 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 rota agrupa serviços de extensão relacionados em uma cadeia. É possível configurar plug-ins e indicadores na mesma cadeia de extensão. A cadeia de extensões 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 às condições de correspondência de uma 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.
A extensão 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 às extensões do balanceador de carga de aplicativo, consulte a página Cotas e limites.
Configurar usando plug-ins
Esta seção usa um exemplo para mostrar como configurar uma extensão de rota
usando um plug-in que reescreve o cabeçalho de solicitação :host para
service-extensions.com quando o caminho corresponde a /extensions. O host anterior e o recém-configurado são mapeados para serviços de back-end em regiões diferentes, o que demonstra o comportamento de roteamento.
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 rota.
Siga as instruções na página Configurar um balanceador de carga de aplicativo interno entre regiões com back-ends de grupo de instâncias de VM para todas as etapas, exceto as seguintes:
- Nomeie o serviço de back-end como
service-one. - Aponte
service-onepara uma instância de máquina virtual (VM) na regiãoA. - Aponte
gl7-gilb-url-mapparaservice-onepor padrão.
- Nomeie o serviço de back-end como
Configure um serviço de back-end adicional,
service-two, e direcione-o para uma VM na regiãoB.Adicione ao mapa de URL uma correspondência de caminho que direcione para
service-two. Use o comandogcloud compute url-maps add-path-matchercom os seguintes valores de exemplo:gcloud compute url-maps add-path-matcher gl7-gilb-url-map \ --path-matcher-name=rewrite-host \ --default-service=service-two \ --new-hosts=service-extensions.com \ --location=globalConfigure uma maneira de enviar solicitações de teste ao seu 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 rota usando um plug-in
Verifique o comportamento antes de configurar uma extensão.
Verifique se uma solicitação sem um caminho explícito vai para a região
A:curl 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.A saída é semelhante a esta e indica que a página é servida de uma VM em
region A:Page served from region-A-vmVerifique se não há correspondência para
/extensionsno mapa de URL:curl FORWARDING_RULE_IP/extensions
Substitua
FORWARDING_RULE_IPpelo endereço IP da regra de encaminhamento. Para encontrar o endereço IP, use o comandogcloud compute forwarding-rules describe.A saída indica que não há correspondência para
/extensionsno mapa de URL. O resultado será o seguinte:<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> ...
Configure a extensão de rota.
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 "Balanceador de carga de aplicativo interno entre regiões". Depois clique em Continuar.
Para o tipo de extensão, selecione Extensões de rota 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: insira uma breve descrição sobre a extensão usando no máximo 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 para associar à extensão, por exemplo,
cr-ilb-forwarding-rule.As regras de encaminhamento já associadas a outra extensão não podem ser selecionadas e aparecem desativadas.
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.path.startsWith("/extensions").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 extensão para executar uma solicitação correspondente. Para extensões de rota, é possível especificar apenas uma 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, 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 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.
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 global. Por exemplo,
cr-ilb-forwarding-rule.cat >route-plugin.yaml <<EOF name: route-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/cr-ilb-forwarding-rule loadBalancingScheme: INTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.path.startsWith("/extensions")' extensions: - name: 'ext1' service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN failOpen: false supportedEvents: - REQUEST_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 rota. Use o comando
gcloud service-extensions lb-route-extensions importcom os seguintes valores de exemplo.gcloud service-extensions lb-route-extensions import route-ext \ --source=route-plugin.yaml \ --location=global
Depois que uma extensão de rota é 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 rota funciona conforme o esperado, use o mesmo comando
curl:curl FORWARDING_RULE_IP/extensions
A saída é semelhante a esta e indica que a página é servida de uma VM em
region B:Page served from region-B-vmPara verificar se o plug-in é executado apenas para solicitações com o prefixo de caminho
/extension, repita o comandocurlsem um caminho.curl FORWARDING_RULE_IP
O resultado será o seguinte:
Page served from region-A-vm
Configurar usando frases de destaque
Nesta seção, mostramos como configurar uma extensão de rota usando uma 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 rota usando uma frase de destaque
O exemplo a seguir mostra como configurar uma extensão de rota para chamar quando o
caminho corresponder a /extensions. O servidor de destaque de rota em callout-vm
muda o cabeçalho Host para service-extensions.com, define o caminho
como / e envia uma instrução ao balanceador de carga para recalcular
a rota. O tráfego flui para l7-ilb-backend-service2 em vez de l7-ilb-backend-service.
Verifique se há uma correspondência para
/extensionsno mapa de URL.Execute o seguinte comando
curlna regra de encaminhamento da VM do cliente:curl FORWARDING_RULE_IP/extensions
Substitua
FORWARDING_RULE_IPpelo endereço IP da regra de encaminhamento. Para encontrar o endereço IP, use o comandogcloud compute forwarding-rules describe.A saída indica que não há correspondência para
/extensionsno mapa de URL. O resultado será o seguinte:<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> ...
Configure a extensão de rota.
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.
Para o tipo de extensão, selecione Extensões de rota 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: insira uma breve descrição sobre a extensão usando no máximo 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 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 desativadas.
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.path.startsWith("/extensions").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 extensão para executar uma solicitação correspondente. Para extensões de rota, é possível especificar apenas uma extensão.
Em Extensões, faça o seguinte e clique em Concluído:
Em Tipo de programação, selecione Callouts.
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, 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.
Em Tempo limite, especifique um valor entre 10 e 1.000 milissegundos. Depois disso, uma mensagem no fluxo vai atingir o tempo limite enquanto o balanceador de carga ainda aguarda uma resposta do serviço
ext_proc.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 16. O comprimento de cada chave precisa ser menor que 64 caracteres. O tamanho 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 >route.yaml <<EOF name: route-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.path.startsWith("/extensions")' 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" 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 tamanho de cada valor precisa ser menor que 1.024 caracteres. Todos os valores precisam ser strings.Importe a extensão de rota. Use o comando
gcloud service-extensions lb-route-extensions importcom os seguintes valores de exemplo.gcloud service-extensions lb-route-extensions import route-ext \ --source=route.yaml \ --location=us-west1
Verifique se a extensão de rota funciona conforme o esperado. Use o mesmo comando
curl:curl FORWARDING_RULE_IP/extensions
A saída indica que o tráfego correspondeu ao host virtual
service-extensions.come chegou ao serviçol7-ilb-backend-service2mesmo que a solicitação original não tenha feito isso. O resultado será assim:Page served from second backend servicePara validar se o callout está segmentando apenas solicitações com o prefixo
/extension, repita o comandocurlsem o prefixopath.curl FORWARDING_RULE_IP
O resultado será o seguinte:
Page served from: l7-ilb-backend-example-1c7t
Limitações para extensões de rota
- As extensões de rota não são compatíveis com o processamento de corpo HTTP.
- Uma resposta direta da extensão ao cliente não é compatível com extensões de rota. Se o servidor de extensão de rota responder a uma solicitação de processamento com uma resposta que contenha uma resposta direta, o balanceador de carga vai ignorar a resposta de processamento.
Para limitações aplicáveis a todas as extensões, consulte Limitações das extensões.
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 tráfego
- Gerenciar extensões
- Gerenciar plug-ins