网格的入站流量

服务网格有助于在网格中运行的服务之间进行通信。那么应该如何让流量进入网格?您可以使用网关,使流量通过入口点从网格外部进入网格。

本文档介绍如何使用 Cloud Load Balancing 作为网关将流量传输到网格中,其中包括以下内容:

  • 关于网关的重要注意事项。
  • 为网格选择网关时的选项概览。
  • 可以应用于网关拓扑的架构建议。

在本文档中,网关是指用于处理定向到网格中服务的流量的解决方案或模式。Istio 的入站网关是此模式的一种实现。在本文档中,网关是一个通用术语,指的是一般模式,而不是 Istio 实现。

本文档适用于 Cloud Service Mesh API。完成设置准备步骤后,请参阅入站流量网关的 Traffic Director 设置,其中包含使用入站流量网关进行部署的说明。

在设计服务网格时,您需要考虑来自以下来源的流量:

  • 源自网格内部的流量
  • 源自网格外部的流量

源自网格内部的流量在服务网格数据层面上传输,以到达与目标服务关联的后端或端点。但是,源自网格外部的流量需要首先到达服务网格数据层面。

在以下源自网格内部的流量示例中,Cloud Service Mesh 会配置您的 Sidecar 代理。这些 Sidecar 代理构成了服务网格的数据层面。如果服务 A 要与服务 B 通信,则会发生以下情况:

  1. 服务 A 通过名称向服务 B 发出请求。
  2. 此请求被拦截并重定向到服务 A 的 Sidecar 代理。
  3. 然后,Sidecar 代理将请求发送到与服务 B 关联的端点。
网格的数据层面处理服务网格内部的流量。
网格的数据层面处理服务网格内部的流量(点击可放大)


在下面的示例中,流量源自服务网格外部,并且不沿着服务网格数据层面传输。

服务网格数据层面不处理服务网格外部的流量。
服务网格数据层面不处理服务网格外部的流量(点击可放大)

在此示例中,客户端不在服务网格中。由于它不直接参与网格,因此客户端不知道哪些端点属于网格内的服务。换句话说,由于客户端不使用 Cloud Service Mesh 配置的代理发送出站请求,因此它在向服务 A 或服务 B 发送流量时不知道要使用哪些 IP 地址端口对。没有这些信息,客户端就无法访问网格内的服务。

网关的注意事项

本部分简要介绍选择网关时要考虑的问题,包括:

  • 客户端如何才能访问我的网关?
  • 我想对到达网关的流量应用哪些政策?
  • 我的网关如何将流量分配到我的网格中的服务?

使客户端能够访问网格的网关

无论是在公共互联网上、在本地环境中还是在 Google Cloud 中,客户端都需要一种方法来访问网格中的服务。访问网格中的服务通常通过使用可解析为网关的公共或专用可路由 IP 地址和端口来实现。网格外部的客户端使用此 IP 地址和端口通过网关向网格中的服务发送请求。

Cloud Load Balancing 提供了各种负载均衡选项,供您用作网格的网关。在选择 Google Cloud 负载均衡器作为网关时,您需要考虑的主要问题包括:

  • 我的客户端是在公共互联网上、在本地环境中还是属于我的 Virtual Private Cloud (VPC) 网络的一部分?
  • 我的客户端使用哪种通信协议?

为网格选择网关部分概述了 Cloud Load Balancing 选项,具体取决于客户端位置和通信协议。

在网关处理流量

由于网关位于网格的边缘(处于网格外的客户端与网格内的服务之间),因此网关是在流量进入网格时应用政策的天然位置。这些政策包括:

  • 流量管理(例如路由,重定向和请求转换)
  • 安全性(例如 TLS 终止和 Google Cloud Armor 分布式拒绝服务 (DDoS) 防护)
  • Cloud CDN 缓存

为网格选择网关部分重点介绍与网格边缘相关的政策。

将流量从网关发送到网络中的服务

对传入流量应用政策后,网关将决定流量的发送目的地。您可以使用流量管理和负载均衡政策进行配置。例如,网关可能会检查请求标头,以识别应接收流量的网格服务。网关识别服务后,会根据负载均衡政策将流量分配到特定后端。

为网格选择网关部分简要介绍了网关可以将流量发送到的后端。

为网格选择网关

Google Cloud 提供各种负载均衡器,可用作网格的网关。本部分介绍如何选择网关,并按与网关模式相关的各个方面比较以下选项:

在本部分中,我们指的是第一级和第二级网关。这些术语用于描述使用一个或两个网关来处理网格的入站流量。

您可能只需要一个级别,也就是使用一个负载均衡器充当网络的网关。不过,有时可能需要多个网关。在这些配置中,一个网关处理进入 Google Cloud 的流量,而另一个第二级网关在流量进入服务网格时对其进行处理。

