SSL 代理负载平衡概览

SSL 代理负载平衡是一种反向代理负载平衡器,它将来自互联网的 SSL 流量分配到您的 Google Cloud VPC 网络中的虚拟机实例。

为 SSL 流量使用 SSL 代理负载平衡时,用户 SSL (TLS) 连接会在负载平衡层终止,然后使用 SSL(推荐)或 TCP 代理到最近的可用后端实例。如需了解受支持的后端类型,请参阅后端

如果使用优质层级,SSL 代理负载平衡可以配置为全球负载平衡服务。如果使用标准层级,SSL 代理负载平衡器会在区域范围处理负载平衡。如需了解详情,请参阅 Network Service Tiers 中的负载平衡器行为

在本示例中,爱荷华州和波士顿用户的流量会在负载平衡层终止,然后系统会建立通向所选后端的独立连接。

具有 SSL 终止功能的 Cloud Load Balancing(点击放大)
具有 SSL 终止功能的 Cloud Load Balancing(点击可放大)

SSL 代理负载平衡用于处理非 HTTP(S) 流量。对于 HTTP(S) 流量,我们建议您使用 HTTP(S) 负载平衡

如需了解各种 Google Cloud 负载平衡器之间的具体区别,请参阅以下文档:

优势

以下是使用 SSL 代理负载平衡的一些优点:

  • IPv6 终结。SSL 代理负载平衡同时支持使用 IPv4 和 IPv6 地址来路由客户端流量。客户端 IPv6 请求在负载平衡层终止,然后通过 IPv4 经过代理转发到您的虚拟机。

  • 智能路由。负载平衡器可以将请求路由到有容量可用的后端位置。相比之下,L3/L4 负载平衡器必须将请求路由到区域后端,但不考虑容量。使用更智能的路由可以按 N+1 或 N+2(而不是 x*N)模式进行配置。

  • 更好地利用后端。如果使用的加密算法不便于 CPU 高效运行,则 SSL 处理可能会占用大量 CPU 资源。为了最大限度地提高 CPU 性能,请使用 ECDSA SSL 证书和 TLS 1.2,并且优先选择 ECDHE-ECDSA-AES128-GCM-SHA256 加密套件用于负载平衡器和后端实例之间的 SSL 处理。

  • 证书管理。面向客户的 SSL 证书可以是您获取和管理的证书(自行管理的证书),也可以是 Google 为您获取和管理的证书(Google 管理的证书)。每个 Google 管理的 SSL 证书最多支持 100 个域名。Google 管理的证书支持多个域名。您只需在负载平衡器上预配证书即可。在虚拟机上,您可以使用自签名证书来简化管理。

  • 安全修补。如果 SSL 或 TCP 堆栈中出现漏洞,我们会自动在负载平衡器上应用补丁程序来确保您的虚拟机安全。

  • 支持以下常见端口:25、43、110、143、195、443、465、587、700、993、995、1883、3389、5222、5432、5671、5672、5900、5901、6379、8085、8099、9092、9200、9300。当您将 Google 代管的 SSL 证书与 SSL 代理负载平衡结合使用时,流量的前端端口必须为 443,您才能预配和续订 Google 管理的 SSL 证书。

  • SSL 政策。通过 SSL 政策,您可以控制 SSL 代理负载平衡器与客户端协商的 SSL 功能。

  • 控制 TLS 终止的地理位置。SSL 代理负载平衡器可在全球各处的地理位置终止 TLS,从而最大程度减少客户端与负载平衡器之间的延迟时间。如果您需要控制 TLS 终止的地理位置,应改用网络负载平衡,并在位于所需区域的后端上终止 TLS。

架构

下面介绍了 SSL 代理负载平衡器的组件。

转发规则和 IP 地址

转发规则会按照 IP 地址、端口和协议将流量路由到由目标代理和后端服务组成的负载平衡配置。

每条转发规则都会提供一个 IP 地址,可用于应用的 DNS 记录。因此无需基于 DNS 的负载平衡。您可以预留可用的静态 IP 地址,也可以让 Cloud Load Balancing 为您分配一个 IP 地址。我们建议您预留静态 IP 地址;否则,每当您删除转发规则并创建新的转发规则时,都必须使用新分配的临时 IP 地址更新 DNS 记录。

您在 SSL 代理负载平衡器中使用的每个外部转发规则都只能引用转发规则的端口规范中列出的任一端口。

目标代理

SSL 代理负载平衡会终止来自客户端的 SSL 连接并创建与后端的新连接。目标代理会将传入请求直接路由到后端服务。

