Com as extensões de serviço, os balanceadores de carga de aplicativo compatíveis podem usar plug-ins para inserir processamento personalizado no caminho de processamento. As extensões de borda são executadas no caminho de tratamento de solicitações quando o balanceador de carga recebe cabeçalhos de solicitação e antes de avaliar o mapa de URL ou chamar o Cloud CDN, o que permite influenciar o armazenamento em cache e o roteamento. Nesta página, descrevemos como configurar extensões de borda.
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 para um balanceador de carga de aplicativo aponta para os seguintes recursos:
- Uma regra de encaminhamento para anexar
- Um plug-in
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. Você pode anexar apenas uma extensão de borda a uma regra de encaminhamento e incluir apenas um plug-in em uma cadeia de extensão de borda.
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
Nesta seção, usamos um exemplo para mostrar como configurar uma extensão de borda 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 borda.
Siga as instruções na página Configurar um balanceador de carga de aplicativo externo global com back-ends de grupos 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-gxlb-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-gxlb-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).
Configurar uma extensão de borda 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 borda.
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 externo global". Depois clique em Continuar.
Para o tipo de extensão, selecione Extensões do Edge 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 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-xlb-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").As extensões do Edge permitem usar apenas uma expressão regular por expressão CEL.
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 borda, é 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: para Falha aberta, se você quiser que a extensão falhe aberta, selecione Ativada. Nesse caso, se a chamada para a extensão falhar ou atingir o tempo limite, o processamento da solicitação ou da resposta vai continuar sem erros. Todas as extensões subsequentes na cadeia de extensão também são executadas.
Por padrão, o campo Falha aberta não é selecionado. Nesse caso, 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 downstream será redefinido.
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-xlb-forwarding-rule.cat >edge-plugin.yaml <<EOF name: edge-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/global/forwardingRules/cr-xlb-forwarding-rule loadBalancingScheme: EXTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.path.startsWith("/extensions")' extensions: - name: 'ext1' service: projects/PROJECT_ID/locations/global/wasmPlugins/WASM_PLUGIN failOpen: false supportedEvents: - REQUEST_HEADERS EOFSubstitua:
PROJECT_ID: o ID do projetoWASM_PLUGIN: o ID ou o nome totalmente qualificado do plug-in
As extensões do Edge permitem usar apenas uma expressão regular por expressão CEL.
Importe a extensão de borda. Use o comando
gcloud service-extensions lb-edge-extensions importcom os seguintes valores de exemplo:gcloud service-extensions lb-edge-extensions import edge-ext \ --source=edge-plugin.yaml \ --location=global
Depois que uma extensão de borda é 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 borda 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
Limitações para extensões de borda
- Só é possível anexar uma extensão de borda a uma regra de encaminhamento.
- As extensões do Edge não são compatíveis com o processamento de corpo HTTP.
- As extensões do Edge permitem usar apenas uma expressão regular por expressão CEL.
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.
- Gerenciar extensões