Acessar APIs locais do Google por meio de back-ends

Neste guia, você vai aprender a configurar um balanceador de carga de aplicativo interno com um back-end do Private Service Connect para acessar uma API local do Google.

Para mais informações sobre back-ends, consulte Sobre back-ends.

Um balanceador de carga de aplicativo interno usado para o Private Service Connect pode ser acessado de redes VPC compartilhadas e de redes conectadas.

Papéis

O papel Administrador do balanceador de carga do Compute (roles/compute.loadBalancerAdmin) contém a permissão necessária para executar as tarefas descritas neste guia.

Serviços compatíveis

Consulte a lista de endpoints de serviço de localização compatíveis.

Antes de começar

  • Ative a API Compute Engine no projeto.

  • Se você quiser registrar a regra de encaminhamento do balanceamento de carga com o Diretório de serviços, ative a API Service Directory no projeto. Para configurar o Diretório de serviços, crie a regra de encaminhamento usando a CLI do Google Cloud ou a API.

  • Crie uma sub-rede somente proxy se você ainda não tiver uma. É necessário que haja uma única sub-rede somente proxy na região e rede VPC em que você pretende criar o balanceador de carga de aplicativo interno. Essa sub-rede é usada por todos os balanceadores de carga de aplicativo internos nessa rede e região.

  • Se você ainda não os tem, crie uma chave privada e um certificado para seu domínio. Consulte a etapa 1 de usar certificados SSL autogerenciados. Você precisa de uma chave privada e um certificado para criar o proxy HTTPS de destino ao configurar o balanceador de carga.

Criar um grupo de endpoints da rede

Para cada serviço que você quer disponibilizar usando o balanceador de carga, crie um grupo de endpoints da rede (NEG, na sigla em inglês) do Private Service Connect.

Console

  1. No console do Google Cloud, acesse a página Grupos de endpoints da rede.

    Acessar grupos de endpoints da rede

  2. Clique em Criar grupo de endpoints de rede.

  3. Inserir um nome para o grupo de endpoints da rede.

  4. Em Tipo de grupo de endpoints de rede, selecione Grupo de endpoints de rede (Private Service Connect).

  5. Selecione a Região do grupo de endpoints da rede.

  6. Selecione o Serviço de destino para o grupo de endpoints de rede.

  7. Clique em Criar.

gcloud

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

Substitua:

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

  • TARGET_SERVICE: o serviço de destino ao qual você quer se conectar. Consulte a lista de endpoints de serviço de localização compatíveis.

  • REGION: a região em que o grupo de endpoints da rede será criado. A região precisa ser a mesma do serviço ao qual você quer se conectar.

Configurar o balanceador de carga

Todos os componentes do balanceador de carga precisam ser criados na mesma região que o grupo de endpoints da rede do Private Service Connect.

Console

Iniciar a configuração

  1. No console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Clique em Criar balanceador de carga.
  3. Em Tipo de balanceador de carga, selecione Balanceador de carga de aplicativo (HTTP/HTTPS) e clique em Próxima.
  4. Em Voltado ao público ou interno, selecione Interno e clique em Próxima.
  5. Em Implantação entre regiões ou região única, selecione Melhor para cargas de trabalho regionais e clique em Próxima.
  6. Clique em Configurar.

Configuração básica

  1. Digite um Nome para o balanceador de carga.
  2. Selecione uma Região para o balanceador de carga.
  3. Selecione uma Rede para o balanceador de carga.

    A rede precisa conter uma sub-rede somente proxy na região em que você está criando o NEG e o balanceador de carga. Se você não tiver um, clique em Reservar sub-rede para criar um.

  4. Mantenha a janela aberta para continuar.

Configuração de back-end

O grupo de endpoints da rede do Private Service Connect é um tipo de back-end de balanceador de carga. Crie um serviço de back-end para cada back-end que você quer configurar.

  1. Clique em Configuração de back-end.
  2. Crie um serviço de back-end para cada grupo de endpoints de rede do Private Service Connect que você quiser configurar.

    1. No menu Criar ou selecionar serviços de back-end, selecione Criar um serviço de back-end.
    2. Digite um Nome para o serviço de back-end.
    3. Defina o Tipo de back-end como Grupo de endpoints da rede do Private Service Connect.
    4. Selecione HTTPS para o protocolo.

      A configuração Porta nomeada não é usada para esta configuração do balanceador de carga. Mantenha a configuração de porta nomeada padrão.

    5. Na seção Back-ends, clique no menu Novo back-end e selecione o grupo de endpoints da rede do Private Service Connect.

      Se você precisar criar um novo grupo de endpoints de rede do Private Service Connect, clique em Criar grupo de endpoints da rede do Private Service Connect.