默认情况下,系统不会保留原始客户端 IP 地址和端口信息。您可以使用 PROXY 协议来保留此信息。

SSL 证书

您必须在目标 SSL 代理上安装一个或多个 SSL 证书。 目标 SSL 代理会使用这些证书来保护 Google 前端 (GFE) 和客户端之间的通信。这些证书可以是自行管理的 SSL 证书或 Google 管理的 SSL 证书。如需了解 SSL 证书限制和配额,请参阅负载平衡配额页面上的 SSL 证书

因此,您可以创建 SSL 政策来控制负载平衡器协商的 SSL 的功能。如需了解详情,请参阅 SSL 政策概览

通过未加密的 TCP 在负载平衡层和后端实例之间发送流量,您可以从后端分流 SSL 处理;但是,此举也会降低安全性。因此,我们不建议您这样做。 为了获得最佳安全性,请对 SSL 代理负载平衡器部署使用端到端加密。如需了解详情,请参阅从负载平衡器到后端的加密

如需了解有关 Google 如何对用户流量进行加密的一般信息,请参阅Google Cloud 中的传输加密白皮书。

后端服务

后端服务将传入的流量定向到一个或多个关联后端。每个后端均由一个实例组网络端点组,以及有关后端服务容量的信息组成。后端服务容量可以基于 CPU 或每秒请求次数 (RPS) 计算。

每项后端服务都会指定要为可用后端执行的运行状况检查

为了尽量减少用户遭遇的中断,您可以在后端服务上启用连接排空功能。在终止后端、手动移除后端或通过自动扩缩程序移除后端时可能会发生此类中断。如需详细了解如何使用连接排空功能来最大限度地减少服务中断,请参阅启用连接排空功能

防火墙规则

后端实例必须允许来自以下来源的连接:

  • 负载均衡器,即发送到后端的所有请求的 Google Front End (GFE)
  • 运行状况检查探测

如需允许此流量,您必须创建入站防火墙规则。这些防火墙规则的端口必须允许如下流量:

  • 发送到每个后端服务的运行状况检查的目标端口的流量。

  • 对于实例组后端:取决于后端服务的已命名端口与每个实例组上该已命名端口关联的端口号之间的映射。分配给同一后端服务的各实例组的端口号可能各不相同。

  • 对于 GCE_VM_IP_PORT NEG 后端:发送到端点的端口号的流量。

防火墙规则在虚拟机实例级层(而不是在 GFE 代理上)实现。您无法使用 Google Cloud 防火墙规则来阻止流量到达负载平衡器。 您可以使用 Google Cloud Armor 来实现此目的。

如需详细了解运行状况检查探测以及必须允许来自它们的流量的原因,请参阅探测 IP 地址范围和防火墙规则

对于 SSL 代理负载均衡器和 TCP 代理负载均衡器,所需的来源范围如下所示:

  • 130.211.0.0/22
  • 35.191.0.0/16

这些范围适用于 GFE 中的健康检查和请求。

来源 IP 地址

后端所识别的数据包的来源 IP 地址是负载均衡器的 Google Cloud 外部 IP 地址。换句话说,存在两个 TCP 连接:

  • 连接 1,即从原始客户端到负载均衡器 (GFE) 的连接:

    • 来源 IP 地址:原始客户端(如果客户端位于 NAT 或转发代理后面,则为外部 IP 地址)。
    • 目标 IP 地址:您的负载平衡器的 IP 地址。
  • 连接 2,即从负载均衡器 (GFE) 到后端虚拟机或端点的连接:

    • 来源 IP 地址防火墙规则中指定的某个范围中的一个 IP 地址。

    • 目的地 IP 地址:Virtual Private Cloud (VPC) 网络中的后端虚拟机或容器的内部 IP 地址。

保留客户端来源 IP 地址

如需保留到负载平衡器的传入连接的原始来源 IP 地址,您可以将负载平衡器配置为在开头添加一个 PROXY 协议版本 1 标头,以保留原始连接信息。如需了解详情,请参阅更新代理的 PROXY 协议标头

开放端口

SSL 代理负载平衡器是反向代理负载平衡器。负载平衡器终结传入的连接,然后打开从负载平衡器通向后端的新连接。这些负载均衡器是使用全球 Google Front End (GFE) 代理实现的。

GFE 具有多个开放端口,用于支持在同一架构上运行的其他 Google 服务。如需查看可能会在 GFE 上打开的一些端口的列表,请参阅“转发规则:端口规范”。GFE 上运行的其他 Google 服务可能有其他开放端口。

