设置跨项目引用
本文档仅适用于使用 Google Cloud服务路由 API 的 Cloud Service Mesh。如果您使用 Istio API 配置 Cloud Service Mesh,请勿使用本文档。
在某些场景下,服务网格配置包括不同项目中的服务。例如,在共享 VPC 或对等互连 VPC 部署中,每个项目所有者都可以定义自己的一组服务,以使这些服务可用于所有其他项目。
Mesh 资源的跨项目配置(点击可放大)此配置称为“跨项目”配置,因为将不同项目中定义的多个资源相结合,形成可提供给 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.useIAM 权限授予能够将其服务信息关联到此- 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资源。