Acesse serviços gerenciados usando o Private Service Connect com os controles de serviço HTTP(S) do consumidor

Quando você acessa serviços gerenciados que são executados no Google Cloud, talvez seja preciso enviar solicitações para esses serviços por meio de um ponto de aplicação da política. Usar um ponto de aplicação de políticas permite configurar a geração de registros e a criptografia e especificar quais URLs são acessados.

Use o Private Service Connect com controles de serviço HTTP(S) do consumidor para conectar balanceadores de carga HTTP(S) externos globais a serviços gerenciados no Google Cloud, usando o balanceador de carga para aplicação da política. Você se conecta ao serviço por meio de uma regra de encaminhamento mapeada para um grupo de endpoints de rede (NEG, na sigla em inglês) do Private Service Connect.

Para mais informações, consulte Como usar o Private Service Connect para publicar e consumir serviços gerenciados.

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.

Antes de começar

  • Se você quiser publicar seu próprio serviço, consulte Publicar serviços gerenciados usando o Private Service Connect.

  • Se você estiver conectando um serviço publicado por terceiros, peça as seguintes informações ao produtor de serviços:

    • O URI do anexo de serviço ao qual você quer se conectar. O anexo de serviço tem este formato: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • Quaisquer requisitos para quais nomes de DNS você usa para enviar solicitações. Talvez seja necessário usar nomes de DNS específicos na configuração do mapa de URLs ou na configuração de DNS.

Especificações

  • O serviço de destino configurado no NEG do Private Service Connect precisa ser um anexo de serviço.

  • Configure um balanceador de carga HTTP(S) externo global com recursos avançados de gerenciamento de tráfego (esquema de balanceamento de carga definido como EXTERNAL_MANAGED).

    O balanceador de carga HTTP(S) externo global (clássico) não é compatível com essa configuração.

  • O NEG do Private Service Connect precisa ser o único back-end no serviço de back-end.

    No entanto, o mapa de URL do balanceador de carga pode conter vários serviços de back-end, e esses serviços podem conter qualquer tipo de back-end.

  • O serviço de back-end associado ao NEG precisa usar HTTPS para o protocolo.

Criar um grupo de endpoints da rede

Crie um NEG do Private Service Connect que aponte para o anexo do serviço em que você quer acessar o serviço publicado.

gcloud beta 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 anexo de serviço ao qual você quer se conectar.

  • 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

Configure um balanceador de carga HTTP(S) externo global com recursos avançados de gerenciamento de tráfego (esquema de balanceamento de carga definido como EXTERNAL_MANAGED) para se conectar a serviços gerenciados.