从审核角度对基于 GFE 的负载均衡器的 IP 地址运行端口扫描没有用,原因如下:

  • 执行 TCP SYN 探测时,端口扫描(例如使用 nmap)通常不需要响应数据包或 TCP RST 数据包。如果您的负载均衡器使用高级层级 IP 地址,则 GFE 将发送 SYN-ACK 数据包以响应各种端口的 SYN 探测。但是,GFE 仅会将数据包发送到您的后端,以响应发送到负载均衡器的 IP 地址以及在其转发规则上配置的目的地端口的数据包。如果数据包发送到转发规则中未配置的端口上的不同负载均衡器 IP 地址或您的负载均衡器的 IP 地址,则系统不会将数据包发送到您的负载均衡器的后端。即使没有任何特殊配置,Google 基础架构和 GFE 也会深度防御 DDoS 攻击和 SYN 洪水攻击。

  • 发送到负载均衡器的 IP 地址的数据包可以由 Google 舰队中的任何 GFE 进行响应;但是,扫描负载均衡器 IP 地址和目的地端口组合只会查询每个 TCP 连接的单个 GFE。负载均衡器的 IP 地址未分配给单个设备或系统。因此,扫描基于 GFE 的负载均衡器的 IP 地址不会扫描 Google 舰队中的所有 GFE。

考虑到这一点,您可以通过以下几种更有效的方法审核后端实例的安全性:

  • 安全审核者应检查负载均衡器配置的转发规则配置。转发规则定义负载均衡器接受数据包并将其转发到后端的目的地端口。对于基于 GFE 的负载均衡器,每条外部转发规则只能引用单个目的地 TCP 端口

  • 安全审核者应检查适用于后端虚拟机的防火墙规则配置。您设置的防火墙规则会阻止从 GFE 流向后端虚拟机的流量,但不会阻止流向 GFE 的传入流量。如需了解最佳做法,请参阅防火墙规则部分

流量分配

SSL 代理负载均衡器将流量分配给后端的方式取决于均衡模式以及所选的用于选择后端的哈希方法(会话亲和性)。

连接的分配方式

TCP 代理负载平衡可以配置为优质层级中的全球性负载平衡服务,以及标准层级中的区域性服务。

对于优质层级

  • 您可以只拥有一个后端服务,但该后端服务可以在多个区域拥有后端。对于全球负载平衡,您可以在多个区域部署后端,负载平衡器会自动将流量定向到离用户最近的区域。如果一个区域已经满负荷,则负载平衡器会自动将新的连接定向到另一个具有可用容量的区域。现有用户连接将保留在当前区域中。
  • Google 会从全球所有入网点通告您的负载平衡器的 IP 地址。每个负载平衡器 IP 地址都是全球任播。
  • 如果您使用多个区域中的后端来配置后端服务,则 Google Front End (GFE) 会尝试将请求定向到离用户最近的区域中运行状况良好的后端实例组或 NEG。本页面记录了此过程的详细信息。

对于标准层级

  • Google 会从与转发规则的区域关联的接入点通告负载平衡器的 IP 地址。负载平衡器使用区域级外部 IP 地址。

  • 您可以在转发规则所在的区域中配置后端。此处记录的过程仍然适用,但 GFE 仅将请求定向到该区域中运行状况良好的后端。

请求分配过程

从每个可用区级 GCE_VM_IP_PORT NEG、可用区级实例组或区域级实例组的可用区的角度看,均衡模式和目标选择定义了后端完整性。可用区内的分配随后将通过一致的哈希处理完成。

