Acessar serviços publicados por meio de endpoints

Neste documento, explicamos como acessar serviços em outra rede VPC por endpoints do Private Service Connect. É possível se conectar aos seus próprios serviços ou a provedores fornecidos por outros produtores, incluindo o Google.

Para ver mais informações sobre serviços, consulte Publicar serviços gerenciados.

Papéis

O papel do IAM a seguir fornece as permissões necessárias para executar as tarefas neste guia.

Tarefa Papéis
Crie um endpoint Ambos os papéis:
Administrador de rede do Compute (roles/compute.networkAdmin) e
EDitor do Diretório de serviços (roles/servicedirectory.editor)
Configure de maneira automática ou manual as entradas DNS para um endpoint. Administrador do DNS (roles/dns.admin)

Antes de começar

  • Leia Sobre a conexão a serviços usando endpoints, incluindo limitações.
  • É necessário ativar a API Compute Engine no projeto.
  • É necessário ativar a API Service Directory no projeto.
  • É necessário ativar a API Cloud DNS no projeto.
  • Identifique ou crie uma sub-rede normal para atribuir um endereço IP ao endpoint.
    • A sub-rede precisa estar na mesma região do serviço ao qual você quer se conectar.
    • É possível usar um endereço IPv4 de uma sub-rede somente IPv4 ou de pilha dupla.
    • É possível usar um endereço IPv6 de uma sub-rede de pilha dupla se ela tiver um intervalo de endereços IPv6 interno.
    • A versão do IP do endereço afeta a quais serviços publicados o endpoint pode se conectar. Para mais informações, consulte Conversão de versão de IP.
  • As regras de firewall de saída precisam permitir o tráfego para o endereço IP interno do endpoint. A regra de firewall de saída de permissão implícita permite a saída para qualquer endereço IP de destino. Se você tiver criado regras de firewall de negação de saída na rede VPC ou políticas de firewall hierárquicas que modificam o comportamento de saída implícito permitido, o acesso ao endpoint poderá ser afetado. Crie uma regra ou política de firewall específica de permissão de saída para permitir o tráfego para o destino de endereço IP interno do endpoint do serviço.
  • É necessário ter o URI do anexo de serviço para o serviço. Por exemplo, projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

Crie um endpoint

Um endpoint se conecta aos serviços em outra rede VPC usando uma regra de encaminhamento do Private Service Connect. Cada regra de encaminhamento é contabilizada na cota por projeto das regras de encaminhamento do Private Service Connect para acessar serviços em outra rede VPC.

Quando você cria um endpoint, ele é registrado automaticamente no Diretório de serviços, usando um namespace escolhido ou o namespace padrão goog-psc-default.

Se você quiser disponibilizar o endpoint de mais de uma região, ative o acesso global.

Só é possível atualizar o campo de acesso global dos endpoints em serviços publicados. Se você quiser atualizar outros campos, exclua o endpoint e crie um novo.

Console

  1. No Console do Google Cloud, acesse a página do Private Service Connect.

    Acessar a página "Private Service Connect"

  2. Clique na guia Endpoints conectados.

  3. Clique em Conectar endpoint.

  4. Em Destino, selecione Serviço publicado.

  5. Em Serviço de destino, digite o URI do anexo de serviço ao qual você quer se conectar.

    O URI do anexo de serviço está neste formato: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

  6. Em Nome do endpoint, digite um nome para usar o endpoint.

  7. Selecione uma Rede para o endpoint.

  8. Selecione uma Sub-rede para o endpoint.

  9. Selecione um Endereço IP para o endpoint. Se você precisar de um novo endereço IP, crie um:

    1. Clique no menu suspenso Endereço IP e selecione Criar endereço IP.
    2. Digite um Nome e uma Descrição opcional para o endereço IP.
    3. Selecione uma versão do IP.
    4. Se você estiver criando um endereço IPv4, selecione Atribuir automaticamente ou Deixe-me escolher. Se você selecionou Quero escolher, insira o Endereço IP personalizado que quer usar.

    5. Clique em Reservar.

  10. Para disponibilizar o endpoint a partir de qualquer região, selecione Ativar acesso global.

  11. Selecione um Namespace na lista suspensa ou crie um novo namespace.

    A Região é preenchida com base na sub-rede selecionada.

  12. Clique em Adicionar endpoint.

