网格的入站流量
服务网格有助于在网格中运行的服务之间进行通信。那么应该如何让流量进入网格?您可以使用网关,使流量通过入口点从网格外部进入网格。
本文档介绍如何使用 Cloud Load Balancing 作为网关将流量传输到网格中,其中包括以下内容:
- 关于网关的重要注意事项。
- 为网格选择网关时的选项概览。
- 可以应用于网关拓扑的架构建议。
在本文档中,网关是指用于处理定向到网格中服务的流量的解决方案或模式。Istio 的入站网关是此模式的一种实现。在本文档中,网关是一个通用术语,指的是一般模式,而不是 Istio 实现。
本文档适用于 Cloud Service Mesh API。在 准备设置步骤,请参阅 ,包含使用入站流量网关进行部署的说明。
在设计服务网格时,您需要考虑来自以下来源的流量:
- 源自网格内部的流量
- 源自网格外部的流量
源自网格内部的流量在服务网格数据层面上传输,以到达与目标服务关联的后端或端点。但是,源自网格外部的流量需要首先到达服务网格数据层面。
在以下源自网格内部的流量示例中,Cloud Service Mesh 会配置您的 Sidecar 代理。这些 Sidecar 代理构成了服务网格的数据层面。如果服务 A 要与服务 B 通信,则会发生以下情况:
- 服务 A 通过名称向服务 B 发出请求。
- 此请求被拦截并重定向到服务 A 的 Sidecar 代理。
- 然后,Sidecar 代理将请求发送到与服务 B 关联的端点。
在下面的示例中,流量源自服务网格外部,并且不沿着服务网格数据层面传输。
在此示例中,客户端不在服务网格中。由于它不直接参与网格,因此客户端不知道哪些端点属于网格内的服务。换句话说,由于客户端 使用已配置 Cloud Service Mesh 的代理发送出站请求, 知道在向服务 A 发送流量时应使用哪些 IP 地址-端口对,或者 服务 B。没有这些信息,客户端就无法访问网格内的服务。
网关的注意事项
本部分简要介绍选择网关时要考虑的问题,包括:
- 客户端如何才能访问我的网关?
- 我想对到达网关的流量应用哪些政策?
- 我的网关如何将流量分配到我的网格中的服务?
使客户端能够访问网格的网关
无论是在公共互联网上、在本地环境中还是在 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 区域的后端,运行于:
|
外部应用负载均衡器 | 公共互联网上的客户端 | HTTP/1.1 HTTP/2 HTTPS |
流量管理 Cloud CDN(包括 Cloud Storage 存储分区后端) 使用 Google 托管的证书或自行管理的证书的 TLS 终止 SSL 政策 Google Cloud Armor for DDoS 和网页攻击防护 针对用户身份验证的 Identity-Aware Proxy (IAP) 支持 |
任何 Google Cloud 区域中的后端,运行于:
|
内部直通式网络负载均衡器 | 任何区域中的基于 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 区域中的后端,运行于:
|
由 Cloud Service Mesh 配置的边缘代理(在虚拟机或容器实例上) |
客户端必须适用以下条件之一的位置:
|
HTTP/1.1 HTTP/2 |
高级流量管理(包括 regex 支持) |
任何 Google Cloud 区域中的后端,运行于:
|
如需查看逐个功能的详细比较,请参阅负载均衡器功能页面。有关 Cloud Service Mesh 功能概览,请参阅 Cloud Service Mesh 特性页面。
部署和配置网关
在选择网关时,您最后一个注意事项是您要使用的开发者体验和工具。Google Cloud 提供了多种创建和管理网关的方法。
Google Cloud CLI 和 Compute Engine API
配置 Google Cloud 的代管式负载均衡产品 Cloud Service Mesh,您可以使用 Google Cloud CLI 和 Compute Engine API。 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 托管式负载均衡器作为网关:
客户端将流量发送到充当网关的 Google Cloud 管理的负载均衡器。
- 网关应用政策。
网关将流量发送到网格中的服务。
更高级的模式涉及两个级别的网关。网关的工作原理如下:
客户端将流量发送到充当第一级网关的 Google Cloud 管理的负载均衡器。
- 网关应用政策。
网关将流量发送到由 Cloud Service Mesh 配置的边缘代理(或边缘代理池)。此边缘代理充当第二级网关。此级别网关实现以下功能:
明确分离关注点,例如,一个团队负责进入 Google Cloud 的入站流量,另一个团队负责进入该团队网格的入站流量。
允许您在 Google Cloud 托管的负载均衡器。
第二级网关将流量发送到网格中的服务。
当流量到达网格内服务后,入站模式结束。以下部分介绍了常见情况和高级模式。
使来自互联网的入站流量能够进行访问
如果您的客户端不在 Google Cloud 内并且需要通过公共互联网访问 Google Cloud,您可以使用以下任一负载均衡器作为网关:
在此模式中,Google Cloud 托管式负载均衡器充当您的网关。网关会先处理入站流量,然后再将其转发到网格中的服务。
例如,您可以选择外部应用负载均衡器作为网关以使用以下内容:
- 可公开路由的全球任播 IP 地址,可最大限度地减少延迟和网络遍历成本。
- Google Cloud Armor 和 TLS 终止,保护流向网格的流量。
- Cloud CDN,传送 Web 和视频内容。
- 流量管理功能,例如基于主机和基于路径的路由。
如需详细了解如何确定合适的网关,请参阅为网格选择网关部分。
使来自 VPC 和连接的本地网络中的客户端的入站流量能够进行访问
如果客户端位于 VPC 网络中,或者如果客户端位于本地并且能够通过专用连接方法(例如 Cloud VPN 或 Cloud Interconnect)访问 Google Cloud 服务,则可以使用以下负载均衡器之一作为网关:
在此模式中,Google Cloud 托管式负载均衡器充当您的网关。网关会先处理入站流量,然后再将其转发到网格中的服务。
例如,您可以选择内部应用负载均衡器作为网关,以便使用以下功能:
- 可不公开寻址的 IP 地址
- TLS 终止,保护您的网格
- 高级流量管理功能,例如基于权重的流量拆分
- NEG,作为后端
如需详细了解如何确定合适的网关,请参阅为网格选择网关部分。
在网格边缘使用第二级网关处理入站流量
根据需求,您可以考虑采用添加额外网关的更高级模式。
此网关是由 Cloud Service Mesh 配置的边缘代理(或代理池),位于 Google Cloud 托管式负载均衡器后面。您可以使用 Compute Engine 虚拟机池(代管式实例组)或 GKE 服务在您的项目中托管此第二级网关。
虽然此模式更高级,但它还提供了其他好处:
Google Cloud 管理的负载均衡器会应用一组初始政策(例如,如果您使用外部应用负载均衡器,则应用 Google Cloud Armor 防护)。
由 Cloud Service Mesh 配置的边缘代理会应用第二组政策,这些政策在 Google Cloud 托管式负载均衡器中可能不可用。这些政策包括高级流量管理,高级流量管理使用应用于 HTTP 标头的正则表达式和基于权重的流量分配。
您可以根据自己的组织结构设置此模式。例如:
一个团队可能负责处理进入 Google Cloud 的入站流量,而另一个团队负责处理进入其网格的入站流量。
如果多个团队在一个共享 VPC 上提供服务,并且每个团队都有自己的服务项目,则这些团队可以使用此模式在自己的网格中管理和应用政策。每个团队都可以公开可通过单个 IP 地址和端口对访问的由 Cloud Service Mesh 配置的网关。然后,团队可以独立定义和管理政策,并应用于该团队网格的入站流量。
只要负载均衡器可以将流量发送到托管 Cloud Service Mesh 配置的网关的后端,就可以使用任何 Google Cloud 管理的负载均衡器实现此模式。
使用 Service Route API 处理入站流量
Service Route API 提供 Gateway
资源,用于为充当入站流量网关的 Envoy 代理配置流量管理和安全功能,借助这些代理,您可以将外部客户端连接到服务网格(南北)。如需了解详情,请参阅服务路由概览和设置入站流量网关。
后续步骤
- 如需设置入站流量网关,请参阅为入站流量网关设置 Cloud Service Mesh。
- 如需对将代码运行为服务端点的虚拟机和容器进行分组,请参阅 Cloud Service Mesh 服务发现。
- 如需将 Cloud Service Mesh 与共享 VPC 搭配使用,请参阅 设置多集群服务网格。
- 如需详细了解 Cloud Service Mesh,请参阅 Cloud Service Mesh 概览。