我们目前有一个google云设置,它有一个位于TCP负载均衡器后面的后端服务(由3台vm机器组成的托管实例组)。在前端配置中,我们有一个将流量重定向到端口6443的静态外部ip地址,以及连接到负载均衡器的端口6443上的tcp运行状况检查。在后端服务中的3个vm实例中,最初只有一台机器具有在端口6443上运行的服务。因此,负载均衡会在负载均衡详情页正确检测到1个健康实例和2个不健康实例。为了在端口6443上不健康的vm实例上启动服务,我们需要通过负载均衡器ip和相同的端口连接到健康的vm实例。如果我们使用负载均衡器ip和端口6443从负载均衡器外部(而不是从后端实例)连接到vm实例,我们可以看到连接成功地连接到后端服务中的健康vm实例。但是,当尝试从后端服务中的一个不健康的vm实例连接到负载均衡器时,我们可以看到连接被重定向回相同的实例,而不是健康的vm实例,从而导致连接被拒绝错误。google cloud tcp负载均衡器中是否有设置允许负载均衡器ip和服务端口上的连接始终重定向到一个健康的实例,即使请求的来源来自负载均衡器后面?
发布于 2021-05-27 11:48:54
据我所知,您配置了一个以MIG为后端的TCP负载均衡器。
在TCP负载均衡器中,它将原始连接直接从客户端路由到健康的后端,而不会有任何中断,来自后端VM的响应直接到达客户端,而不是通过负载均衡器返回。
如果客户端VM是负载平衡器的后端VM,并且发送到负载平衡器的IP地址转发规则的连接始终由后端VM本身应答,这是预期的行为,无论后端VM是否健康都会发生这种情况。所有发送到负载均衡器的IP地址的流量都会发生这种情况,而不仅仅是负载均衡器的转发规则中指定的协议和端口上的流量。
出于故障排除的目的,我建议您在项目中的不同VPC网络中添加另一台测试虚拟机,并尝试从测试虚拟机连接到负载均衡外部IP地址。
发布于 2021-05-27 12:06:38
就一般网络而言,这是不可能的。
作为一个基本示例,假设您有3个内部私有IP地址,让我们将它们分别称为192.168.1.2、192.168.1.3和192.168.1.4。
他们说,所有都使用192.168.1.5的共享虚拟IP地址进行负载平衡。
现在,您的路由器位于192.168.1.1,它的公共IP为10.10.10.1,并且已配置为将给定端口的传入外部流量(例如HTTP流量的外部端口80 )定向到某个专用端口(例如6443 )上的负载平衡IP。
假设192.168.1.2、192.168.1.3不健康,192.168.1.4健康。
192.168.1.2向10.10.10.1:80发送请求。
您的路由器现在将在192.168.1.1上接收该流量,并向10.10.10.1:80发送数据包。
现在,数据包进入路由器接口10.10.10.1:80,然后路由器根据NAT/端口转发规则将数据包路由到192.168.1.5:6443。
数据包通过线路发送到192.168.1.5:6443,由于唯一健康的主机是192.168.1.4,因此数据包将由该主机处理。
发布于 2021-07-03 05:44:35
来自后端的任何LB流量都将被来宾操作系统环回。外部路由机制看不到此流量,因此无法更改此行为。这是因为LB IP是本地路由表的一部分,并且操作系统将始终在该表中环回目的地。这与后端的健康状态无关。
https://stackoverflow.com/questions/67676585
复制相似问题