设置跨项目引用

本文档仅适用于使用 Google Cloud 服务路由 API 的 Cloud Service Mesh。如果您使用 Istio API 配置 Cloud Service Mesh,请勿使用本文档。

在某些场景下,服务网格配置包括不同项目中的服务。例如,在共享 VPC 或对等互连 VPC 部署中,每个项目所有者都可以定义自己的一组服务,以使这些服务可用于所有其他项目。

使用 Mesh 资源的跨项目配置
使用 Mesh 资源的跨项目配置(点击可放大)

此配置称为“跨项目”配置,因为将不同项目中定义的多个资源相结合,形成可提供给 Envoy 代理或无代理 gRPC 客户端的单个配置

以下说明使用 MeshHTTPRoute 资源,但它们可以应用于 Gateway 资源以及 GRPCRouteTCPRoute 资源。

配置 Mesh 资源

指定一个项目作为您管理 Mesh 资源的宿主项目。任何有权在此项目中创建、更新或删除 Mesh 资源的服务账号都可以控制关联到此项目中 Mesh 资源的路由配置。

  1. shared-mesh.yaml 文件中,创建一个 Mesh 规范。

    name: shared-mesh
    interceptionPort: 15001
    
  2. 在此项目中定义一个 Mesh 资源。

    gcloud network-services meshes import shared-mesh \
      --source=shared-mesh.yaml \
      --location=global
    
  3. 记下 Mesh 资源的完整 URI,因为服务所有者需要该 URI 才能将其路由关联到此 Mesh

    /projects/[HOST_PROJECT_NUMBER]/locations/global/meshes/shared-mesh
    
  4. 将此 Meshnetworkservices.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 资源,类似于边车代理配置指南中的示例。唯一的区别是每个 HTTPRouteGRPCRouteTCPRoute 资源都必须在 meshes 字段中拥有宿主项目的 Mesh 资源的 URI。

  1. 使用以下内容来填充 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 选项。

后续步骤

  • 如需了解如何列出与 MeshGateway 资源关联的路线资源,请参阅列出 Route 资源。此功能处于预览阶段。