例如,您可能希望将 Google Cloud Armor 安全政策应用于进入 Google Cloud 的流量,而将高级流量管理政策应用于进入网格的流量。在网格边缘使用第二级网关处理入站流量部分中讨论了使用第二个 Cloud Service Mesh 配置的网关的模式。

下表比较了各网关选项的可用功能:

网关 客户端位置 协议 政策 后端/端点
内部应用负载均衡器

与负载均衡器位于同一区域的基于 Google Cloud 的客户端。

其请求通过 Cloud VPN 或 Cloud Interconnect 等方式到达负载均衡器所在的 Google Cloud 区域的本地客户端。

HTTP/1.1

HTTP/2

HTTPS

高级流量管理

使用自行管理的证书的 TLS 终止

与负载均衡器位于相同 Google Cloud 区域的后端,运行于:

  • Compute Engine 上的虚拟机实例后端
  • Google Kubernetes Engine (GKE) 和 Kubernetes 上的容器实例
外部应用负载均衡器 公共互联网上的客户端

HTTP/1.1

HTTP/2

HTTPS

流量管理

Cloud CDN(包括 Cloud Storage 存储分区后端)

使用 Google 托管的证书或自行管理的证书的 TLS 终止

SSL 政策

Google Cloud Armor for DDoS 和网页攻击防护

针对用户身份验证的 Identity-Aware Proxy (IAP) 支持

任何 Google Cloud 区域中的后端,运行于:

  • Compute Engine 上的虚拟机
  • GKE 和 Kubernetes 上的容器实例
内部直通式网络负载均衡器

任何区域中的基于 Google Cloud 的客户端;如果客户端与负载均衡器位于不同区域,则需要全球访问权限。

其请求通过 Cloud VPN 或 Cloud Interconnect 等方法到达任何 Google Cloud 区域的本地客户端。

TCP 与负载均衡器位于同一 Google Cloud 区域且在 Compute Engine 上的虚拟机中运行的后端。
外部直通式网络负载均衡器 公共互联网上的客户端 TCP 或 UDP 与负载均衡器位于同一 Google Cloud 区域且在 Compute Engine 上的虚拟机中运行的后端。
外部代理网络负载均衡器 公共互联网上的客户端 SSL 或 TCP

使用 Google 管理或自行管理的证书的 TLS 终止(仅限 SSL 代理)

SSL 政策(仅限 SSL 代理)

任何 Google Cloud 区域中的后端,运行于:

  • Compute Engine 上的虚拟机
  • GKE 和 Kubernetes 上的容器实例
由 Cloud Service Mesh
配置的边缘代理(在虚拟机或容器实例上)
客户端必须适用以下条件之一的位置:
  • 它们可以向 Google Cloud 管理的负载均衡器发送请求,后者再将请求发送给边缘代理。如需了解详情,请参阅在网格边缘使用第二级网关处理入站流量
  • 它们可以通过 Cloud Service Mesh 配置的代理(例如 Sidecar 代理)发送请求。
  • 它们可以直接向运行边缘代理的虚拟机或容器实例的 IP 地址和端口发送请求。

HTTP/1.1

HTTP/2

高级流量管理(包括 regex 支持)

任何 Google Cloud 区域中的后端,运行于:

  • Compute Engine 上的虚拟机
  • GKE 和 Kubernetes 上的容器实例

如需查看逐个功能的详细比较,请参阅负载均衡器功能页面。如需详细了解 Cloud Service Mesh 功能,请参阅 Cloud Service Mesh 功能页面。

部署和配置网关

在选择网关时,您最后一个注意事项是您要使用的开发者体验和工具。Google Cloud 提供了多种创建和管理网关的方法。

Google Cloud CLI 和 Compute Engine API

您可以使用 Google Cloud CLI 和 Compute Engine API 来配置 Google Cloud 的代管式负载均衡产品和 Cloud Service Mesh。gcloud CLI 和 API 提供了强制部署和配置 Google Cloud 资源的机制。如需自动执行重复性任务,您可以创建脚本。

Google Cloud 控制台

您可以使用 Google Cloud 控制台来配置 Cloud Service Mesh 和 Google Cloud 的代管式负载平衡器。

要配置网关模式,您可能需要参考 Cloud Service Mesh 页面负载均衡页面

GKE 和多集群 Ingress

GKE 和 GKE Enterprise 网络控制器还支持部署 Cloud Load Balancing,用于与容器网络的内置集成。它们提供 Kubernetes 风格的声明式接口,用于部署和配置网关。GKE Ingress多集群 Ingress 控制器管理内部外部负载均衡器,用于将流量发送到单个集群或跨多个 GKE 集群进行发送。您还可以将 Ingress 资源配置为指向已部署到 GKE 集群中并由 Cloud Service Mesh 配置的服务。

网关架构模式

本部分介绍了高级模式并提供了网关的架构图。

最常见的模式涉及使用 Google Cloud 托管式负载均衡器作为网关:

  1. 客户端将流量发送到充当网关的 Google Cloud 管理的负载均衡器。

    • 网关应用政策。
  2. 网关将流量发送到网格中的服务。

