设置跨项目引用
本文档仅适用于使用 Google Cloud 服务路由 API 的 Cloud Service Mesh。如果您使用 Istio API 配置 Cloud Service Mesh,请勿使用本文档。
在某些场景下,服务网格配置包括不同项目中的服务。例如,在共享 VPC 或对等互连 VPC 部署中,每个项目所有者都可以定义自己的一组服务,以使这些服务可用于所有其他项目。
此配置称为“跨项目”配置,因为将不同项目中定义的多个资源相结合,形成可提供给 Envoy 代理或无代理 gRPC 客户端的单个配置。
以下说明使用 Mesh
和 HTTPRoute
资源,但它们可以应用于 Gateway
资源以及 GRPCRoute
和 TCPRoute
资源。
配置 Mesh
资源
指定一个项目作为您管理 Mesh
资源的宿主项目。任何有权在此项目中创建、更新或删除 Mesh
资源的服务账号都可以控制关联到此项目中 Mesh
资源的路由配置。
在
shared-mesh.yaml
文件中,创建一个Mesh
规范。name: shared-mesh interceptionPort: 15001
在此项目中定义一个
Mesh
资源。gcloud network-services meshes import shared-mesh \ --source=shared-mesh.yaml \ --location=global
记下
Mesh
资源的完整 URI,因为服务所有者需要该 URI 才能将其路由关联到此Mesh
。/projects/[HOST_PROJECT_NUMBER]/locations/global/meshes/shared-mesh
将此
Mesh
的networkservices.meshes.use
IAM 权限授予能够将其服务信息关联到此Mesh
的跨项目服务账号。gcloud projects add-iam-policy-binding [HOST_PROJECT_NUMBER] --member='[HTTP_ROUTE_SERVICE_OWNER_ACCOUNT]' --role='roles/compute.networkAdmin'
被授予 networkservices.meshes.use
权限的所有服务所有者都可以将其路由规则添加到此 Mesh
资源。
在服务项目中设置路由
每个服务所有者都需要在其项目中创建一个或多个后端服务和 Route
资源,类似于边车代理配置指南中的示例。唯一的区别是每个 HTTPRoute
、GRPCRoute
或 TCPRoute
资源都必须在 meshes
字段中拥有宿主项目的 Mesh
资源的 URI。
使用以下内容来填充
meshes
字段。 您可以使用项目 ID 或项目编号。echo "name: sharedvpc-http-route hostnames: - helloworld-gce meshes: - /projects/[HOST_PROJECT_NUMBER]/locations/global/meshes/shared-mesh rules: - action: destinations: - serviceName: \"url/of/the/service\"" | \ gcloud network-services http-routes import sharedvpc-http-route \ --source=- \ --location=global
在服务项目中创建客户端服务
配置位于服务项目中的 Cloud Service Mesh 客户端时,引导配置必须指定 Mesh
资源所在的项目编号以及 Mesh
名称。此要求对 Envoy 代理和无代理 gRPC 部署均适用。在 Envoy 部署中,请使用 --service-proxy:project-number
选项。
后续步骤
- 如需了解如何列出与
Mesh
或Gateway
资源关联的路线资源,请参阅列出Route
资源。此功能处于预览阶段。