Google 负载均衡器未将流量传递到后端

Google Load Balancer not passing traffic to back end

我正在尝试使用负载均衡器将流量定向到容器后端。容器中的服务在 port 80 上托管网络流量。我的健康检查都通过了。如果我通过 ssh 进入容器的 Kubernetes 主机,我可以卷曲每个容器并在 port 80 上获得正确的响应。但是,当我尝试通过负载平衡器外部 IP 访问它们时,我收到了 502 响应。我有防火墙规则,允许来自 130.211.0.0/22tcp:1-5000 和 NodePort 端口上的流量。我还尝试将来自 0.0.0.0/0 端口 80 和 443 的防火墙规则添加到这些节点。

在 Kubernetes 主机中,使用 tcpdump 捕获时,我看到了对我的容器的健康检查请求,但是当我发出外部请求时没有流量通过。

我有一个相同的配置,它指向一个完美运行的单个 Compute Engine 虚拟机。这让我相信问题可能出在容器设置中,而不是负载均衡器中。

有人对解决这个问题有什么建议吗?

我能够通过更改负载平衡器连接到的命名端口来解决问题。默认情况下,负载均衡器连接到指向端口 80 的命名端口 "http"。我的假设(总是一件坏事)匹配,因为我的应用程序在端口 80 上服务。不是这样。由于我通过 NodePort 公开了容器,因此它被分配了另一个端口。这是我的健康检查指向的端口。通过进入 "Compute Engine -> Instance groups" 选择组,然后 "Edit Group",我能够更改命名端口 "http" 以匹配我的 NodePort 编号。一旦我这样做了,流量就开始流动了。