gRPC 是一个由 Google 开发的高性能开源通用 RPC 框架,您可以使用它通过协议缓冲区定义服务。您可以使用 gRPC 与 Cloud Storage 进行交互。gRPC 利用 Compute Engine 实例与 Cloud Storage 存储桶之间的直接连接,绕过 Google Front End (GFE)。
您可以通过以下受支持的客户端使用 gRPC 连接到 Cloud Storage:
Cloud Storage C++、Go 和 Java 客户端库。如需了解如何为这些客户端库启用 gRPC,请参阅在客户端库中启用 gRPC。
Cloud Storage FUSE。 您可以使用 Cloud Storage FUSE 作为客户端,方法是通过 gcsfuse CLI 使用 Cloud Storage FUSE 配置文件或
--client-protocol
选项在client-protocol
字段中指定grpc
。如需将 gRPC 与 Cloud Storage FUSE 搭配使用,我们建议使用 Cloud Storage FUSE 2.10.0 版或更高版本。
在客户端库中启用 gRPC
C++
准备工作
确保您已安装以下版本:
gRPC 1.65.1 或更高版本
C++ 客户端库 v2.30.0 或更高版本
C++ 14 或更高版本
如需查看安装说明,请参阅设置 C++ 开发环境。
确保每个 Compute Engine 实例都关联了服务账号,即使该服务账号没有任何权限也是如此。此服务账号用于在应用层传输安全 (ALTS) 握手过程中代表 Compute Engine 实例,并且是直接连接所必需的。
配置 C++ 客户端库
使用
gcs::MakeGrpcClient()
创建 gRPC 客户端:namespace gcs = google::cloud::storage; void App() { auto client = gcs::MakeGrpcClient(); // application code }
C++ 客户端库在检测到应用在 Trusted Cloud by S3NS上运行时,会自动使用直接连接。
如需将 C++ 客户端库配置为使用 gRPC,请启用 Cloud Storage gRPC 客户端以更新 CMake 或 Bazel 的构建系统配置。
CMake
在编译时启用 Cloud Storage gRPC 客户端插件。
cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
在您的代码库中,对于
target_link_libraries()
命令,将google-cloud-cpp::storage
替换为google-cloud-cpp::storage_grpc
例如,gRPC 的快速入门程序使用以下代码:
add_executable(quickstart_grpc quickstart_grpc.cc) target_link_libraries(quickstart_grpc google-cloud-cpp::storage_grpc)
Bazel
将依赖项
@google_cloud_cpp//:storage
替换为@google_cloud_cpp//:storage_grpc
。例如,gRPC 的快速入门程序使用以下代码:
cc_binary( name = "quickstart", srcs = [ "quickstart.cc", ], deps = [ "@com_github_googleapis_google_cloud_cpp//:storage_grpc", ], )
Java
准备工作
确保您已安装以下版本:
Java 客户端库:
com.google.cloud:google-cloud-storage:2.43.1
或更高版本。com.google.cloud:libraries-bom:26.48
或更高版本。
Java 8 或更高版本
如需查看安装说明,请参阅设置 Java 开发环境。
确保每个 Compute Engine 实例都关联了服务账号,即使该服务账号没有任何权限也是如此。此服务账号用于在应用层传输安全 (ALTS) 握手过程中代表 Compute Engine 实例,并且是直接连接所必需的。
更新项目以使用 BOM
如需确保项目使用兼容的 Trusted Cloud by S3NS 客户端库版本,请使用 Trusted Cloud by S3NS 库物料清单 (BOM) 中指定的版本。如需更新项目以使用 BOM,请使用以下任一方法:
独立 Cloud Storage
如果您独立使用 Cloud Storage 客户端库(不使用其他Trusted Cloud by S3NS 库),请使用 Cloud Storage 客户端库专用 BOM。
Maven
在 pom.xml
文件的 dependencyManagement
部分中导入 BOM。
以下示例展示了如何导入 BOM 并包含 google-cloud-storage
制品。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage-bom</artifactId>
<version>2.43.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
</dependency>
</dependencies>
Gradle
添加对 com.google.cloud:google-cloud-storage-bom
的平台依赖项:
implementation platform('com.google.cloud:google-cloud-storage-bom:2.43.1')
implementation 'com.google.cloud:google-cloud-storage'
Cloud Storage 与其他 Trusted Cloud 库
如果您将 Cloud Storage 客户端库与其他 Trusted Cloud 库一起使用,请使用 Trusted Cloud 客户端库 BOM。
Maven
在 pom.xml
文件的 dependencyManagement
部分中导入 BOM。
以下示例展示了如何导入 BOM 并包含 libraries-bom
制品。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.48.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
</dependency>
</dependencies>
Gradle
添加对 com.google.cloud:libraries-bom
的平台依赖项:
implementation platform('com.google.cloud:libraries-bom:26.48.0')
implementation 'com.google.cloud:google-cloud-storage'
创建 gRPC 客户端
以下示例使用以 gRPC 为中心的构建器。gRPC Java 客户端在检测到应用在 Trusted Cloud上运行时,会自动使用直接连接。
Go
准备工作
确保您使用的是 Cloud Storage Go 客户端库 1.46.0 或更高版本。
确保每个 Compute Engine 实例都关联了服务账号,即使该服务账号没有任何权限也是如此。此服务账号用于在应用层传输安全 (ALTS) 握手过程中代表 Compute Engine 实例,并且是直接连接所必需的。
创建 gRPC 客户端
如需使用该客户端,您需要在应用中调用 NewGRPCClient
构造函数,而不是 NewClient
。
Go 客户端库在检测到应用在 Trusted Cloud上运行时,会自动使用直接连接。
如需了解如何使用 gRPC 客户端,请参阅 gRPC API。
配置 VPC Service Controls
如果您使用虚拟私有云和受限虚拟 IP 地址 (VPC Service Controls) 来增强网络安全性,则需要更新防火墙规则以启用直接连接,以在 Compute Engine 实例和 Cloud Storage 存储桶之间实现最佳性能。
为此,请添加许可名单防火墙规则,以允许以下 CIDR 地址块在所有端口上的流量:
- 对于 IPv4 流量:
34.126.0.0/18
- 对于 IPv6 流量:
2001:4860:8040::/42
除了上述规则之外,请保留针对 199.36.153.4/30
的现有许可名单规则。
如果您对防火墙规则修改有限制,并且无法更新防火墙规则,则可以使用 storage.googleapis.com
作为 Cloud Storage 端点(而不是 google-c2p://storage.googleapis.com
),从而强制流量避免直接连接。
例如,对于 C++,使用 .set<google::cloud::EndpointOption>(storage.googleapis.com)
而非 google-c2p:///storage.googleapis.com
。
为 gRPC 相关请求启用可观测性
您可以配置 Cloud Storage 客户端库,以在 Cloud Monitoring 中生成 gRPC 相关指标。gRPC 相关指标可帮助您执行以下操作:
监控和优化对 Cloud Storage 发出的 gRPC 请求的性能。
排查和调试问题。
深入了解应用的使用情况和行为。
如需了解如何生成 gRPC 相关指标,请参阅使用客户端指标。
如果您的用例不需要收集指标,您可以选择停用指标收集。如需查看相关说明,请参阅停用客户端指标。
限制
无法通过旧版网络发送 IPv6 请求。
在仅支持 IPv4 的集群上使用以下 GKE 版本时,不支持直接连接:
- 1.28、1.28.0-gke.100 或更高版本(直到 1.28.5-gke.1199000)
- 1.27、1.27.4-gke.1900 或更高版本
- 1.26、1.26.10-gke.1238000 或更高版本
- 1.25、1.25.15-gke.1045000 或更高版本
gRPC 不支持
notifications
、hmacKeys
和serviceAccount
方法。Go 客户端库不支持 HTTP 特有的客户端构造函数选项,例如 WithHTTPClient。
排查直接连接问题
如需了解如何检查直接连接并在直接连接不可用时排查问题,请参阅直接连接。