gRPC 直接连接

直接连接是一种连接解决方案,可在 Google Cloud 客户端库和 Cloud Storage 之间建立经过身份验证的高性能直接 gRPC 网络连接,从而减少延迟时间和连接开销。当您通过直接连接使用 gRPC 连接到 Google Cloud时,通过受支持的 Google Cloud客户端库发起的请求会直接路由到 Cloud Storage,从而绕过 Google Front End (GFE)

直接连接仅适用于从 Compute Engine 虚拟机 (VM) 发出的请求。

直接连接的要求

当您使用受支持的 Cloud Storage 客户端库连接到 Cloud Storage 时,直接连接默认处于启用状态,但仅当满足以下所有条件时,才会成为可用状态:

  • 与 Cloud Storage 交互的 Compute Engine 虚拟机必须具有关联的服务账号,即使该服务账号没有任何权限也是如此。该服务账号用于在应用层传输安全握手过程中代表 Compute Engine 虚拟机。

  • 与 Cloud Storage 存储桶交互的 Compute Engine 虚拟机必须与相应存储桶位于同一位置。例如,如果存储桶位于 us-central1,则虚拟机可以位于 us-central1-a。 如果存储桶位于多区域位置或双区域位置,则虚拟机必须位于构成多区域位置或双区域位置的某个区域中。例如,如果存储桶位于 us 多区域位置,则虚拟机可以位于 us-east4-c

    如需详细了解存储桶位置,请参阅位置

  • 您的路由防火墙规则允许 IPv4 流量到达 34.126.0.0/18,并允许 IPv6 流量到达 2001:4860:8040::/42。此外,还必须允许流量到达端点 storage.googleapis.com:443directpath-pa.googleapis.com:443

    如需了解如何检查是否可以连接到这些端点,请参阅检查网络配置。如需了解如何设置路由,请参阅配置路由

  • Cloud Storage 客户端库具有特定的凭证要求,以便向 Cloud Storage 验证应用的身份并实现直接连接:

    • Java 客户端库需要用户账号凭证或服务账号凭证。

    • C++ 客户端库需要服务账号凭证。

    • Go 客户端库需要服务账号凭证。1.52.0 之前的版本需要访问存储桶的虚拟机的默认服务账号凭证。

    如需查看虚拟机用于向 Cloud Storage 进行身份验证的账号的名称,请使用 gcloud auth list 命令:

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

    如果您使用的是 Go 客户端库,并且需要检查用于进行身份验证的 Google 账号是否与虚拟机的默认服务账号匹配,请使用 gcloud compute instances describe 命令:

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

    INSTANCE_NAME 替换为您的实例名称。

    如需详细了解身份验证,请参阅 Google 身份管理概览

使用 Google Cloud CLI 检查连接

Google Cloud CLI 可以通过使用 gcloud storage buckets describe gs://example-bucket 向存储桶发出 GET 调用,以测试存储桶的直接连接诊断。本部分介绍如何使用 Google Cloud CLI 对直接连接执行诊断测试。

准备工作

  1. 确保您拥有存储桶的 storage.buckets.get IAM 权限,该权限可以使用 Storage Legacy Bucket Reader (roles/storage.legacyBucketReader) 角色来授予

  2. gcloud alpha storage diagnose 命令仅适用于 Google Cloud CLI 531.0.0 版或更高版本。如需使用此命令,建议您升级到最新版本的 Google Cloud CLI

运行诊断

如需检查直接连接是否可用,请运行带有参数 --test-type=DIRECT_CONNECTIVITYgcloud alpha storage diagnose

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

替换以下内容:

  • BUCKET_NAME:存储桶的名称。例如 my-bucket

如果可以建立连接,您会收到类似于以下内容的响应:

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. │
    └────────────────────────────┴─────────────────────────────────────────────────────────────────────────┴──────────┘

检查网络配置

如果您在使用 Google Cloud CLI 检查直接连接时遇到 Unable to connect to Traffic Director 错误,请按照以下说明操作,确保您的网络配置允许流量从虚拟机传递到所需端点。

直接连接需要在 directpath-pa.googleapis.com:443storage.googleapis.com:443 托管的服务。如需检查是否可以连接到服务,请对 directpath-pa.googleapis.com:443storage.googleapis.com:443 进行 curl 调用。例如:

curl directpath-pa.googleapis.com:443

如果可以建立连接,您会收到一个没有错误的空响应:

curl: (52) Empty reply from server

如果无法建立连接,您会收到类似于以下内容的错误:

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

限制

直接连接不支持 Private Service Connect。