来自区域内的 GCE TCP 负载均衡器访问始终路由到同一区域

来自区域内的 GCE TCP 负载均衡器访问始终路由到同一区域

我们在 GCE 的三个区域运行,前面有一个 TCP 代理负载均衡器。负载均衡器的后端位于其中一个区域内的单个节点上。使用健康检查,负载均衡器可以确定将流量发送到何处。当流量源自 Google 之外时,这可以按预期工作。对于传出流量,我们使用 NAT 网关和优先级低于默认 Google 路由(800 而不是 1000)的路由来实际将 0.0.0.0/0 的流量路由到那里。

但是,当与 TCP 负载均衡器的(活动)后端不在同一区域的后端服务器之一尝试访问外部地址时,它将发生连接超时。该路由似乎未被使用。如果请求来自与活动后端相同的区域,则它可以工作。nat 网关路由似乎未被使用。

当然,一种解决方案是确保所有区域中都有活动后端,但我们不想这样做。我们注意到的一件事是,当我们通过此外部 IP 地址从集群内部获取流量时,我们日志中的客户端 IP 地址似乎就是负载均衡器地址本身。有没有其他方法可以解决这个问题?这是预期行为还是我们可能错误配置了某些路由或防火墙?

答案1

您确定您使用的是 TCP 代理负载均衡器吗?因为如果您使用的是非代理负载均衡器,则预计您会看到此行为。

内部负载均衡器 (ILB) 不是客户端和后端实例之外的实际设备,而是作为客户端和服务器使用的软件定义网络的编程实现的。ILB 逻辑在客户端实现,但如果后端也是同一 ILB 的客户端,由于 ILB IP 地址是在后端实例上运行的客户 Google Compute Engine (GCE) 代理中配置的,因此数据包永远不会“到达”ILB,因为 GCE 代理直接在后端实例内处理数据包。

换句话说,ILB 在每个后端实例操作系统内部配置一个路由和一个 IP 地址。如果一个后端实例向 ILB 发出请求,该请求将保留在该实例内部,而不会路由到任何其他后端实例。

有关内部负载均衡器的文档可在此处找到关联

相关内容