更高级的模式涉及两个级别的网关。网关的工作原理如下:

  1. 客户端将流量发送到充当第一级网关的 Google Cloud 管理的负载均衡器。

    • 网关应用政策。
  2. 网关将流量发送到由 Cloud Service Mesh 配置的边缘代理(或边缘代理池)。此边缘代理充当第二级网关。此级别网关实现以下功能:

    • 明确分离关注点,例如,一个团队负责进入 Google Cloud 的入站流量,另一个团队负责进入该团队网格的入站流量。

    • 让您能够应用 Google Cloud 管理的负载均衡器可能不支持的政策。

  3. 第二级网关将流量发送到网格中的服务。

当流量到达网格内服务后,入站模式结束。以下部分介绍了常见情况和高级模式。

使来自互联网的入站流量能够进行访问

如果您的客户端不在 Google Cloud 内并且需要通过公共互联网访问 Google Cloud,您可以使用以下任一负载均衡器作为网关:

来自公共互联网上客户端的入站流量使用负载均衡器访问网格内服务。
来自公共互联网上客户端的入站流量使用负载均衡器访问网格内服务(点击可放大)

在此模式中,Google Cloud 托管式负载均衡器充当您的网关。网关会先处理入站流量,然后再将其转发到网格中的服务。

例如,您可以选择外部应用负载均衡器作为网关以使用以下内容:

  • 可公开路由的全球任播 IP 地址,可最大限度地减少延迟和网络遍历成本。
  • Google Cloud Armor 和 TLS 终止,保护流向网格的流量。
  • Cloud CDN,传送 Web 和视频内容。
  • 流量管理功能,例如基于主机和基于路径的路由。

如需详细了解如何确定合适的网关,请参阅为网格选择网关部分。

使来自 VPC 和连接的本地网络中的客户端的入站流量能够进行访问

如果客户端位于 VPC 网络中,或者如果客户端位于本地并且能够通过专用连接方法(例如 Cloud VPN 或 Cloud Interconnect)访问 Google Cloud 服务,则可以使用以下负载均衡器之一作为网关:

来自 VPC 网络上客户端的入站流量使用负载均衡器访问网格内服务。
来自 VPC 网络上客户端的入站流量使用负载均衡器访问网格内服务(点击可放大)

在此模式中,Google Cloud 托管式负载均衡器充当您的网关。网关会先处理入站流量,然后再将其转发到网格中的服务。

例如,您可以选择内部应用负载均衡器作为网关,以便使用以下功能:

  • 可不公开寻址的 IP 地址
  • TLS 终止,保护您的网格
  • 高级流量管理功能,例如基于权重的流量拆分
  • NEG,作为后端

如需详细了解如何确定合适的网关,请参阅为网格选择网关部分。

在网格边缘使用第二级网关处理入站流量

根据需求,您可以考虑采用添加额外网关的更高级模式。

来自外部客户端的入站流量使用负载均衡器和边缘代理访问网格内服务。
使用负载均衡器和边缘代理从外部客户端前往网格内服务的入站流量(点击放大)

此网关是由 Cloud Service Mesh 配置的边缘代理(或代理池),位于 Google Cloud 托管式负载平衡器后面。您可以使用 Compute Engine 虚拟机池(代管式实例组)或 GKE 服务在您的项目中托管此第二级网关。

虽然此模式更高级,但它还提供了其他好处:

  • Google Cloud 管理的负载均衡器会应用一组初始政策(例如,如果您使用外部应用负载均衡器,则应用 Google Cloud Armor 防护)。

  • 由 Cloud Service Mesh 配置的边缘代理会应用第二组政策,这些政策在 Google Cloud 托管式负载平衡器中可能不可用。这些政策包括高级流量管理,高级流量管理使用应用于 HTTP 标头的正则表达式和基于权重的流量分配。

您可以根据自己的组织结构设置此模式。例如:

  1. 一个团队可能负责处理进入 Google Cloud 的入站流量,而另一个团队负责处理进入其网格的入站流量。

  2. 如果多个团队在一个共享 VPC 上提供服务,并且每个团队都有自己的服务项目,则这些团队可以使用此模式在自己的网格中管理和应用政策。每个团队都可以公开可通过单个 IP 地址和端口对访问的由 Cloud Service Mesh 配置的网关。然后,团队可以独立定义和管理政策,并应用于该团队网格的入站流量。

只要负载均衡器可以将流量发送到托管 Cloud Service Mesh 配置的网关的后端,就可以使用任何 Google Cloud 管理的负载均衡器实现此模式。

使用 Service Route API 处理入站流量

Service Route API 提供 Gateway 资源,用于为充当入站流量网关的 Envoy 代理配置流量管理和安全功能,借助这些代理,您可以将外部客户端连接到服务网格(南北)。如需了解详情,请参阅服务路由概览设置入站流量网关

后续步骤