Aceda às APIs Google globais através de back-ends

Esta página descreve como aceder às APIs Google globais através de back-ends do Private Service Connect baseados em balanceadores de carga de aplicações internos entre regiões.

Esta configuração permite-lhe segmentar uma ou mais APIs Google globais individuais enquanto aplica a visibilidade e o controlo que os back-ends do Private Service Connect oferecem.

  • Pode configurar nomes de anfitrião personalizados, locais para a sua nuvem virtual privada (VPC) e redes no local ligadas, que encaminham o tráfego para as APIs Google globais escolhidas.
  • Pode aceder aos back-ends a partir de qualquer região, e o back-end pode equilibrar a carga do tráfego para grupos de pontos finais da rede (NEGs) do Private Service Connect localizados em qualquer região.
  • Pode enviar tráfego para os back-ends a partir de redes VPC com peering.

Para ver uma lista das APIs Google globais disponíveis, consulte o artigo Segmentações da API Google global.

Antes de começar

Crie um NEG do Private Service Connect

Para cada API Google global à qual quer aceder, crie um NEG do Private Service Connect. Os NEGs do Private Service Connect são regionais, mesmo quando são usados para estabelecer ligação a APIs Google globais.

Não é possível atualizar um NEG do Private Service Connect depois de ser criado.

Consola

  1. Na Google Cloud consola, aceda à página Criar um grupo de pontos finais de rede.

    Aceda a Crie um grupo de pontos finais de rede

  2. Na página Criar grupo de pontos finais de rede, introduza um Nome para o grupo de pontos finais de rede.

  3. Para o Tipo de grupo de pontos finais da rede, selecione NEG do Private Service Connect (regional).

  4. Para Destino, selecione APIs Google globais.

  5. Selecione a Região para o grupo de pontos finais de rede.

  6. Selecione o Serviço de destino para o grupo de pontos finais da rede.

  7. Clique em Criar.

gcloud

Use o comando network-endpoint-groups create.

gcloud compute network-endpoint-groups create NEG_NAME \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=TARGET_SERVICE \
    --region=REGION

Substitua o seguinte:

  • NEG_NAME: um nome para o grupo de pontos finais da rede.

  • TARGET_SERVICE: o destino da API Google global ao qual quer estabelecer ligação, por exemplo, pubsub.googleapis.com. Consulte a lista de destinos da API Google globais suportados.

  • REGION: a região na qual criar o grupo de pontos finais de rede.

API