gcloud

  1. Reserve um endereço IP interno para atribuir ao endpoint.

    gcloud compute addresses create ADDRESS_NAME \
        --region=REGION \
        --subnet=SUBNET \
        --ip-version=IP_VERSION
    

    Substitua:

    • ADDRESS_NAME: o nome a ser atribuído ao endereço IP reservado.

    • REGION: a região do endereço IP do endpoint. Precisa ser a mesma região que contém o anexo de serviço do produtor de serviço.

    • SUBNET: o nome da sub-rede do endereço IP do endpoint.

    • IP_VERSION: a versão do IP do endereço IP, que pode ser IPV4 ou IPV6. O padrão é IPV4. Para especificar IPV6, o endereço IP precisa estar conectado a uma sub-rede de pilha dupla que tenha um intervalo de endereços IPv6 interno.
  2. Encontre o endereço IP reservado.

    gcloud compute addresses list --filter="name=ADDRESS_NAME"
    
  3. Crie uma regra de encaminhamento para conectar o endpoint ao anexo de serviço do produtor de serviço. Por padrão, os endpoints estão disponíveis apenas na própria região. Para disponibilizar um endpoint de qualquer região, use a sinalização --allow-psc-global-access.

    • Crie um endpoint que só possa ser acessado na própria região.

      gcloud compute forwarding-rules create ENDPOINT_NAME \
        --region=REGION \
        --network=NETWORK_NAME \
        --address=ADDRESS_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT \
        [ --service-directory-registration=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE ]
      
    • Crie um endpoint que possa ser acessado de qualquer região.

      gcloud compute forwarding-rules create ENDPOINT_NAME \
        --region=REGION \
        --network=NETWORK_NAME \
        --address=ADDRESS_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT \
        --allow-psc-global-access \
        [ --service-directory-registration=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE ]
      

    Substitua:

    • ENDPOINT_NAME: o nome a ser atribuído ao endpoint.

    • REGION: a região do endpoint. Precisa ser a mesma região que contém o anexo de serviço do produtor de serviço.

    • NETWORK_NAME: o nome da rede VPC do endpoint.

    • ADDRESS_NAME: o nome do endereço reservado.

    • SERVICE_ATTACHMENT: o URI do anexo de serviço do produtor de serviço. Por exemplo: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • PROJECT_ID: o ID do projeto.

    • NAMESPACE: o namespace do Diretório de serviços que você quer usar. Se você especificar um namespace que não existe, o namespace será criado.

      Se você omitir a sinalização --service-directory-registration, o namespace padrão de goog-psc-default será usado.

