Conectividade direta do gRPC

A conectividade direta é uma solução de conexão que permite conexões de rede gRPC diretas, de alta performance, autenticadas entre uma Google Cloud biblioteca de cliente e o Cloud Storage, resultando em menor latência e sobrecarga de conexão. Ao usar o gRPC para se conectar a Google Cloud usando a conectividade direta, as solicitações iniciadas por bibliotecas de cliente compatíveis Google Cloud são encaminhadas diretamente para o Cloud Storage, ignorando os front-ends do Google (GFEs).

A conectividade direta só está disponível para solicitações feitas em máquinas virtuais (VMs) do Compute Engine.

Requisitos para conectividade direta

A conectividade direta é ativada por padrão quando você usa bibliotecas de cliente do Cloud Storage compatíveis para se conectar ao Cloud Storage, mas só fica disponível se todas as condições a seguir forem atendidas:

  • As VMs do Compute Engine que interagem com o Cloud Storage precisam ter uma conta de serviço anexada, mesmo que ela não tenha permissões. A conta de serviço é usada para representar a VM do Compute Engine no processo de handshake de Application Layer Transport Security.

  • As VMs do Compute Engine que interagem com um bucket do Cloud Storage precisam estar colocalizadas com o bucket. Por exemplo, se o bucket estiver em us-central1, a VM poderá estar em us-central1-a. Se o bucket estiver em um local birregional ou multirregional, a VM precisará estar em uma região que compõe o local birregional ou multirregional. Por exemplo, se um bucket estiver localizado na us multirregião, a VM poderá estar em us-east4-c.

    Para mais informações sobre locais de bucket, consulte Locais.

  • Suas rotas e regras de firewall permitem que o tráfego IPv4 chegue a 34.126.0.0/18 e o tráfego IPv6 chegue a 2001:4860:8040::/42. Além disso, o tráfego precisa ter permissão para acessar os endpoints storage.googleapis.com:443 e directpath-pa.googleapis.com:443.

    Para saber como verificar se uma conexão pode ser feita com esses endpoints, consulte Verificar configurações de rede. Para informações sobre como configurar rotas, consulte Configurar rotas.

  • As bibliotecas de cliente do Cloud Storage têm requisitos de credenciais específicos para autenticar aplicativos no Cloud Storage e ter conectividade direta disponível:

    • A biblioteca de cliente Java exige credenciais de conta de usuário ou de conta de serviço.

    • A biblioteca de cliente C++ exige credenciais de conta de serviço.

    • A biblioteca de cliente Go exige credenciais de conta de serviço. As versões anteriores à 1.52.0 exigem as credenciais de conta de serviço padrão da VM que acessa o bucket.

    Para conferir o nome da conta que a VM usa para autenticar no Cloud Storage, use o comando gcloud auth list:

    gcloud auth list --filter=status:ACTIVE --format="value(account)"
    

    Se você estiver usando a biblioteca de cliente Go e precisar verificar se a Google conta usada para autenticar corresponde à conta de serviço padrão da VM, use o gcloud compute instances describe comando:

    gcloud compute instances describe INSTANCE_NAME --format='yaml(serviceAccounts)'
    

    Substitua INSTANCE_NAME pelo nome da instância.

    Para mais informações sobre autenticação, consulte Visão geral dogerenciamento de identidade. Google

Verificar a conectividade usando a Google Cloud CLI

A CLI do Google Cloud pode testar os diagnósticos de conectividade direta no bucket emitindo uma chamada GET para o bucket usando gcloud storage buckets describe gs://example-bucket. Esta seção descreve como realizar um teste de diagnóstico para conectividade direta usando a Google Cloud CLI.

Antes de começar

  1. Verifique se você tem a permissão storage.buckets.get do IAM no bucket, que pode ser concedida usando o papel Leitor de bucket legado do Storage (roles/storage.legacyBucketReader).

  2. O comando gcloud alpha storage diagnose só está disponível na versão 531.0.0 ou mais recente da Google Cloud CLI. Para usar esse comando, recomendamos fazer upgrade para a versão mais recente da Google Cloud CLI.

Executar o diagnóstico

Para verificar se a conectividade direta está disponível, execute gcloud alpha storage diagnose com o argumento --test-type=DIRECT_CONNECTIVITY:

gcloud alpha storage diagnose --test-type=DIRECT_CONNECTIVITY gs://BUCKET_NAME

Substitua:

  • BUCKET_NAME: o nome do bucket. Por exemplo, my-bucket.

Se uma conexão puder ser feita, você receberá uma resposta semelhante a esta:

Using my-bucket bucket for the diagnostic tests.
Bucket location : US
Bucket storage class : STANDARD
Running diagnostic: Direct Connectivity Diagnostic...
WARNING: This diagnostic is experimental. The output may change, and checks may be added or removed at any time. Please do not rely on the diagnostic being present.
Finished running diagnostic: Direct Connectivity Diagnostic
Generating diagnostic report...
NAME
Direct Connectivity Diagnostic
    ┌────────────────────────────┬─────────────────────────────────────────────────────────────────────────┬──────────┐
    │            NAME            │                           PAYLOAD_DESCRIPTION                           │  RESULT  │
    ├────────────────────────────┼─────────────────────────────────────────────────────────────────────────┼──────────┤
    │ Direct Connectivity Call   │ Able to get bucket metadata using Direct Connectivity network path.     │ Success. │
    └────────────────────────────┴─────────────────────────────────────────────────────────────────────────┴──────────┘

Verificar configurações de rede

Se você encontrar um erro Unable to connect to Traffic Director ao verificar a conectividade direta usando a Google Cloud CLI, use as instruções a seguir para garantir que as configurações de rede permitam que o tráfego passe das VMs para os endpoints necessários.

A conectividade direta exige um serviço hospedado em directpath-pa.googleapis.com:443 e em storage.googleapis.com:443. Para verificar se uma conexão pode ser feita com o serviço, faça uma chamada curl para directpath-pa.googleapis.com:443 ou storage.googleapis.com:443. Exemplo:

curl directpath-pa.googleapis.com:443

Se uma conexão puder ser feita, você receberá uma resposta vazia sem erros:

curl: (52) Empty reply from server

Se uma conexão não puder ser feita, você receberá um erro semelhante a este:

curl: (56) Recv failure: Connection reset by peer

Limitações

A conectividade direta não oferece suporte ao Private Service Connect.

Solução de problemas

Esta seção fornece detalhes e soluções para erros que podem ocorrer ao usar a conectividade direta do gRPC.

Muitos arquivos abertos

Problema: ao usar a conectividade direta do gRPC, seu aplicativo pode manter um número maior de conexões simultâneas com o Cloud Storage do que as APIs REST. Em ambientes com alto paralelismo, isso pode exceder o limite de descritor do arquivo do sistema operacional, resultando em um erro too many open files. Esse erro pode ocorrer quando você estiver usando a Google Cloud CLI.

Solução: para resolver esse problema, escolha um dos seguintes métodos:

  • Defina o número máximo de arquivos abertos para seu processo usando ulimit -n $(ulimit -Hn).

  • Diminua o número de tarefas simultâneas permitidas usando o comando gcloud config set com as propriedades storage/process_count e storage/thread_count. Recomendamos um valor máximo de 12 tarefas. Para mais detalhes, consulte a gcloud config set referência. Diminuir o número de tarefas simultâneas permitidas reduz o paralelismo e pode afetar a performance.