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:443 和 directpath-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_CONNECTIVITY 的 gcloud 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:443 和 storage.googleapis.com:443 托管的服务。如需检查是否可以连接到服务,请对 directpath-pa.googleapis.com:443 或 storage.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。