【问题标题】:load balancer is not allowing traffic back负载均衡器不允许流量返回
【发布时间】:2019-09-10 13:05:12
【问题描述】:

面临一个奇怪的问题。我们完整的基础设施在 Azure 上。

1) 我们有一个服务在一个端口 (9443) 上运行。它在 2 个盒子上运行,盒子 1 和盒子 2。

2) 我们在 azure 上使用 LB 对其进行前端处理,并且我已经为该端口创建了 LB 规则。

3) 现在从 azure 上的任何其他框中,我可以执行 curl -I -v https://dns.of.lb:9443/blah/blah 并得到 304 作为回报。

4) 我可以从浏览器访问 LB DNS,它运行良好。

问题是:当我从 box1 或 box2 运行相同的 curl 命令时,我什么也得不到。似乎 curl 卡住了,或者 LB 不让它通过。

但是从每个盒子,我仍然可以运行以下,并且两者都在两个盒子上运行。

https://dns.of.box1:9443/blah/blah https://dns.of.box2:9443/blah/blah

为什么 azure LB 不允许从负载平衡盒生成的流量通过负载平衡返回。我敢肯定,我不是在创建无限循环场景。这是一个有效的用例,一个盒子正在运行 2 个服务,一个服务想通过 LB 使用另一个服务,而不是直接使用。


更新 20190912

所以解决了上面提到的问题,我到现在都这样做了。

在机器上又增加了一个网卡。所以现在 azure VM1 (linux) 有 2 个网卡

  1. NIC 1:A.B.C.D
  2. NIC 2:A.B.C.E

(是的,IP 的前 3 部分相同)。事实上,我使用的所有系统(VM、LB)都有类似的东西。

  1. 现在我希望从 VM1 生成到 A.B.C.X:9443 的流量应该使用 NIC 1:A.B.C.D
  2. 从 VM1 生成到 A.B.C.X:8444 的流量应使用 NIC 2:A.B.C.E
  3. 其余流量可以选择任何网卡,我不太在意。

对于前 2 条规则,结束 IP 相同,只是端口不同。

这可能吗?如果可以,那么是使用路由表吗?如是, 请帮我设置路由表。

【问题讨论】:

    标签: azure unix routing azure-virtual-network azure-load-balancer


    【解决方案1】:

    这是一个不受支持的场景,当从同一个虚拟机和网络接口访问负载均衡器时会失败,参考here

    如果您在负载均衡器后端虚拟机中托管的应用程序是 尝试访问托管在同一后端 VM 中的另一个应用程序 在同一个网络接口上,这是一个不受支持的方案,并且 会失败。

    解决方案您可以通过以下方法之一解决此问题 方法:

    • 为每个应用程序配置单独的后端池 VM。
    • 配置 双网卡虚拟机中的应用程序,因此每个应用程序都使用自己的网络接口和 IP 地址。

    更新1

    对于您的更新,路由表无法做到这一点,因为 IP 路由是网络层实体。它无法识别作为传输层 (TCP/UDP) 实体的端口。

    在您的情况下,您有两个 NIC,每个 NIC 都可以与其应用程序绑定。通过这个document,Azure 还能够将任何 NIC 的任何私有 IP 地址添加到 Azure 负载均衡器后端池。然后您需要使第二个网卡可以在其子网之外进行通信。您必须手动将持久路由添加到操作系统因发行版而异。阅读详情here

    【讨论】:

    • 您的问题有什么更新吗?如果你已经解决了,你可以在这里发布你的解决方案。
    • 抱歉回复晚了,刚刚发布了我的答案。
    【解决方案2】:

    在发布我如何解决它之前。我想提几件事。我对 UNIX 路由表配置不是很精通。尽管 AZURE NIC UI 界面确实提供了一些机制来允许/阻止基于源和目标的流量。实际上它没有用。

    所以基本上我想通过 LB 路由在同一 VM 上运行的 b/w 2 应用程序的流量。根据 MSFT 文档,这是不可能的。

    所以我将 2 个 NIC 连接到 VM。我将 app1 绑定到 nic1,将 app2 绑定到 nic2。并且通过 telnet 我能够确认他们正在侦听所需的 IP。但后来我尝试了很多东西,但我无法将来自 aap1 的传出流量路由到使用 NIC1,也无法将来自 app2 的传出流量路由到使用 NIC2。所以LB仍然在阻止交通。

    我唯一能做的就是从 NIC1 或 NIC2 路由来自 VM 的全部流量。

    所以最后(由于时间限制),我选择了最昂贵的选项。我在 vm1 上安装了 app1,在 vm2 上安装了 app2。现在一切正常。

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 2021-12-07
      • 2016-11-21
      • 2012-08-27
      相关资源
      最近更新 更多