直接连接是一种连接解决方案,可在 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.get
IAM 权限,该权限可以使用 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。