Regras de roteamento

O conjunto de regras para encaminhar solicitações HTTPS de entrada para serviços ou buckets de back-end específicos é chamado de mapa de URLs. Para saber mais sobre mapas de URL, consulte Visão geral de mapas de URL.

Se você estiver configurando apenas um serviço de back-end para o balanceador de carga, a regra de roteamento padrão será suficiente e será possível pular para a configuração do front-end.

  1. Se você tiver mais de um serviço de back-end, clique em Regras de roteamento.
  2. Selecione Regra de host e caminho simples.
  3. Para cada back-end, faça o seguinte:
    1. Adicionar regra de host e caminho.
    2. Em Host, insira o nome do host que será usado para enviar solicitações a esse serviço, por exemplo, cloudkms.example.com.
    3. Em Caminhos, digite o caminho, por exemplo, /*.
    4. Em Back-ends, selecione o serviço de back-end.

Configuração de front-end

  1. Clique em Configuração de front-end.
  2. Clique em Adicionar IP e porta de front-end.
  3. Digite um Nome para o balanceador de carga.
  4. No campo Protocolo, selecione HTTPS (inclui HTTP/2).
  5. Selecione uma Sub-rede para o balanceador de carga.
  6. Certifique-se de que Porta esteja definida como 443, para permitir tráfego HTTPS.
  7. Em Endereço IP, selecione um endereço IP no menu.

    Se você quiser reservar um novo endereço IP, clique em Criar endereço IP.

  8. Clique na lista suspensa Certificado.

    1. Se você já tiver um recurso de certificado SSL autogerenciado que quer usar, selecione-o no menu.
    2. Caso contrário, selecione Criar um novo certificado.
    3. Digite um nome para o certificado de recurso.
    4. Nos campos apropriados, faça o upload dos arquivos formatados em PEM:
      • Certificado
      • Chave privada
    5. Clique em Criar.
  9. Clique em Concluído.

Revisar e finalizar

  1. Clique em Analisar e finalizar para revisar a configuração.
  2. Clique em Criar.

gcloud

  1. Crie um serviço de back-end para cada grupo de endpoints de rede criado.

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

    Substitua:

    • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
    • REGION: a região em que o serviço de back-end será criado.
  2. Para cada serviço de back-end que você criou, adicione o NEG correspondente ao serviço de back-end.

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

    Substitua:

    • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
    • NEG_NAME: o nome do grupo de endpoints da rede.
    • REGION: a região do back-end.
  3. Crie um mapa de URL para o balanceador de carga.

    Um mapa de URL precisa referir-se a um serviço de back-end padrão. Se você estiver configurando o balanceador de carga com um serviço de back-end, defina esse serviço como o padrão. Se estiver configurando o balanceador de carga para usar vários serviços de back-end, referenciados por regras de host e correspondentes de caminho criados na próxima etapa, escolha um dos serviços de back-end como padrão do mapa de URL.

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

    Substitua:

    • URL_MAP_NAME: um nome para o mapa de URL.

    • DEFAULT_BACKEND_SERVICE_NAME: o nome padrão do balanceador de carga. O padrão é usado quando nenhuma regra de host corresponde ao nome do host solicitado.

    • REGION: a região em que o mapa de URL será criado.

  4. Adicione outros serviços de back-end ao mapa de URLs.

    Se o mapa de URLs precisar referenciar dois ou mais serviços de back-end, siga as etapas a seguir. Se o mapa de URL referenciar apenas um serviço de back-end, ignore esta etapa.

    1. Para cada serviço de back-end, adicione uma correspondência de caminho. É necessário criar uma correspondência de caminho para cada serviço de back-end.
    gcloud compute url-maps add-path-matcher URL_MAP_NAME \
     --path-matcher-name=PATH_MATCHER \
     --default-service=BACKEND_SERVICE_NAME \
     --region=REGION
    

    Substitua:

    • URL_MAP_NAME: o nome do mapa de URL.
    • PATH_MATCHER: um nome para a correspondência de caminho.
    • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
    • REGION: a região do mapa de URL.
    1. Para cada nome de host, adicione uma regra de host.

      Cada regra de host pode referir-se apenas a uma correspondência de caminho, mas duas ou mais regras podem referenciar a mesma correspondência.

      gcloud compute url-maps add-host-rule URL_MAP_NAME \
      --hosts=HOST \
      --path-matcher-name=PATH_MATCHER \
      --region=REGION
      

      Substitua:

      • URL_MAP_NAME: o nome do mapa de URL.
      • HOST: nome do host para o qual enviar solicitações para este serviço. Por exemplo, cloudkms.example.com.
      • PATH_MATCHER: o nome da correspondência de caminho.
      • REGION: a região do mapa de URL.
  5. Crie o proxy de destino HTTPS.

    Crie um certificado SSL regional usando o comando gcloud compute ssl-certificates create. Os certificados gerenciados pelo Google não são compatíveis com balanceadores de carga de aplicativos internos.

    gcloud compute ssl-certificates create CERTIFICATE \
     --certificate=LB_CERT \
     --private-key=LB_PRIVATE_KEY \
     --region=REGION
    

    Substitua:

    • CERTIFICATE: um nome para o certificado.

    • LB_CERT: o caminho para o arquivo de certificado formatado em PEM do certificado autogerenciado.

    • LB_PRIVATE_KEY: o caminho para o arquivo de chave privada formatado em PEM do certificado autogerenciado.

    • REGION: a região do certificado.

    Use o recurso de certificado SSL regional para criar um proxy HTTPS de destino com o comando gcloud compute target-https-proxies create.

    gcloud compute target-https-proxies create PROXY_NAME \
       --url-map=URL_MAP_NAME \
       --region=REGION \
       --ssl-certificates=CERTIFICATE
    

    Substitua:

    • PROXY_NAME: um nome para o proxy HTTPS de destino.
    • URL_MAP_NAME: o nome do mapa de URL.
    • REGION: a região do recurso de certificado.
    • CERTIFICATE: o nome do recurso de certificado.
  6. Reserve um endereço IPv4 interno regional para a regra de encaminhamento.

    gcloud compute addresses create ADDRESS_NAME \
     --ip-version=IPV4 \
     --region=REGION \
     --subnet=SUBNETWORK
    

    Substitua:

    • ADDRESS_NAME: um nome para o recurso de endereço IP.
    • REGION: a região em que o endereço IP será criado.
    • SUBNET: a sub-rede em que o endereço IP será criado.

    Execute este comando para ver o endereço IP reservado. Depois de criar o balanceador de carga, use o endereço IP para verificar a configuração.

    gcloud compute addresses describe ADDRESS_NAME \
     --format="get(address)" --region=REGION
    
  7. Crie a regra de encaminhamento.

    Crie a regra de encaminhamento usando o comando gcloud compute forwarding-rules create.

    gcloud compute forwarding-rules create FWD_RULE \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network=NETWORK \
     --address=ADDRESS_NAME \
     --ports=443 \
     --region=REGION \
     --target-https-proxy=PROXY_NAME \
     --target-https-proxy-region=PROXY_REGION \
     [--service-directory-registration=SD_SERVICE_NAME]
    

    Substitua:

    • FWD_RULE: um nome para a regra de encaminhamento.

    • NETWORK: a rede onde criar a regra de encaminhamento.

    • ADDRESS_NAME: o endereço IP reservado.

    • REGION: a região da regra de encaminhamento.

    • PROXY_NAME: o nome do proxy HTTPS de destino.

    • PROXY_REGION: a região do proxy HTTPS de destino.

    • SD_SERVICE_NAME: o URI do serviço do diretório de serviços com o qual você quer registrar o balanceador de carga, neste formato: projects/PROJECT/locations/REGION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME. Especificar --service-directory-registration é opcional.

Configurar registros DNS

Configure registros DNS para cada host adicionado ao mapa de URL, apontando para o endereço IP da regra de encaminhamento. Se você estiver usando o Cloud DNS para gerenciar DNS, consulte Como adicionar um registro DNS. Caso contrário, configure os registros DNS no servidor DNS.

Por exemplo, digamos que você tenha configurado um back-end com o seguinte:

  • Um NEG do Private Service Connect que usa o serviço de destino asia-east1-cloudkms.googleapis.com.

  • Um balanceador de carga de aplicativo interno que usa esse NEG do Private Service Connect como back-end.

  • Um mapa de URL que define uma regra de host para cloudkms.example.com.

Para que essa configuração funcione corretamente, crie um registro DNS que aponte cloudkms.example.com para o endereço IP da regra de encaminhamento.

Todas as solicitações enviadas para cloudkms.example.com são enviadas ao balanceador de carga, que encaminha a solicitação para asia-east1-cloudkms.googleapis.com.

Verificar a configuração

  1. Crie a instância de VM.

    gcloud compute instances create VM_NAME \
       --network=NETWORK \
       --image-project=debian-cloud --image-family=debian-9 \
       --zone=ZONE
    

    Substitua:

    • VM_NAME: um nome para a máquina virtual.

    • NETWORK: a rede da VM.

    • ZONE: a zona para a VM.

  2. Conecte-se à VM.

    gcloud compute ssh VM_NAME --zone=ZONE
    
  3. Use curl para verificar a configuração. Esse comando define o cabeçalho Host e ignora a resolução DNS especificando um endereço IP definido pelo usuário. É possível omitir a porta se você estiver usando a porta padrão do protocolo, por exemplo, usando a porta 443 para HTTPS.

    Se necessário, pule a validação do certificado usando a sinalização -k. Talvez seja necessário pular a validação se você usou um certificado autoassinado para configurar o proxy HTTPS de destino ou se a VM não tem o certificado da autoridade de certificação que assinou o certificado.

    curl [-k] -s 'https://HOST:443/RESOURCE_URI' \
       -H 'Host: HOST' \
       --connect-to HOST:443:FWD_RULE_IP_ADDRESS:443
    

    Substitua:

    • HOST: o nome do host configurado no mapa de URL.

    • RESOURCE_URI: o restante do URI do recurso que você quer usar para verificação. Por exemplo, se o balanceador de carga estiver encaminhando solicitações para um endpoint local do Cloud Key Management Service, use v1/projects/<var>PROJECT_ID</var>/locations.

    • FWD_RULE_IP_ADDRESS: o endereço IP atribuído ao recurso reservado de endereço IP, ADDRESS_NAME, usado na configuração da regra de encaminhamento.

Acessar o back-end a partir de hosts locais

Se a rede local estiver conectada a uma rede VPC, será possível enviar tráfego para o back-end do Private Service Connect.

  • Sua rede local precisa estar conectada à rede VPC que contém o balanceador de carga de aplicativo interno usando túneis do Cloud VPN ou anexos da VLAN na mesma região que o balanceador de carga interno.

  • A rede local precisa ter rotas adequadas para o balanceador de carga interno. Verifique se cada Cloud Router que gerencia a sessão do BGP para o túnel do Cloud VPN ou o anexo da VLAN foi configurado para divulgar o intervalo de endereços IP principal da sub-rede usada pelo balanceador de carga de aplicativo interno. Os Cloud Routers anunciam rotas de sub-rede por padrão.

  • É preciso configurar sistemas locais para que os nomes de host no mapa de URL do balanceador de carga interno do aplicativo sejam resolvidos para o endereço IP da regra de encaminhamento do balanceador de carga interno. É possível criar os registros DNS em servidores de nomes locais ou usar o Cloud DNS.

    Se você criou os registros DNS usando zonas particulares gerenciadas do Cloud DNS, siga estas etapas:

    • Crie uma política de servidor de entrada na rede VPC a que sua rede local se conecta.

    • Identifique os pontos de entrada do encaminhador de entrada nas regiões em que os túneis do Cloud VPN e anexos da VLAN estão localizados, na rede VPC a que sua rede no local se conecta.

    • Configure servidores de nomes DNS locais para encaminhar solicitações DNS dos nomes de host no mapa de URL para um ponto de entrada de encaminhador de entrada do Cloud DNS.

Figura 1. Ao configurar o Private Service Connect, o Cloud Router e os hosts locais, é possível se conectar a serviços e APIs do Google usando back-ends regionais.