GCE网络负载平衡器将流量循环回到虚拟机

时间:2019-12-12 20:50:00

标签: networking google-compute-engine nlb

在GCE上,使用网络负载平衡器(NLB),我有以下情形:

1 VM with internal IP of 10.138.0.62 (no external IP)
1 VM with internal IP of 10.138.0.61 (no external IP)
1 NLB with a target pool (Backend) that contains both of these VMs
1 Health check that monitors a service on these VMs

一个简单的问题是,当其中一个VM到达NLB IP地址时,该请求将立即解析为发出该请求的同一实例的IP,这两个VM之间永远不会达到平衡,也就永远无法使该VM平衡。其他VM。即使发出请求的VM的运行状况检查失败。例如:

VM on 10.138.0.62 is in target pool of NLB and its service is healthy.
VM on 10.138.0.61 is in target pool of NLB and its service is NOT healthy.

从第二个VM(10.138.0.61)向NLB发出请求,即使该同一个VM的运行状况检查未通过,流量仍将传递给它自己。它基本上是在忽略NLB和运行状况检查的事实,而只是说:“如果VM在该NLB的目标池中,并且它尝试与NLB的IP联系,则将流量循环回自身”。 >

请注意,如果我从NLB的目标池中删除IP 10.138.0.61上的VM并再次尝试连接,它会立即进入仍在目标池中的其他VM,就像我期望的那样至。如果我将IP地址为10.138.0.61的虚拟机放回目标池中并尝试命中NLB,则它只会循环回到10.138.0.61上的调用计算机

谷歌搜索了一下,我发现在某些版本的Windows Server及其NLB上会发生这种现象,但是我没想到在GCE上会发生这种情况。其他人也看到过同样的行为吗?这只是我应该期望的已知行为吗?如果是这样,有什么解决方法吗?

1 个答案:

答案 0 :(得分:1)

这按预期工作。由于在虚拟环境中如何配置网络,这将始终导致负载平衡的VM将请求返回给自身,而忽略运行状况检查状态。请检查提供的link以获取更多信息。