Cloud Service Mesh 与 Service Directory 集成

本文档简要介绍了如何将 Service Directory 的服务注册表与 Cloud Service Mesh 搭配使用,后者可让 Cloud Service Mesh 将流量路由到在 Service Directory 中注册的服务,以及将流量政策应用于在 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 集成,以实现 Service Directory 与内部直通式网络负载平衡器内部应用负载平衡器L4 Private Service Connect 的集成。

如需集成服务,请向 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)。

后续步骤