API

  1. Reserve um endereço IP interno para atribuir ao endpoint.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
    
    {
      "name": "ADDRESS_NAME",
      "addressType": "INTERNAL",
      "subnetwork": "SUBNET_URI",
      "ipVersion": "IP_VERSION"
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto.

    • ADDRESS_NAME: o nome a ser atribuído ao endereço IP reservado.

    • SUBNET_URI: a sub-rede do endereço IP. Use o método network.list ou gcloud compute networks subnets list --uri para encontrar os URLs das suas redes.

    • IP_VERSION: a versão do IP do endereço IP, que pode ser IPV4 ou IPV6. O padrão é IPV4. Para especificar IPV6, o endereço IP precisa estar conectado a uma sub-rede de pilha dupla que tenha um intervalo de endereços IPv6 interno.
  2. Crie uma regra de encaminhamento para conectar o endpoint ao anexo de serviço do produtor de serviço. Por padrão, os endpoints estão disponíveis apenas na própria região. Para disponibilizar um endpoint de qualquer região, defina allowPscGlobalAccess como true.

    • Crie um endpoint que só possa ser acessado na própria região.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules
      {
        "name": "ENDPOINT_NAME",
        "IPAddress": "ADDRESS_URI",
        "target": "SERVICE_ATTACHMENT",
        "network": "NETWORK_URI",
        "serviceDirectoryRegistrations": [
            {
                "namespace": "NAMESPACE"
            }
        ]
      }
      
    • Crie um endpoint que possa ser acessado de qualquer região.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules
      {
        "name": "ENDPOINT_NAME",
        "IPAddress": "ADDRESS_URI",
        "target": "SERVICE_ATTACHMENT",
        "network": "NETWORK_URI",
        "allowPscGlobalAccess": true,
        "serviceDirectoryRegistrations": [
            {
                "namespace": "NAMESPACE"
            }
        ]
      }
      

    Substitua:

    • PROJECT_ID: o ID do projeto.

    • REGION: a região do endpoint.

    • ENDPOINT_NAME: o nome a ser atribuído ao endpoint.

    • ADDRESS_URI: o URL do endereço reservado na rede associada. Use o método endereços.list ou gcloud compute addresses list --uri para encontrar o URL do seu endereço reservado.

    • SERVICE_ATTACHMENT: o URI do anexo de serviço do produtor de serviços. Por exemplo: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • NETWORK_URI: a rede VPC do endpoint. Use o método network.list ou gcloud compute networks list --uri para encontrar o URI da sua rede.

    • NAMESPACE: o namespace do endpoint. Se você especificar um namespace que não existe, o namespace será criado. Se você omitir o campo namespace, o namespace padrão de goog-psc-default será atribuído.

Criar um endpoint com um endereço IP de uma rede VPC compartilhada

Os administradores de projetos de serviço podem criar endpoints em projetos de serviço de VPC compartilhada que usam endereços IP de redes VPC compartilhadas conectadas. A criação de endpoints desse tipo não está disponível no console do Google Cloud. Você precisa usar o Google Cloud CLI ou enviar uma solicitação de API. Para mais informações, consulte VPC compartilhada.

Neste exemplo, mostramos como criar um endpoint com um endereço IP de uma rede VPC compartilhada que pode ser acessada de uma única região. Para ativar o acesso global ou escolher um namespace para o Diretório de serviços, consulte Criar um endpoint.

gcloud

  1. Para reservar um endereço IP interno e atribuir ao endpoint, siga um destes procedimentos:
  2. No projeto de serviço, crie o endpoint:

    gcloud compute forwarding-rules create ENDPOINT_NAME \
        --region=REGION \
        --network=projects/HOST_PROJECT/global/networks/HOST_NETWORK \
        --address=projects/ADDRESS_PROJECT/regions/REGION/addresses/ADDRESS_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT
    

    Substitua:

    • ENDPOINT_NAME: o nome a ser atribuído ao endpoint.
    • REGION: a região do endpoint. Precisa ser a mesma região que contém o anexo de serviço do produtor de serviço.
    • HOST_PROJECT: o ID do projeto da rede VPC compartilhada.
    • HOST_NETWORK: o nome da rede VPC compartilhada que contém o endereço IP do endpoint.
    • ADDRESS_PROJECT: o ID do projeto em que você reservou o endereço IP. Pode ser o projeto de serviço ou o projeto host.
    • ADDRESS_NAME: o nome do endereço IP reservado.
    • SERVICE_ATTACHMENT: o URI do anexo de serviço do produtor de serviço. Por exemplo: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

API

  1. Para reservar um endereço IP interno e atribuir ao endpoint, siga um destes procedimentos:

  2. No projeto de serviço, crie o endpoint:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules
    {
       "name": "ENDPOINT_NAME",
       "IPAddress": "projects/ADDRESS_PROJECT/regions/REGION/addresses/ADDRESS_NAME",
       "target": "SERVICE_ATTACHMENT",
       "network": "projects/HOST_PROJECT/global/networks/HOST_NETWORK"
    }
    

    Substitua:

    • PROJECT: o ID do projeto de serviço.
    • REGION: a região do endpoint. Precisa ser a mesma região que contém o anexo de serviço do produtor de serviço.
    • ENDPOINT_NAME: o nome a ser atribuído ao endpoint.
    • ADDRESS_PROJECT: o ID do projeto em que você reservou o endereço IP. Pode ser o projeto de serviço ou o projeto host.
    • ADDRESS_NAME: o nome do endereço IP reservado.
    • SERVICE_ATTACHMENT: o URI do anexo de serviço do produtor de serviço. Por exemplo: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
    • HOST_PROJECT: o ID do projeto da rede VPC compartilhada.
    • HOST_NETWORK: o nome da rede VPC compartilhada que contém o endereço IP do endpoint.

Listar endpoints

É possível listar todos os endpoints configurados.

Console

  1. No Console do Google Cloud, acesse a página do Private Service Connect.

    Acessar a página "Private Service Connect"

  2. Clique na guia Endpoints conectados.

    Os endpoints são exibidos.

gcloud

gcloud compute forwarding-rules list \
    --filter 'target~serviceAttachments'

A resposta será semelhante a:

NAME  REGION  IP_ADDRESS  IP_PROTOCOL  TARGET
RULE          IP          TCP          REGION/serviceAttachments/SERVICE_NAME

API

Essa chamada de API retorna todas as regras de encaminhamento, não apenas os endpoints usados para acessar serviços.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules

Substitua:

  • PROJECT_ID: o projeto que contém o endpoint.
  • REGION: a região do endpoint.

Ver detalhes do endpoint

É possível visualizar todos os detalhes de configuração de um endpoint, incluindo o status da conexão do endpoint.

Console

  1. No Console do Google Cloud, acesse a página do Private Service Connect.

    Acessar a página "Private Service Connect"

  2. Clique na guia Endpoints conectados.

  3. Clique no endpoint que você quer visualizar.

gcloud

gcloud compute forwarding-rules describe \
    ENDPOINT_NAME --region=REGION

Substitua:

  • ENDPOINT_NAME: o nome do endpoint.
  • REGION: a região do endpoint.

API

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/ENDPOINT_NAME

Substitua:

  • PROJECT_ID: o projeto que contém o endpoint.
  • REGION: a região do endpoint.
  • ENDPOINT_NAME: o nome do endpoint.

Rotular um endpoint

É possível gerenciar rótulos para endpoints. Para instruções detalhadas, consulte Como rotular recursos.

Excluir um endpoint

É possível excluir um endpoint.

No entanto, as seguintes configurações do diretório de serviços não são excluídas quando você exclui o endpoint:

  • Namespace do diretório de serviços
  • Zona de DNS do Diretório de serviços

O namespace do Diretório de serviços e a zona DNS do Diretório de serviços podem ser usados por outros serviços. Verifique se o namespace está vazio antes de excluir o namespace do Diretório de serviços ou excluir a zona de DNS do Diretório de serviços.

Console

  1. No Console do Google Cloud, acesse a página do Private Service Connect.

    Acessar a página "Private Service Connect"

  2. Clique na guia Endpoints conectados.

  3. Selecione o endpoint que você quer excluir e clique em Excluir.

gcloud

    gcloud compute forwarding-rules delete \
        ENDPOINT_NAME --region=REGION

Substitua:

  • ENDPOINT_NAME: o nome do endpoint.
  • REGION: a região do endpoint.

API

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/ENDPOINT_NAME

Substitua:

  • PROJECT_ID: o projeto que contém o endpoint.
  • REGION: a região do endpoint.
  • ENDPOINT_NAME: o nome do endpoint.

Acessar endpoints de redes híbridas

Os clientes em redes conectadas ao Google Cloud com anexos da VLAN para túneis do Cloud Interconnect ou do Cloud VPN podem alcançar endpoints do Private Service Connect.

  • O anexo da VLAN ou o túnel do Cloud VPN precisa terminar na mesma rede VPC (ou rede VPC compartilhada) como endpoint. Os clientes em redes VPC com peering não podem alcançar os endpoints.

  • O tráfego de cliente de anexos da VLAN ou túneis do Cloud VPN pode alcançar endpoints em outra região se o acesso global estiver configurado.

  • O Dataplane v1 e o Dataplane v2 têm suporte para os anexos da VLAN. Para mais informações sobre as versões do Dataplane, consulte Dataplane v2.

Se você quiser acessar o endpoint do Private Service Connect usando o nome de DNS, configure sistemas na outra rede para que eles possam fazer consultas às zonas de DNS particulares.

Se você tiver implementado as zonas de DNS particular usando o Cloud DNS, conclua estas etapas:

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

  • Identifique os pontos de entrada do encaminhador de entrada na região em que o anexo da VLAN ou o túnel do Cloud VPN está localizado, na rede VPC a que sua outra rede se conecta.

  • Configure sistemas e servidores de nomes DNS na outra rede para encaminhar os Nomes DNS para o endpoint a um ponto de entrada do encaminhador de entrada na mesma região do anexo da VLAN ou do túnel do Cloud VPN que se conecta à rede VPC.

Visualizar zonas de DNS do Diretório de serviços

Se os pré-requisitos da configuração automática de DNS forem atendidos, uma zona DNS é criada com um nome no formato NAMESPACE--REGION.

Console

  1. No Console do Google Cloud, acesse a página Zonas do Cloud DNS.

    Acessar zonas do Cloud DNS

  2. Procure uma zona particular com o nome NAMESPACE--REGION.

gcloud

  • Execute o seguinte comando para listar todas as zonas DNS particulares:

    gcloud dns managed-zones list \
        --filter="visibility=private"
    
  • Execute o comando a seguir para ver os detalhes de uma zona com o nome NAMESPACE--REGION.

    gcloud dns managed-zones describe NAMESPACE--REGION
    

Se a zona não estiver presente, visualize os detalhes do endpoint e verifique se a configuração do endpoint inclui um valor para o namespace.

Outras maneiras de configurar o DNS

Se os pré-requisitos da configuração automática de DNS não forem atendidos, é possível criar entradas DNS de outras maneiras:

Configurar uma zona de DNS do diretório de serviços

Se um endpoint estiver registrado no Diretório de serviços, mas o serviço publicado ao qual ele se conecta não tiver um nome de domínio configurado, nenhuma alteração de DNS será feita.

Se você quiser replicar a configuração automática de DNS, é possível configurar manualmente uma zona DNS do Diretório de serviços com suporte do namespace do Diretório de serviços. Depois que a zona é criada, as entradas DNS do endpoint são criadas automaticamente.

Crie uma zona do Diretório de serviços com a seguinte configuração:

  • Nome da zona: especifique NAMESPACE--REGION, em que NAMESPACE é o namespace em que o endpoint é registrado e REGION é a região em que o endpoint é criado.

  • Nome do DNS: o domínio DNS que o fornecedor de serviços está usando para os serviços publicados. Consulte o produtor de serviços para saber mais.

    O nome do DNS pode ter o formato REGION.p.DOMAIN. Por exemplo, se o domínio público do produtor de serviços for example.com e o serviço publicado estiver em us-west1, recomendamos que ele disponibilize o serviço usando os nomes de domínio us-west1.p.example.com. Inclua um ponto à direita, por exemplo, us-west1.p.example.com.

  • Namespace do diretório de serviços: o namespace que você configurou para este endpoint.

Visualize os detalhes do endpoint para encontrar o namespace e a região do Diretório de serviços.

Com essa configuração, se você tiver configurado uma zona DNS do Diretório de serviços com o nome DNS us-west1.p.example.com e criar um endpoint com o nome analytics, um registro DNS para analytics.us-west1.p.example.com é criada automaticamente.

Registrar um endpoint com o Diretório de serviços

Novos endpoints são registrados automaticamente no Diretório de serviços. No entanto, se um endpoint foi criado antes da ativação do registro automático com o Diretório de serviços, essa configuração pode estar ausente.

É possível excluir o endpoint e criar um novo, que é registrado no Diretório de serviços automaticamente.

Se preferir, siga estas etapas para registrar um endpoint atual com um namespace do Diretório de serviços.

  1. Crie um namespace do Diretório de serviços para o endpoint NAMESPACE.

  2. Crie um serviço do diretório de serviços para o endpoint SERVICE_NAME.

    Para o serviço, use o mesmo nome da regra de encaminhamento usada para o endpoint, ENDPOINT_NAME.

  3. Crie um endpoint do diretório de serviços usando o nome default e o endereço IP e a porta (443) do endpoint.

Depois de registrar o endpoint no Diretório de serviços, siga as instruções para Configurar uma zona DNS do Diretório de serviços.

Configurar o DNS manualmente

Se você tiver impedido a configuração automática de DNS ou se ela não estiver ativada na configuração, poderá usar o Cloud DNS para criar registros DNS manualmente.

Para mais informações, consulte as seguintes páginas:

  • Controle de acesso: o papel de Administrador de DNS (roles/dns.admin) fornece as permissões necessárias para criar zonas e registros DNS.

  • Criar uma zona particular.

    • Ao configurar uma zona particular, você fornece um nome de DNS. Use o domínio DNS que o fornecedor de serviços está usando para os serviços publicados. Consulte o produtor de serviços para saber mais.

      Ele pode ter o seguinte formato: REGION.p.DOMAIN. Por exemplo, se o domínio público do produtor de serviços for example.com e o serviço publicado estiver em us-west1, recomendamos que ele disponibilize o serviço usando os nomes de domínio us-west1.p.example.com.

  • Adicionar um registro.

Solução de problemas

Falha na criação da zona de DNS privado

Quando você cria um endpoint, uma zona DNS do diretório de serviços é criada. A criação da zona pode falhar por estes motivos:

  • Você não ativou a API do Cloud DNS no projeto.

  • Você não tem as permissões necessárias para criar uma zona de DNS do Diretório de serviços.

  • Há uma zona DNS com o mesmo nome de zona nessa rede VPC.

  • Já existe uma zona DNS para o mesmo nome de domínio nesta rede VPC.

Para criar a zona DNS do Diretório de serviços, faça o seguinte:

  1. Verifique se a API do Cloud DNS está ativada no projeto.

  2. Verifique se você tem as permissões necessárias para criar a zona DNS do Diretório de serviços:

    • dns.managedZones.create
    • dns.networks.bindPrivateDNSZone
    • servicedirectory.namespaces.associatePrivateZone
  3. Se houver uma zona conflitante, mas ela não for mais necessária, exclua a zona DNS.

  4. Crie uma zona DNS do Diretório de serviços que tenha o namespace do Diretório de serviços associado ao seu endpoint.

A criação do endpoint falha quando o acesso global é configurado.

Nem todos os serviços publicados do Private Service Connect são compatíveis com endpoints com acesso global. Se você criar um endpoint com acesso global e o serviço publicado não for compatível, você verá esta mensagem de erro:

Private Service Connect global access is not supported for the given forwarding rule, since its producer service does not support consumer global access.

Crie o endpoint sem a opção de acesso global.

O endpoint foi criado, mas a conectividade não foi estabelecida

Se você tiver criado um endpoint para os serviços publicados, mas a conectividade não tiver sido estabelecida, verifique o status da conexão do endpoint. O status da conexão pode indicar as etapas que você pode seguir para resolver o problema.