Os balanceadores de carga HTTP(S) do Google Cloud e o Traffic Director usam um recurso de configuração do Google Cloud chamado mapa de URLs para encaminhar solicitações para serviços ou buckets de back-end.
Por exemplo, com um balanceador de carga HTTP(S) externo, é possível usar um único mapa de URL para rotear solicitações para destinos diferentes com base nas regras configuradas no mapa de URL:
- As solicitações de
https://example.com/video
vão para um serviço de back-end. - As solicitações de
https://example.com/audio
vão para um serviço de back-end diferente - As solicitações de
https://example.com/images
vão para um bucket de back-end do Cloud Storage. - As solicitações de qualquer outra combinação de host e caminho vão para um serviço de back-end padrão.
Os mapas de URL são usados com estes produtos do Google Cloud:
Há dois tipos de recursos de mapa de URL disponíveis: globais e regionais. O tipo de recurso usado depende do esquema de balanceamento de carga do produto.
Produto | Esquema de balanceamento de carga | Tipo de recurso do mapa de URL | Destinos possíveis |
---|---|---|---|
Balanceador de carga HTTP(S) externo | EXTERNAL |
Global e externo | Serviços de back-end, buckets de back-end |
Balanceador de carga HTTP(S) interno | INTERNAL_MANAGED |
Regional e interno | Serviços de back-end |
Traffic Director | INTERNAL_SELF_MANAGED |
Global e interno | Serviços de back-end |
Nem todos os recursos do mapa de URL estão disponíveis para todos os produtos. Os mapas de URL usados com balanceamento de carga HTTP(S) interno e Traffic Director também são compatíveis com vários recursos avançados de gerenciamento de tráfego. Para mais informações sobre essas diferenças, consulte Gerenciamento avançado de tráfego.
Como os mapas de URL funcionam
Quando uma solicitação chega ao balanceador de carga, ele a direciona para um serviço de back-end específico ou para um bucket de back-end com base nas regras definidas no mapa de URL.
Um serviço de back-end representa um conjunto de back-ends, que são instâncias de um aplicativo ou microsserviço. Um bucket de back-end é um bucket do Cloud Storage, normalmente usado para hospedar conteúdo estático, como imagens.
Para balanceadores de carga HTTP(S) externos, balanceadores de carga HTTP(S) internos e Traffic Director, os destinos possíveis são:
- Serviço de back-end padrão
- Serviço de back-end não padrão
Além disso, um balanceador de carga HTTP(S) externo é compatível com o seguinte:
- Bucket de back-end padrão
- Bucket de back-end não padrão
Por exemplo, suponha que você tenha a seguinte configuração:
- Um endereço IP:
- Todas as solicitações à sua organização vão para o mesmo endereço IP e o mesmo balanceador de carga.
- O tráfego é direcionado para diferentes serviços de back-end com base no URL da solicitação.
- Dois domínios:
example.net
hospeda vídeos de treinamento.example.org
hospeda o site da sua organização.
- Quatro conjuntos de servidores:
- Um hospeda o site da sua organização (serviço de back-end:
org-site
). - Um hospeda o site de vídeo de treinamento geral (serviço de back-end:
video-site
). - Um hospeda vídeos de treinamento em HD (serviço de back-end:
video-hd
). - Um hospeda vídeos de treinamento em definição padrão (serviço de back-end:
video-sd
).
- Um hospeda o site da sua organização (serviço de back-end:
Você quer que aconteça o seguinte:
- As solicitações para
example.org
ou qualquer domínio diferente deexample.net
para acessar o serviço de back-endorg-site
. - As solicitações para
example.net
que não correspondem a caminhos mais específicos para acessar o serviço de back-endvideo-site
. - Solicitações para
example.net/video/hd/*
para acessar o serviço de back-endvideo-hd
. - Solicitações para
example.net/video/sd/*
para acessar o serviço de back-endvideo-sd
.
Com o mapa de URL, você configura esse tipo de roteamento baseado em host e caminho.
Nomenclatura
Cada mapa de URL tem um nome. Quando você cria um balanceador de carga baseado em HTTP(S) por meio
do Console do Google Cloud, um nome é atribuído ao mapa de URL. Ele é igual ao
nome do balanceador de carga. Se você usa a ferramenta de linha de comando gcloud
ou a API, é possível
definir um nome personalizado para o mapa de URL.
Componentes do mapa de URL
Um mapa de URL é um conjunto de recursos de configuração do Google Cloud que direciona solicitações de URLs para serviços ou buckets de back-end. O mapa de URL faz isso usando as partes hostname e path de cada URL processado:
- O nome do host é a parte do nome de domínio de um URL.
Por exemplo, a parte do nome do host do URL
http://example.net/video/hd
éexample.net
. - Um caminho é a parte de um URL após o nome do host e o número da porta
opcional. Por exemplo, a parte do caminho do URL
http://example.net/video/hd
é/video/hd
.
Este diagrama mostra a estrutura dos objetos de configuração de balanceamento de carga um em relação ao outro.
Você controla quais serviços ou buckets de back-end recebem solicitações de entrada usando os seguintes parâmetros de configuração do mapa de URL:
Serviço ou bucket de back-end padrão. Ao criar um mapa de URL, você precisa especificar um serviço ou bucket de back-end padrão, mas não ambos. Esse padrão representa o serviço ou bucket de back-end a que o Google Cloud encaminhará as solicitações de URLs com qualquer nome de host, a menos que haja uma regra de host aplicável.
Regra de host (
hostRules
). Uma regra de host direciona as solicitações enviadas para um ou mais nomes de host associados a uma única correspondência de caminho (pathMatchers
). A parte do nome do host de um URL corresponde exatamente ao conjunto de nomes do host configurados da regra de host. Em um host de mapa de URL e uma regra de caminho, se você omitir o host, a regra corresponderá a qualquer host solicitado. Para direcionar as solicitações dehttp://example.net/video/hd
para uma correspondência de caminho, você precisa de uma única regra de host que inclua, no mínimo, o nome de hostexample.net
. Essa mesma regra de host também pode processar solicitações de outros nomes de host, mas isso as direciona para a mesma correspondência de caminho.Se você precisar direcionar solicitações para diferentes correspondências de caminho, use regras de host distintas. Duas regras de host em um mapa de URL não podem incluir o mesmo nome de host.
Para corresponder todos os nomes de host, especifique o caractere curinga
*
na regra de host. Por exemplo, para os URLshttp://example.org
,http://example.net/video/hd
ehttp://example.com/audio
, é possível corresponder os três nomes de hostexample.org
,example.net
eexample.com
especificando*
na regra de host. Também é possível corresponder um nome de host parcial com o caractere curinga*
. Por exemplo, uma regra de host*.example.net
corresponde aos dois nomes de hostfoo.example.net
ebar.example.net
.- Número da porta. Você também pode usar o parâmetro Regra de host para especificar um
número de porta. Por exemplo, para direcionar solicitações
example.net
para a porta 8080, defina a regra de host comoexample.net:8080
.
- Número da porta. Você também pode usar o parâmetro Regra de host para especificar um
número de porta. Por exemplo, para direcionar solicitações
Correspondência de caminho
pathMatchers
: parâmetro de configuração referenciado por uma regra de host. Ela define o vínculo entre a parte do caminho de um URL e o serviço ou bucket de back-end que veiculará a solicitação. Uma correspondência de caminho consiste em dois elementos:Serviço ou bucket de back-end padrão da correspondência de caminho. Para cada correspondência de caminho, você precisa especificar pelo menos um serviço ou um bucket de back-end padrão, mas não ambos. Esse padrão representa o serviço ou bucket de back-end a que o Google Cloud encaminhará solicitações de URLs com nomes de host que correspondem a uma regra de host associada à correspondência de caminho. Isso também inclui caminho do URL que não correspondem a qualquer regra de caminho na correspondência.
Regras de caminho. Para cada correspondência de caminho, é possível especificar uma ou mais regras de caminho. Elas são pares de chave-valor que mapeiam um caminho do URL para um único serviço ou bucket de back-end. Veja na próxima seção mais informações sobre como as regras de caminho funcionam.
Ordem de operações
Para um determinado nome de host e caminho em um URL solicitado, o Google Cloud usa o procedimento a seguir para direcionar a solicitação ao serviço ou bucket de back-end correto, conforme configurado no mapa de URL:
Se o mapa de URL não tiver uma regra de host para o nome de host do URL, o Google Cloud encaminhará as solicitações ao serviço ou bucket de back-end padrão do mapa de URL, dependendo de qual você definiu.
Se o mapa de URL tiver uma regra de host que inclua o nome de host do URL, a correspondência de caminho referenciada por essa regra de host será consultada:
Se a correspondência de caminho tiver uma regra que corresponda exatamente ao caminho do URL, o Google Cloud encaminhará as solicitações ao serviço ou bucket de back-end dessa regra.
Se a correspondência de caminho não tiver uma regra que corresponda exatamente ao caminho do URL, mas tiver outra terminada em
/*
com um prefixo que corresponda à seção mais longa do caminho do URL, o Google Cloud encaminhará as solicitações ao serviço ou bucket de back-end dessa regra. Por exemplo, para o mapa de URL que contém duas regras de correspondência de caminho/video/hd/movie1
e/video/hd/*
, se o URL tiver o caminho exato/video/hd/movie1
, ele será correspondido com essa regra de caminho.Se nenhuma das condições anteriores for verdadeira, o Google Cloud encaminhará as solicitações ao serviço ou bucket de back-end padrão da correspondência de caminho, dependendo de qual você definiu.
Restrições da correspondência de caminho
As correspondências e regras de caminho têm as seguintes restrições:
Uma regra de caminho pode incluir apenas um caractere curinga (
*
) após um caractere de barra (/
). Por exemplo,/videos/*
e/videos/hd/*
são válidos para regras de caminho, mas/videos*
e/videos/hd*
não.As regras de caminho não usam correspondência de expressões regulares ou substrings. Por exemplo, regras de caminho para
/videos/hd
ou/videos/hd/*
não se aplicam a um URL com o caminho/video/hd-abcd
. No entanto, uma regra de caminho para/video/*
se aplica a esse caminho.As correspondências de caminho (e mapas de URL, em geral) não oferecem recursos que funcionam como as diretivas
LocationMatch
do Apache. Se você tem um aplicativo que gera caminhos de URL dinâmico com um prefixo comum, como/videos/hd-abcd
e/videos/hd-pqrs
, e precisa enviar as solicitações feitas a esses caminhos para diferentes serviços de back-end, talvez não seja possível fazer isso sem um mapa de URL. Em casos simples que contêm somente alguns URLs dinâmicos possíveis, talvez seja possível criar uma correspondência de caminho com o conjunto limitado de regras de caminho. Nos casos mais complexos, é necessário fazer a correspondência de expressões regulares baseadas em caminhos nos back-ends.
Um nome de host só pode referenciar uma única regra de host, e uma regra de host só pode referenciar uma única correspondência de caminho. No entanto, uma única regra de host pode processar vários nomes de host, e várias regras de host podem referenciar uma única correspondência de caminho. Assim, cada URL exclusivo é direcionado a apenas um serviço ou bucket de back-end:
O Google Cloud usa a parte do nome de host de um URL para selecionar uma única regra de host e a correspondência de caminho referenciada.
Na correspondência de caminho, não é possível criar mais de uma regra para o mesmo caminho. Por exemplo, não é possível direcionar solicitações de
/videos/hd
para mais de um serviço ou bucket de back-end. Os serviços de back-end podem ter grupos de instâncias de back-end ou grupos de endpoints de rede (NEGs, na sigla em inglês) de back-end em diferentes zonas e regiões. Além disso, é possível criar buckets de back-end que usam classes do Multi-Regional Storage.
Mapas e protocolos de URL
É possível usar o mesmo mapa de URL, regras de host e correspondências de caminho para processar solicitações HTTP e HTTPS enviadas por clientes. Para isso, os proxies HTTP e HTTPS de destino precisam referenciar o mapa de URL.
É possível usar um mapa de URLs para configurar o redirecionamento, conforme mostrado nos guias a seguir:
- Como configurar o redirecionamento HTTP para HTTPS em balanceadores de carga HTTP(S) externos
- Como configurar o gerenciamento de tráfego para balanceadores de carga HTTP(S) internos
Mapa de URL mais simples
O mapa de URL mais simples tem apenas um serviço ou bucket de back-end padrão. Ele não contém regras de host nem correspondências de caminho. A opção que você definiu, seja serviço ou bucket de back-end padrão, processa todos os URLs solicitados.
Se você definir um serviço de back-end padrão, o Google Cloud encaminhará as solicitações para os grupos de instâncias de back-end ou NEGs de acordo com a configuração do serviço de back-end.
Exemplo de fluxo de trabalho de mapa de URLs com um balanceador de carga HTTP(S) externo
No exemplo a seguir, veja a ordem das operações de um mapa de URL. Este exemplo configura o mapa de URL para um balanceador de carga HTTP(S) externo. Para simplificar o conceito, ele usa apenas serviços de back-end. No entanto, é possível substituir por buckets de back-end. Para saber como criar os outros componentes do balanceador de carga HTTP(S) externo, consulte Como criar um balanceador de carga HTTP(S) externo.
Veja um exemplo de como criar um mapa de URL e os outros componentes de um balanceador de carga HTTP(S) interno em Como se preparar para a configuração do balanceamento de carga HTTP(S) interno.
Cada serviço de back-end discutido no exemplo a seguir tem um esquema de externo e usa o protocolo HTTP, HTTPS ou HTTP/2.
Crie um mapa de URL para o balanceador de carga e especifique um serviço de back-end padrão. Nesse exemplo, criamos um mapa de URL denominado
video-org-url-map
que referencia um serviço de back-end denominadoorg-site
.gcloud compute url-maps create video-org-url-map \ --default-service=org-site
Crie uma correspondência de caminho denominada
video-matcher
com as seguintes características:- O serviço de back-end padrão é
video-site
, um serviço de back-end atual. - Adicione regras de caminho que direcionem solicitações para o caminho de URL
/video/hd
exato ou o prefixo/video/hd/*
do caminho de URL para um serviço de back-end atual denominadovideo-hd
. - Adicione regras de caminho que direcionem solicitações para o caminho de URL
/video/sd
exato ou o prefixo/video/sd/*
do caminho de URL para um serviço de back-end atual denominadovideo-sd
.
gcloud compute url-maps add-path-matcher video-org-url-map \ --path-matcher-name=video-matcher \ --default-service=video-site \ --path-rules=/video/hd=video-hd,/video/hd/*=video-hd,/video/sd=video-sd,/video/sd/*=video-sd
- O serviço de back-end padrão é
Crie uma regra de host para o nome de host
example.net
que faça referência à correspondência de caminhovideo-matcher
.gcloud compute url-maps add-host-rule video-org-url-map \ --hosts=example.net \ --path-matcher-name=video-matcher
O URL video-org-url-map
terá esta aparência:
gcloud compute url-maps describe video-org-url-map
creationTimestamp: '2021-03-05T13:34:15.833-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/org-site fingerprint: mfyJIT7Zurs= hostRules: - hosts: - '*' pathMatcher: video-matcher - hosts: - example.net pathMatcher: video-matcher id: '8886405179645041976' kind: compute#urlMap name: video-org-url-map pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-site name: video-matcher pathRules: - paths: - /video/hd - /video/hd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-hd - paths: - /video/sd - /video/sd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-sd selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/video-org-url-map
O mapa de URL video-org-url-map
direciona os URLs solicitados para os back-ends da
maneira a seguir.
Veja na tabela a seguir a descrição do processamento da solicitação mostrado no diagrama anterior.
Nome do host | Caminhos de URL | Serviço de back-end selecionado | Motivo da seleção |
---|---|---|---|
O nome do host: example.org e todos os outros nomes de host
diferentes deexample.net |
todos os caminhos | org-site |
O nome de host não está em nenhuma regra de host do mapa de URL, portanto, a solicitação é direcionada para o serviço de back-end padrão do mapa de URL. |
Nome do host:example.net |
/video /video/examples |
video-site |
A solicitação vai para o serviço de back-end padrão porque não há nenhuma regra de caminho para /video/ ou /video/* . A regra de
host para example.net referencia uma correspondência de caminho,
mas ela não tem nenhuma regra que se aplica a
esses caminhos.
|
Nome do host:example.net |
/video/hd /video/hd/movie1 /video/hd/movies/movie2 Outros URLs que começam com /video/hd/* |
video-hd |
Uma regra de host para example.net referencia uma correspondência de caminho
com regras que direcionam as solicitações para caminhos do URL que correspondem exatamente a
/video/hd ou que começam com /video/hd/* para
o serviço de back-end video-hd . |
Nome do host:example.net |
/video/sd /video/sd/show1 /video/sd/shows/show2 Outros URLs que começam com /video/sd/* |
video-sd |
Uma regra de host para example.net referencia uma correspondência de caminho
com regras que direcionam as solicitações para caminhos do URL que correspondem exatamente a
/video/sd ou que começam com /video/sd/* para
o serviço de back-end video-sd . |
Redirecionamentos de URL
Um redirecionamento de URL redireciona os visitantes do domínio de um URL para outro.
Um redirecionamento de URL padrão não é condicionado na correspondência de um padrão específico na solicitação recebida. Por exemplo, é possível usar um redirecionamento de URL padrão para redirecionar qualquer nome de host para um nome de host de sua escolha.
Há várias maneiras de criar um redirecionamento de URL, conforme descrito na tabela a seguir.
Método | Configuration |
---|---|
Redirecionamento de URL padrão do mapa de URL | Alto nível defaultUrlRedirect |
Redirecionamento de URL padrão de uma correspondência de caminho | pathMatchers[].defaultUrlRedirect[] |
Redirecionamento de URL de uma regra de caminho de correspondência de caminho | pathMatchers[].pathRules[].urlRedirect |
Redirecionamento de URL da regra de rota de uma correspondência de caminho | pathMatchers[].routeRules[].urlRedirect |
Dentro de um defaultUrlRedirect
ou urlRedirect
, pathRedirect
sempre funciona
da seguinte maneira:
- Todo o caminho da solicitação é substituído pelo caminho especificado.
Dentro de um defaultUrlRedirect
ou urlRedirect
, a forma como o prefixRedirect
funciona
depende de como você o usa:
- Se você usar um
defaultUrlRedirect
,prefixRedirect
será efetivamente uma adição de prefixo porque o caminho correspondente é sempre/
. - Se você usar um
urlRedirect
na regra de rota ou na regra de caminho de uma correspondência de caminho,prefixRedirect
é um prefixo Substituição com base na correspondência do caminho solicitado conforme definido na regra de caminho ou na regra de rota.
Exemplos de redirecionamento
Veja na tabela a seguir alguns exemplos de configurações de redirecionamento. A coluna à direita mostra a configuração da API para um redirecionamento de URL padrão.
Você quer | Ativado usando um redirecionamento de URL padrão |
---|---|
Redirecionamento de HTTP para HTTPS Redirecionamento http://host.name/path para https://host.name/path |
kind: compute#urlMap name: web-map-http defaultUrlRedirect: httpsRedirect: True |
HTTP para HTTPS + redirecionamento de host Redirecionamento http://any-host-name/path para https://www.example.com/path |
kind: compute#urlMap name: web-map-http defaultUrlRedirect: httpsRedirect: True hostRedirect: "www.example.com" |
HTTP para HTTPS + redirecionamento de host + redirecionamento de caminho completo Redirecionamento http://any-host-name/path para https://www.example.com/newPath |
kind: compute#urlMap name: web-map-http defaultUrlRedirect: httpsRedirect: True hostRedirect: "www.example.com" pathRedirect: "/newPath" |
HTTP para HTTPS + redirecionamento de host + Redirecionamento de prefixo Redirecionamento http://any-host-name/originalPath para https://www.example.com/newPrefix/originalPath |
kind: compute#urlMap name: web-map-http defaultUrlRedirect: httpsRedirect: True hostRedirect: "www.example.com" prefixRedirect: "/newPrefix" |
O exemplo a seguir insere uma anotação em cada recurso da API.
kind: compute#urlMap name: web-map-http defaultUrlRedirect: redirectResponseCode: MOVED_PERMANENTLY_DEFAULT httpsRedirect: True # True if you want https://, false if you want http:// hostRedirect: "new-host-name.com" # Omit to keep the requested host pathRedirect: "/new-path" # Omit to keep the requested path; mutually exclusive to prefixRedirect prefixRedirect: "/newPrefix" # Omit to keep the requested path; mutually exclusive to pathRedirect stripQuery: False # True to omit everything in the URL after ? }, "defaultUrlRedirect": { "redirectResponseCode": enum, }
Para ver exemplos completos, consulte as páginas a seguir:
- Como configurar o redirecionamento de HTTP para HTTPS para balanceadores de carga HTTP(S) internos
- Como configurar o redirecionamento HTTP para HTTPS em balanceadores de carga HTTP(S) externos
Gerenciamento de tráfego avançado
Nem todos os recursos do mapa de URL estão disponíveis para todos os produtos. Os mapas de URL são usados com o balanceamento de carga HTTP(S) interno e o Traffic Director para aceitar vários recursos avançados de gerenciamento de tráfego. Nem todos eles são compatíveis com o balanceamento de carga HTTP(S) externo.
Use a tabela a seguir para descobrir quais recursos do mapa de URL estão disponíveis para cada produto. Cada produto tem tópicos dedicados para explicar como o gerenciamento de tráfego funciona e inclui exemplos de mapas de URLs para cada caso de uso.
Produto | Recursos de mapa de URL e guias de gerenciamento de tráfego |
---|---|
Balanceamento de carga HTTP(S) externo | Recursos do balanceador de carga: roteamento e gerenciamento de tráfego
Visão geral do gerenciamento de tráfego para balanceadores de carga HTTP(S) externos Como configurar o gerenciamento de tráfego para balanceadores de carga HTTP(S) externos |
Balanceamento de carga HTTP(S) interno | Recursos do balanceador de carga: roteamento e gerenciamento de tráfego
Visão geral do gerenciamento de tráfego para balanceadores de carga HTTP(S) internos Como configurar o gerenciamento de tráfego para balanceadores de carga HTTP(S) internos |
Traffic Director | Recursos do Traffic Director: roteamento e gerenciamento de tráfego |
Referência da API e do SDK do Cloud
Além do Console do Cloud, é possível usar a API e o SDK do Cloud para criar mapas de URL.
API
Veja descrições das propriedades e dos métodos disponíveis ao trabalhar com mapas de URL por meio da API REST em:
Produto | Documentação da API |
---|---|
Balanceamento de carga HTTP(S) externo | urlMaps |
Balanceamento de carga HTTP(S) interno | regionUrlMaps |
Traffic Director | urlMaps |
Cloud SDK
Para a ferramenta de linha de comando gcloud
no SDK do Cloud, consulte:
- gcloud compute url-maps
- Global:
--global
- Regional:
--region=[REGION]
- Global:
Para gerenciamento de tráfego avançado, use arquivos YAML e importe-os com o
comando
gcloud compute url-maps import
.
A seguir
- Saiba como adicionar, testar, listar ou excluir um mapa de URL em Como usar mapas de URL.
- Para mais informações sobre mapas de regras de roteamento com o Traffic Director, consulte a visão geral dos mapas de regras de roteamento do Traffic Director.