Cloud Service Mesh 与 Service Directory 的集成

本文档简要介绍了如何将 Service Directory 的服务注册表与 Cloud Service Mesh 搭配使用,以允许 Cloud Service Mesh 将流量路由到向 Service Directory 注册的服务并向这些服务应用流量政策。本文档适用于希望将其应用与 Google Cloud 中的其他服务集成的 Cloud Service Mesh 开发者。

Service Directory 是一个服务注册表,用于存储向其注册的网络服务的相关信息,包括其名称、位置和特性。您可以自动注册服务以捕获所有详细信息,并且所有服务都可以进行注册,无论其基础架构如何。

该注册表不仅可以包含 Google Cloud 服务,还可以包含在本地或其他公有云中运行的混合服务。为了更好地理解本文档中的信息,我们建议您先熟悉 Service Directory 操作的基础知识

当您将 Service Directory 的服务注册表与 Cloud Service Mesh 搭配使用时,该集成会将服务注册表中的服务提供给网格中的应用和 Cloud Service Mesh 配置的网关。Cloud Service Mesh 与 Service Directory 的集成支持 Envoy 和无代理 gRPC,此外系统还支持与内部直通网络负载平衡器内部应用负载平衡器L4 Private Service Connect 之间的 Service Directory 集成。

如需集成您的服务,请向 Service Directory 注册服务,然后将该服务绑定到 Cloud Service Mesh 后端服务。建立绑定后,Cloud Service Mesh 便可以查询 Service Directory,获取有关已注册服务的信息并了解该服务的访问方式。Cloud Service Mesh 还会跟踪对服务所做的任何更改。通过使用集成,您的服务网格和自行管理的网关可向这些服务发送流量。此外,您还可以强制执行在 Cloud Service Mesh 中配置的政策(例如高级流量管理政策)。

使用此集成时,无论服务本身使用何种类型的后端,服务绑定都会充当后端。该集成简化了 Cloud Service Mesh 部署,因为 Cloud Service Mesh 可以将流量发送到服务,而无需考虑后端的类型。

向 Service Directory 注册服务后,您无需配置实例组或不同类型的网络端点组 (NEG) 便可访问所需的服务。您可以自动将 Google Kubernetes Engine、内部负载平衡器和 Private Service Connect 注册到 Service Directory,从而进一步简化 Cloud Service Mesh 对这些服务的访问。

集成使用的资源

Cloud Service Mesh 与 Service Directory 之间的集成使用以下资源。

Service Directory 服务

Service Directory 是一个服务注册表。通过 Service Directory,您可以注册各种类型的服务,这包括 Google Cloud 或其他环境(例如本地数据中心)中的服务。每个服务都包含一个唯一名称以及零个或零个以上的服务端点。服务端点由地址、端口、属性和元数据组成。如果不存在端点,则无法将流量路由到服务。

服务绑定

服务绑定是一种资源,其中包含 Service Directory 服务的完全限定域名 (FQDN)。例如,projects/test-proj/locations/us-east1/namespaces/test-namespace/services/test-service 便是 Service Directory 服务的 FQDN。

后端服务

后端服务是向 Cloud Service Mesh 提供信息的配置资源,这些资源包括后端服务将流量路由到的后端(例如代管式实例组)。引用服务绑定的后端服务不能具有后端。如需使用 Cloud Service Mesh 与 Service Directory 的集成,请创建一个新的后端服务来引用服务绑定。

一个后端服务可以有多个服务绑定。当您对同一应用进行区域部署时,此配置非常有用。您可以将每个区域部署都注册到 Service Directory 的区域实例,例如将其作为区域服务 1 和区域服务 2 等。然后,您可以使用两个服务绑定将每个 Service Directory 区域服务与同一后端服务相关联。全局服务绑定 1 将与区域 A 中的区域服务 1 相关联,而全局服务绑定 2 则与区域 B 中的区域服务 2 相关联。

使用场景

当您依赖于其他团队或组织拥有或发布的服务时,将您的 Cloud Service Mesh 部署与 Service Directory 进行集成将非常有帮助。

将现有服务提供给 Cloud Service Mesh

Service Directory 可与各种 Google Cloud 产品集成,例如 GKE、内部直通式网络负载均衡器和内部应用负载均衡器。当服务提供方创建 GKE 服务或负载均衡器时,便可向 Service Directory 进行注册。

在向 Service Directory 注册服务后,您便可以将 Cloud Service Mesh 配置为与该服务通信。然后,Cloud Service Mesh 客户端便可以与在内部直通式网络负载平衡器和内部应用负载平衡器后面运行的服务进行通信。

增强服务提供方和使用方之间的协调

大型企业通常有许多独立的开发者团队。这些团队将其服务提供给其他团队,以便更多团队可以使用共享服务提供的功能。这样便会导致跨团队依赖关系。虽然这些依赖关系使得各个团队之间能够共享他们的工作,但同时也会产生额外的协调开销。

使用 Service Directory 时,一个团队(提供方)会注册其想要提供给其他团队或组织(使用方)的服务。提供方会与使用方共享对此服务的引用。使用方则可以使用此引用在 Service Directory 中查找该提供方提供的服务,并发现该服务的端点。例如,端点可能是提供方服务接收流量的虚拟 IP 地址 (VIP)。