Faça um pedido POST ao método regionNetworkEndpointGroups.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups
{
  "name": "NEG_NAME",
  "networkEndpointType": "PRIVATE_SERVICE_CONNECT",
  "pscTargetService": "TARGET_SERVICE"
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto do grupo de pontos finais da rede.
  • REGION: a região na qual criar o grupo de pontos finais de rede.
  • NEG_NAME: um nome para o grupo de pontos finais da rede.
  • TARGET_SERVICE: o destino da API Google global ao qual quer estabelecer ligação, por exemplo, pubsub.googleapis.com. Consulte a lista de destinos da API Google globais suportados.

Configure o balanceador de carga

Para aceder às APIs Google globais, configure um Application Load Balancer interno entre regiões.

Consola

Selecione o tipo de balanceador de carga

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique em Criar equilibrador de carga.
  3. Em Tipo de balanceador de carga, selecione Balanceador de carga de aplicações (HTTP/HTTPS) e clique em Seguinte.
  4. Para Público ou interno, selecione Interno e clique em Seguinte.
  5. Para a Implementação em várias regiões ou numa única região, selecione Melhor para cargas de trabalho em várias regiões e clique em Seguinte.
  6. Clique em Configurar.

Configuração básica

  1. Introduza um nome para o equilibrador de carga.
  2. Selecione uma rede para o balanceador de carga.

    A rede tem de conter uma sub-rede só de proxy na região onde está a criar o balanceador de carga.

Configuração da interface

  1. Clique em Configuração do front-end.
  2. Introduza um nome para a regra de encaminhamento do balanceador de carga.
  3. No campo Protocolo, selecione HTTPS (inclui HTTP/2 e HTTP/3).
  4. Selecione uma região da sub-rede para a sub-rede do balanceador de carga.
  5. Selecione uma sub-rede para o balanceador de carga.
  6. Clique em Endereço IP e, em seguida, opte por uma das seguintes ações:
    • Para atribuir automaticamente um endereço IP efémero, selecione Efémero (automático).
    • Para escolher um endereço IP efémero, selecione Efémero (personalizado) e, em seguida, introduza um endereço IP efémero personalizado do intervalo de endereços IP da sub-rede do balanceador de carga.
    • Para reservar e usar um endereço IP interno estático, clique em Criar endereço IP e, de seguida, faça o seguinte:
      1. Introduza um nome para o endereço IP.
      2. Clique em Endereço IP estático e, em seguida, faça uma das seguintes ações:
        • Para atribuir automaticamente um endereço IP estático, selecione Atribuir automaticamente.
        • Para configurar um endereço IP específico, selecione Deixar-me escolher e, em seguida, introduza um endereço IP personalizado do intervalo de endereços IP da sub-rede do balanceador de carga.
      3. Clique em Reservar.
  7. Certifique-se de que o campo Porta está definido como 443 para permitir o tráfego HTTPS.
  8. Clique na lista Certificado e, de seguida, selecione o seu certificado autogerido.
  9. Clique em Concluído.

Configuração do back-end

  1. Clique em Configuração de back-end.
  2. Para cada API Google global à qual quer aceder, crie um serviço de back-end global. Para criar um serviço de back-end global, faça o seguinte:

    1. No menu Criar ou selecionar serviços de back-end, selecione Criar um serviço de back-end.
    2. Introduza um nome para o serviço de back-end.
    3. Defina o Tipo de back-end como Grupo de pontos finais da rede do Private Service Connect.
    4. Defina o tipo de destino do Private Service Connect como API Google global.
    5. Selecione HTTPS para o protocolo.
    6. Na secção Back-ends, clique no menu Novo back-end e selecione um grupo de pontos finais da rede do Private Service Connect.

      Se precisar de criar um novo grupo de pontos finais da rede do Private Service Connect, clique em Criar NEG do PSC.

    7. Clique em Concluído.

    8. Clique em Criar.

  3. Certifique-se de que cada serviço de back-end que quer adicionar está selecionado no menu Criar ou selecionar serviços de back-end e, de seguida, clique em OK.

Regras de encaminhamento

O conjunto de regras para encaminhar pedidos HTTPS recebidos para serviços de back-end específicos é denominado mapa de URLs. Para saber mais acerca dos mapas de URLs, consulte a vista geral dos mapas de URLs.

Se estiver a configurar apenas um serviço de back-end para o balanceador de carga, a regra de encaminhamento predefinida é suficiente e pode avançar para Rever e finalizar.

Se estiver a configurar vários serviços de back-end, tem de criar um matcher de caminho para cada serviço de back-end. Cada regra de anfitrião só pode fazer referência a um correspondente de caminho, mas duas ou mais regras de anfitrião podem fazer referência ao mesmo correspondente de caminho.

  1. Se tiver mais do que um serviço de back-end, clique em Regras de encaminhamento.
  2. Selecione Regra simples de anfitrião e caminho.
  3. Para cada back-end, faça o seguinte:
    1. Clique em Adicionar regra de anfitrião e caminho.
    2. Para Anfitrião, introduza o nome de anfitrião que vai ser usado para enviar pedidos a este serviço, por exemplo, pubsub.example.com.
    3. Para Caminhos, introduza o caminho, por exemplo, /*.
    4. Para Back-ends, selecione o serviço de back-end.

Reveja e finalize

  1. Clique em Rever e finalizar para rever a configuração.
  2. Clique em Criar.

gcloud

  1. Para cada API Google global à qual quer aceder, faça o seguinte:

    1. Para criar um serviço de back-end global, use o comando gcloud compute backend-services create.

      gcloud compute backend-services create BACKEND_SERVICE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --protocol=HTTPS \
          --global
      

      Substitua BACKEND_SERVICE_NAME pelo nome do serviço de back-end.

    2. Para adicionar um NEG ao serviço de back-end correspondente, use o comando gcloud compute backend-services add-backend.

      gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
          --network-endpoint-group=NEG_NAME \
          --network-endpoint-group-region=REGION \
          --global
      

      Substitua o seguinte:

      • NEG_NAME: o nome do NEG do Private Service Connect.
      • REGION: a região do NEG do Private Service Connect.
  2. Para criar um mapa de URLs global para o balanceador de carga, use o comando gcloud compute url-maps create.

    Um mapa de URLs tem de fazer referência a um serviço de back-end predefinido. Se estiver a configurar o balanceador de carga com um serviço de back-end, defina esse serviço de back-end como o predefinido. Se estiver a configurar o balanceador de carga para usar vários serviços de back-end, escolha um dos serviços de back-end para ser a predefinição do mapa de URLs.

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=DEFAULT_BACKEND_SERVICE_NAME
    

    Substitua o seguinte:

    • URL_MAP_NAME: um nome para o mapa de URLs.
    • DEFAULT_BACKEND_SERVICE_NAME: o nome do serviço de back-end predefinido do balanceador de carga. A predefinição é usada quando nenhuma regra de anfitrião corresponde ao nome de anfitrião pedido.
  3. Opcional: se estiver a configurar o equilibrador de carga para usar vários serviços de back-end, conclua este passo. Se o seu mapa de URLs apenas fizer referência a um serviço de back-end, ignore este passo.

    Para adicionar serviços de back-end adicionais ao mapa de URLs, use o comando gcloud compute url-maps add-path-matcher.

    Para cada serviço de back-end, adicione um correspondente de caminho e uma ou mais regras de anfitrião. Tem de criar um correspondente de caminho para cada serviço de back-end. Cada regra de anfitrião só pode referenciar um correspondente de caminho, mas duas ou mais regras de anfitrião podem referenciar o mesmo correspondente de caminho.

    gcloud compute url-maps add-path-matcher URL_MAP_NAME \
        --path-matcher-name=PATH_MATCHER \
        --default-service=BACKEND_SERVICE_NAME \
        --new-hosts=HOSTNAMES
    

    Substitua o seguinte:

    • PATH_MATCHER: um nome para o correspondente de caminhos.
    • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
    • HOSTNAMES: um ou mais nomes de anfitrião para enviar pedidos para o serviço de back-end, por exemplo, pubsub.example.com. Pode introduzir vários nomes de anfitriões numa lista separada por vírgulas.
  4. Para criar um proxy HTTPS de destino, use o comando gcloud compute target-https-proxies create.

    gcloud compute target-https-proxies create PROXY_NAME \
        --url-map=URL_MAP_NAME \
        --certificate-manager-certificates=CERTIFICATE_NAME
    

    Substitua o seguinte:

    • PROXY_NAME: um nome para o proxy HTTPS de destino.
    • URL_MAP_NAME: o nome do mapa de URLs.
    • CERTIFICATE_NAME: o nome do recurso do certificado.
  5. Para criar uma regra de encaminhamento global para o balanceador de carga, use o comando gcloud compute forwarding-rules create.

    gcloud compute forwarding-rules create RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=NETWORK \
        --address=IP_ADDRESS \
        --ports=443 \
        --target-https-proxy=PROXY_NAME \
        --subnet=SUBNET \
        --subnet-region=SUBNET_REGION \
        --global
    

    Substitua o seguinte:

    • RULE_NAME: o nome da regra de encaminhamento.
    • NETWORK: a rede VPC da regra de encaminhamento. Esta rede tem de conter uma sub-rede só de proxy na região onde está a criar o balanceador de carga.
    • IP_ADDRESS: o endereço IP interno da regra de encaminhamento, que tem de estar dentro do intervalo de endereços IP da sub-rede da regra de encaminhamento. Para usar um endereço IP efémero específico, introduza o endereço IP, por exemplo, 10.0.0.5. Para usar um endereço IP interno estático, introduza o nome do endereço IP. Para permitir que Google Cloud selecione um endereço IP efémero, omita esta flag.
    • SUBNET: a sub-rede da regra de encaminhamento.
    • SUBNET_REGION: a região da sub-rede da regra de encaminhamento.

API

  1. Para cada API Google global à qual quer aceder, faça o seguinte:

    1. Para criar um serviço de back-end global, faça um pedido POST ao método backendServices.insert.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
      {
        "loadBalancingScheme": "INTERNAL_MANAGED",
        "name": "BACKEND_SERVICE_NAME",
        "protocol": "HTTPS"
      }
      

      Substitua o seguinte:

      • PROJECT_ID: o ID do projeto.
      • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
    2. Para adicionar um NEG ao serviço de back-end correspondente, faça um pedido ao método backendServices.patch.PATCH

      PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
      {
        "backends": [
          {
            "group": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups/NEG_NAME"
          }
        ]
      }
      

      Substitua o seguinte:

      • REGION: a região do NEG.
      • NEG_NAME: o nome do grupo de pontos finais da rede a adicionar.
  2. Para criar um mapa de URLs global para o balanceador de carga, faça um pedido POST ao método urlMaps.insert.

    Um mapa de URLs tem de fazer referência a um serviço de back-end predefinido. Se estiver a configurar o balanceador de carga com um serviço de back-end, defina esse serviço de back-end como o predefinido. Se estiver a configurar o balanceador de carga para usar vários serviços de back-end, escolha um dos serviços de back-end para ser a predefinição do mapa de URLs.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps
     {
       "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/DEFAULT_BACKEND_SERVICE_NAME",
       "name": "URL_MAP_NAME"
     }
     

    Substitua o seguinte:

    • DEFAULT_BACKEND_SERVICE_NAME: o nome do valor predefinido do equilibrador de carga. A predefinição é usada quando nenhuma regra de anfitrião corresponde ao nome de anfitrião pedido.
    • URL_MAP_NAME: um nome para o mapa de URLs.
  3. Se estiver a configurar o equilibrador de carga para usar vários serviços de back-end, conclua este passo. Se o seu mapa de URLs apenas fizer referência a um serviço de back-end, ignore este passo.

    Para adicionar serviços de back-end adicionais ao mapa de URLs, faça um pedido PATCH ao método urlMaps.patch.

    Para cada serviço de back-end, adicione um correspondente de caminho e uma ou mais regras de anfitrião. Tem de criar um correspondente de caminho para cada serviço de back-end. Cada regra de anfitrião só pode referenciar um correspondente de caminho, mas duas ou mais regras de anfitrião podem referenciar o mesmo correspondente de caminho.

    Pode adicionar vários correspondentes de caminhos e regras de anfitriões fazendo um único pedido de API.

     PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME
     {
       "pathMatchers": [
         {
           "name": "PATH_MATCHER_NAME_1",
           "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_1"
         },
         {
           "name": "PATH_MATCHER_NAME_2",
           "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_2"
         }
       ],
       "hostRules": [
         {
           "hosts": ["HOSTNAME_1"],
           "pathMatcher": "PATH_MATCHER_NAME_1"
         },
         {
           "hosts": ["HOSTNAME_2"],
           "pathMatcher": "PATH_MATCHER_NAME_2"
         }
       ]
     }
     

    Substitua o seguinte:

    • PATH_MATCHER_NAME_1: um nome para o primeiro correspondente de caminho.
    • BACKEND_SERVICE_NAME_1: o nome do primeiro serviço de back-end.
    • PATH_MATCHER_NAME_2: um nome para o segundo correspondente de caminho.
    • BACKEND_SERVICE_NAME_2: o nome do segundo serviço de back-end.
    • HOSTNAME_1: o nome do anfitrião para enviar pedidos para o primeiro serviço, por exemplo, pubsub.example.com.
    • HOSTNAME_2: o nome de anfitrião para enviar pedidos para o segundo serviço.
  4. Para criar um proxy HTTPS de destino, faça um pedido POST ao targetHttpsProxies.insert método.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies
     {
       "name": "PROXY_NAME",
       "sslCertificates": [
         "https://certificatemanager.googleapis.com/v1/projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME"
       ],
       "urlMap": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME"
     }
     

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto.
    • PROXY_NAME: um nome para o proxy HTTPS de destino.
    • CERTIFICATE_NAME: o nome do recurso do certificado.
    • URL_MAP_NAME: o nome do mapa de URLs.
  5. Para criar uma regra de encaminhamento global para o seu balanceador de carga, faça um POST pedido ao método globalForwardingRules.insert. A rede da regra de encaminhamento tem de conter uma sub-rede só de proxy na sub-rede da região da regra de encaminhamento.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules
     {
       "IPAddress": "IP_ADDRESS",
       "loadBalancingScheme": "INTERNAL_MANAGED",
       "name": "FORWARDING_RULE_NAME",
       "network": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME",
       "portRange": "443",
       "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME",
       "target": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies/PROXY_NAME"
     }
     

    Substitua o seguinte:

    • IP_ADDRESS: o endereço IP interno da regra de encaminhamento, que tem de estar dentro do intervalo de endereços IP da sub-rede da regra de encaminhamento. Para usar um endereço IP efémero específico, indique o endereço IP, por exemplo, 10.0.0.5. Para usar um endereço IP interno estático, indique o nome do endereço IP. Para permitir que o utilizador Google Cloud selecione um endereço IP efémero, omita este campo.
    • FORWARDING_RULE_NAME: o nome da regra de encaminhamento.
    • NETWORK_NAME: o nome da rede VPC da regra de encaminhamento. Esta rede tem de conter uma sub-rede só de proxy na região onde está a criar o balanceador de carga.
    • SUBNET_REGION: a região da sub-rede da regra de encaminhamento.
    • SUBNET_NAME: o nome da sub-rede da regra de encaminhamento.

Valide a configuração

Para testar a ligação do seu back-end às APIs Google globais, faça o seguinte:

  1. Se não tiver uma, crie uma instância de máquina virtual (VM) na rede VPC onde configurou o back-end.
  2. Certifique-se de que não criou regras de firewall nem políticas de firewall que substituam a regra de saída de permissão de IPv4 implícita.
  3. Estabeleça ligação à VM.
  4. Na VM, use curl para verificar se pode consultar cada API. Este comando define o cabeçalho Host e ignora a resolução de DNS especificando um endereço IP definido pelo utilizador.

    Pode ignorar a validação de certificados com a flag -k. Pode ter de ignorar a validação se usou um certificado autoassinado para configurar o proxy HTTPS de destino ou se a VM não tiver o certificado da autoridade de certificação que assinou o seu certificado.

    curl -iv --resolve HOSTNAME:443:IP_ADDRESS \
       'https://HOSTNAME/RESOURCE_URI'
    

    Substitua o seguinte:

    • HOSTNAME: o nome de anfitrião que configurou no mapa de URLs, por exemplo, pubsub.example.com.
    • IP_ADDRESS: o endereço IP da regra de encaminhamento do balanceador de carga.
    • RESOURCE_URI: o resto do URI do recurso que quer usar para validação. Por exemplo, se o equilibrador de carga estiver a encaminhar pedidos para um ponto final regional do Pub/Sub, pode usar $discovery/rest?version=v1.

Configure registos de DNS

Configure os registos DNS para cada anfitrião que adicionou ao mapa de URLs, apontando para o endereço IP da regra de encaminhamento. Se estiver a usar o Cloud DNS para gerir o DNS, consulte o artigo Adicione, modifique e elimine registos. Caso contrário, configure os registos de DNS no seu servidor DNS.

Por exemplo, suponhamos que criou as seguintes configurações:

  • Um NEG do Private Service Connect que usa o serviço de destino pubsub.googleapis.com.

  • Um Application Load Balancer interno entre regiões que usa esse NEG do Private Service Connect como back-end.

  • Um mapa de URLs que define uma regra de anfitrião para pubsub.example.com.

Para que esta configuração funcione corretamente, tem de criar um registo DNS que aponte pubsub.example.com para o endereço IP da regra de encaminhamento.

Com esta configuração, todos os pedidos enviados para pubsub.example.com são enviados para o balanceador de carga, que encaminha o pedido para pubsub.googleapis.com.

Configure os clientes para enviar pedidos ao back-end

Para enviar pedidos através do back-end em vez dos pontos finais de serviço público, tem de configurar os clientes para enviar pedidos para o nome do anfitrião que definiu no mapa de URLs do balanceador de carga, por exemplo, pubsub.example.com. Consulte a documentação do seu cliente ou biblioteca cliente para ver informações sobre a configuração para usar pontos finais personalizados. As páginas seguintes incluem passos de configuração para alguns clientes comuns:

  • Python: pode configurar api_endpoint em Client options.

  • Aceda: pode configurar WithEndpoint em ClientOptions.

  • .NET: pode configurar Endpoint na classe de criação do cliente.

  • gcloud: pode configurar api_endpoint_overrides na CLI gcloud.