Embora o NEG do Private Service Connect seja regional, todos os outros componentes de balanceamento de carga nessa configuração são globais.

  1. Reserve um endereço IPv4 externo global para o balanceador de carga.

    gcloud compute addresses create ADDRESS_NAME \
      --ip-version=IPV4 --global
    

    Substitua ADDRESS_NAME por um nome para o recurso de endereço IP.

    Execute este comando para ver o endereço IP reservado:

    gcloud compute addresses describe ADDRESS_NAME \
      --format="get(address)" --global
    
  2. Para cada NEG criado, crie um serviço de back-end.

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

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

  3. Para cada serviço de back-end que você criou, adicione o NEG correspondente ao serviço de back-end.

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

    Substitua:

    • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
    • NEG_NAME: o nome do grupo de endpoints da rede.
    • REGION: o nome do grupo de endpoints da rede.
  4. 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, escolha um deles para ser o padrão de mapa de URL.

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

    Substitua:

    • URL_MAP_NAME: um nome para o mapa de URL.

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

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

    Se seu mapa de URL precisar referir-se a dois ou mais serviços de back-end, adicione outras correspondências de caminho e regras de host. Se seu mapa de URL referir-se apenas a um serviço de back-end, continue para criar o proxy HTTPS de destino.

    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 beta compute url-maps add-path-matcher URL_MAP_NAME \
        --path-matcher-name=PATH_MATCHER \
        --default-service=BACKEND_SERVICE_NAME \
        --global
      

      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.
    2. 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 beta compute url-maps add-host-rule URL_MAP_NAME \
        --hosts=HOST \
        --path-matcher-name=PATH_MATCHER \
        --global
      

      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, service1.producer1.example.com.
      • PATH_MATCHER: o nome da correspondência de caminho.
      • REGION: a região do mapa de URL.
  6. Crie o proxy de destino HTTPS.

    Para criar um balanceador de carga HTTPS, você precisa ter um recurso de certificado SSL para usar no proxy HTTPS. É possível criar um recurso de certificado SSL usando um certificado SSL gerenciado pelo Google ou um certificado SSL autogerenciado. O uso de certificados gerenciados pelo Google é recomendado porque o Google Cloud recebe, gerencia e renova esses certificados automaticamente.

    Para criar um certificado gerenciado pelo Google, você precisa ter um domínio.

    Use este comando para criar um recurso de certificado SSL gerenciado pelo Google:

    gcloud beta compute ssl-certificates create CERTIFICATE \
      --domains DOMAIN
    

    Substitua:

    • CERTIFICATE: um nome para o certificado.
    • DOMAIN: o nome de domínio do balanceador de carga.

    Use este comando para criar um recurso de certificado SSL autogerenciado. Para criar um certificado SSL autogerenciado, você precisa de um arquivo de chave privada local e de um arquivo de certificado local. Se você precisar criar esses arquivos, consulte a etapa 1 de usar certificados SSL autogerenciados.

    gcloud beta compute ssl-certificates create CERTIFICATE \
      --certificate LB_CERT \
      --private-key LB_PRIVATE_KEY
    

    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.

    Use o recurso de certificado SSL para criar um proxy de destino HTTPS.

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

    Substitua:

    • PROXY_NAME: um nome para o proxy HTTPS de destino.
    • URL_MAP_NAME: o nome do mapa de URL.
    • CERTIFICATE: o nome do recurso de certificado.
  7. Crie a regra de encaminhamento.

    gcloud beta compute forwarding-rules create FWD_RULE \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=PREMIUM \
      --address=ADDRESS_NAME \
      --target-https-proxy=PROXY_NAME \
      --ports=443 \
      --global
    

    Substitua:

    • FWD_RULE: um nome para a regra de encaminhamento.

    • ADDRESS_NAME: o recurso de endereço IP que você reservou para usar na regra de encaminhamento.

    • PROXY_NAME: o nome do proxy HTTPS de destino.

Configurar registros DNS

Se você quiser acessar seu endpoint do Private Service Connect usando um nome DNS, crie nomes DNS para cada regra de encaminhamento externo. O registro DNS precisa corresponder a um nome no mapa de URL. A menos que seu mapa de URL reescreva os nomes, o registro DNS também precisa corresponder aos nomes esperados pelo serviço do produtor.

Se você estiver usando o Cloud DNS para gerenciar DNS, consulte Como adicionar um registro DNS.

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.

    É possível pular 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.

    • FWD_RULE_IP_ADDRESS: o endereço IP atribuído à regra de encaminhamento.

Solução de problemas

Se você vir um erro 404 ao tentar acessar a regra de encaminhamento do balanceador de carga HTTP(S) externo global, o erro pode ter uma das seguintes causas:

  • O mapa de URL ainda não foi propagado.

    Se você acabou de criar o balanceador de carga HTTP(S) externo global, aguarde alguns minutos.

  • O URL que você usa na solicitação não corresponde a um URL definido no mapa.

    Verifique se o URL que você está tentando corresponde à configuração do mapa de URL no seu balanceador de carga HTTP(S) externo global.

  • O back-end do produtor de serviços não é compatível com o URL que você está tentando acessar

    Peça ao produtor de serviços para verificar qual URL usar para acessar o serviço dele.