通过 Cloud Service Mesh 与 Service Directory 的集成,您可以将 Service Directory 服务绑定到 Cloud Service Mesh 后端服务,从而自动执行该过程,这样做可以带来以下益处:

  • Cloud Service Mesh 通过从 Service Directory 同步服务的端点来自动解析这些端点。如果 Service Directory 服务的端点进行了更新,则 Cloud Service Mesh 会自动同步这些更改。
  • 您可以在 Cloud Service Mesh 中设置各种路由和流量管理政策,例如超时。这些政策可让您微调应用向 Service Directory 服务发出请求的方式。如需了解 Cloud Service Mesh 中的路由和流量管理,请参阅高级流量管理
  • Cloud Service Mesh 使用流量管理功能(例如基于邻近度的负载均衡),以最佳方式将流量从应用定向到端点(例如最大限度地减少往返时间)。
使用 Service Directory 进行服务发现。
使用 Service Directory 进行服务发现(点击可放大)

作为使用方,当您使用 Cloud Service Mesh 并将后端服务附加到 Service Directory 服务,便可降低跨团队协调开销。

  • 您可以按名称(即 Payments)附加服务。
  • Cloud Service Mesh 会与其客户端共享有关 Payments 服务的信息。

    • 例如,服务网格中运行的边车代理现在便可了解可用于访问服务的端点(例如 10.0.0.1:80)。
  • 您的应用可以按名称调用此服务,而无需您或您的应用了解有关外部服务端点的任何信息。在该图中,服务指的是 Payments 服务。

  • 当服务提供方更新外部服务时(例如,更改其端点),Cloud Service Mesh 便会获取更新并与其客户端无缝共享更新。

使用入站点访问边界内的服务

团队可以在 VPC Service Controls 边界内对一组服务进行分组,并通过单个入站点公开这些服务。此入站点可以注册到 Service Directory,并提供给想要访问该边界内服务的用户使用。如需详细了解 VPC Service Controls 边界,请参阅服务边界详情和配置

例如,团队使用内部应用负载均衡器创建入站流量网关,以将请求分配到集群中的一组 Kubernetes 服务。此入站流量网关会自动注册为 Service Directory 的服务。想要访问 Kubernetes 服务的使用方可以在 Service Directory 中查找此入站流量网关。然后,使用方可以配置 Cloud Service Mesh 网格,以通过该网关访问边界内的服务。

跨网域连接服务

您可能需要连接位于不同网域中的服务。

跨组织连接服务

您可能希望访问其他组织拥有的服务,例如 Google API(例如 Cloud SQL)或第三方代管式服务。

Service Directory 支持 Private Service Connect。当您在网络中创建 Private Service Connect 端点时,可以将该端点注册为 Service Directory 的服务。然后,您可以将此服务附加到 Cloud Service Mesh,以便网格客户端(例如 Envoy 和 gRPC 客户端)和自行管理的网关(例如 Apigee)可以调用这些服务。

通过 Service Directory 使用 Private Service Connect 进行服务发现。
通过 Service Directory 使用 Private Service Connect 进行服务发现(点击可放大)

上面的示例使用 Cloud Storage,该示例说明了如何通过 Private Service Connect 使用 Virtual Private Cloud 网络中的端点来调用 Google API。

跨 VPC 网络连接服务

一些公司会在其 Google Cloud 部署中使用多个 VPC 网络。在这种情况下,一个 VPC 网络中的服务可能需要访问另一个 VPC 网络中的服务。虽然您可以配置 VPC 对等互连来访问其他 VPC 网络中的服务,但如果对等互连网络之间具有重叠的 IP 地址范围,此配置便会增加部署的复杂性。

Private Service Connect 使用一个 IP:port 端点便可以安全的非公开方式让一个 VPC 网络中的服务可供其他 VPC 网络中的服务访问。

通过 Service Directory 使用 Private Service Connect 进行服务发现的详细视图。
通过 Service Directory 使用 Private Service Connect 进行服务发现的详细视图(点击可放大)

跨网域的其他示例

前面的两个示例说明了您可能需要跨网域的情况,但还有许多其他示例。例如,您可以创建一个位于两个 Google Cloud 区域交集处的网关。一个区域的服务可以通过此网关访问另一个区域的服务。您可以将该网关注册为 Service Directory 中的服务,然后按照本文档中的说明将该网关与 Cloud Service Mesh 搭配使用。

在访问服务时应用政策

Cloud Service Mesh 支持可使用政策配置的功能,例如高级流量管理等。例如,您可以设置流量镜像政策,以便在任何时候客户端向特定后端服务发送请求时,都将该流量同时发送到另一个后端服务。

将 Service Directory 服务绑定到 Cloud Service Mesh 后端服务后,您便可以在 Cloud Service Mesh 中配置这些类型的政策。您的边车代理、中间或边缘代理以及无代理客户端都可以了解这些政策并强制执行。

一些示例:

  • 两个 Service Directory 服务之间基于权重的流量拆分
  • 路由到审核服务的流量镜像
对“users”服务的请求会镜像到“audit”服务
users 服务的请求会镜像到 audit 服务(点击可放大)

对 Cloud Service Mesh 和现有客户端的支持

即使您在组织中部署了 Cloud Service Mesh,您的组织中也可能会有不使用 Cloud Service Mesh 的客户端。例如,您可能需要从不属于某个服务网格的虚拟机访问某项服务。

当您将 Service Directory 服务绑定到 Cloud Service Mesh 后端服务后,Cloud Service Mesh 的客户端便会自动获取有关该服务的最新信息。不使用 Cloud Service Mesh 的客户端也可以在 Service Directory 中查找和使用这些服务信息。

限制

Cloud Service Mesh 不支持 Service Directory 集成中的 FQDN NEG (INTERNET_FQDN_PORT NEG)。

后续步骤