负载平衡器使用以下过程:

  1. 转发规则的外部 IP 地址由 Google 网络边界上的边缘路由器通告。每个通告都会列出尽可能靠近用户的第 3/4 层负载平衡系统 (Maglev) 的下一个跃点。
  2. Maglev 系统会检查传入数据包的来源 IP 地址。它们会将传入的请求定向到 Google 的地理位置 IP 系统确定的尽可能靠近用户的 Maglev 系统。
  3. Maglev 系统将流量路由到第一层 Google 前端 (GFE)。第一层 GFE 会根据需要终止传输层安全协议 (TLS),然后按照此过程将流量路由到第二层 GFE:
    1. 如果后端服务使用实例组或 GCE_VM_IP_PORT NEG 后端,则第一层 GFE 更倾向于位于包含实例组或 NEG 的区域内或附近的第二层 GFE。
    2. 对于具有混合 NEG、无服务器 NEG 和互联网 NEG 的后端存储分区和后端服务,第一层 GFE 选择的区域子集中的第二层 GFE 会使得两个 GFE 之间的往返时间最短。

      第二层 GFE 偏好选择不能保证,并且可能根据 Google 的网络状况和维护动态变化。

      第二层 GFE 可识别运行状况检查状态和实际后端容量使用情况。

  4. 第二层 GFE 将请求定向到其所在区域内的可用区中的后端。
  5. 对于优质层级,有时第二层 GFE 会将请求发送到不同区域的可用区中的后端。这种行为称为溢出
  6. 溢出受两个原则约束:

    • 当第二层 GFE 知道的所有后端达到容量或运行状况不佳时,可能会发生溢出。
    • 第二层 GFE 含有其他区域的可用区中运行状况良好的所有后端的信息。

    第二层 GFE 通常配置为提供部分后端位置。

    溢出行为不会耗尽所有可能的 Google Cloud 可用区。如果您需要将流量引导离开特定可用区或整个区域中的后端,则必须将容量扩缩程序设置为零。将后端配置为无法通过运行状况检查并不能保证第二层 GFE 会溢出到其他区域的可用区中的后端。

  7. 将请求分配到后端时,GFE 会在可用区级运行。

    如果连接数较少,则第二层 GFE 有时偏好选择某个区域中的一个可用区,而不是其他可用区。这种偏好属于正常现象,并且符合预期。在负载平衡器接收更多连接之前,区域内的可用区之间的分布不会变得均匀。

平衡模式

当您向后端服务添加后端时,可以设置负载平衡模式

对于 SSL 代理负载平衡,平衡模式可以为 CONNECTIONUTILIZATION

如果负载平衡模式为 CONNECTION,则系统会根据后端可以处理的并发连接数来分配负载。您还必须准确指定以下参数之一:maxConnections(区域级代管式实例组除外)、maxConnectionsPerInstancemaxConnectionsPerEndpoint

如果负载平衡模式为 UTILIZATION,则系统会根据实例组中的实例利用率来分配负载。

如需了解如何比较负载平衡器类型和支持的平衡模式,请参阅负载平衡方法

会话粘性

会话亲和性会将来自同一客户端的所有请求发送到同一个后端(前提是该后端运行状况良好且有可用容量)。

SSL 代理负载平衡提供客户端 IP 亲和性,它将来自同一客户端 IP 地址的所有请求转发到同一个后端。

故障转移

如果后端运行状况不佳,流量会被自动重定向到同一区域内的运行状况良好的后端。如果一个区域内的所有后端运行状况不佳,则流量将分配到其他区域内运行状况良好的后端(仅限优质层级)。如果所有后端运行状况不佳,则负载平衡器会丢弃流量。

GKE 应用的负载平衡

如果您在 Google Kubernetes Engine 中构建应用,则可以使用独立 NEG 将流量的负载直接均衡到容器。使用独立 NEG 时,您需要创建用于创建 NEG 的 Service 对象,然后将 NEG 与后端服务相关联,以便负载均衡器可以连接到 Pod。

相关 GKE 文档:

限制

  • 每个 SSL 代理负载平衡器都有一个后端服务资源。对后端服务的更改不是即时的。更改可能需要几分钟才能传播到 Google Front End (GFE)。

  • SSL 代理负载平衡器不支持基于客户端证书的身份验证(也称为双向 TLS 身份验证)。

  • 虽然 SSL 代理负载平衡可以处理 HTTPS 流量,但我们不建议这样做。您应该使用 HTTP(S) 负载平衡来处理 HTTPS 流量。HTTP(S) 负载平衡还具有以下功能,这使其在大多数情况下成为更好的选择:

    • 通过协商处理 HTTP/2 和 HTTP/3。
    • 拒绝无效的 HTTP 请求或响应。
    • 根据网址主机和路径将请求转发给不同的虚拟机。
    • Cloud CDN 集成。
    • 在后端实例之间更均匀地分布请求负载,从而提供更好的后端利用率。HTTPS 会对每个请求单独执行负载平衡,而 SSL 代理负载平衡会将来自同一 SSL 或 TCP 连接的所有字节发送到同一个后端实例。
  • 对于使用 Google 代管的 SSL 证书的 SSL 代理负载平衡器,前端端口必须包含 443 才能成功预配和续订证书。

    SSL 代理负载平衡可用于其他使用 SSL 的协议,例如使用 SSL 的 WebSocket 和 IMAP。

  • SSL 代理负载均衡器仅支持在证书的通用名称 (CN) 特性或主题备用名称 (SAN) 特性中网域包含小写字符。只有在目标代理中设置为主证书时,系统才会返回网域中包含大写字符的证书。

  • SSL 代理负载平衡器不支持 VPC 网络对等互连。

后续步骤