直接连接是一种连接解决方案,可在 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 对直接连接执行诊断测试。
准备工作
确保您拥有存储桶的
storage.buckets.getIAM 权限,该权限可以使用 Storage Legacy Bucket Reader (roles/storage.legacyBucketReader) 角色来授予。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。