同一区域中的 GCP 虚拟机无法 Ping 使用 GKE 内部 LB 入口创建的内部 HTTPS 负载均衡器 IP

Posted

技术标签:

【中文标题】同一区域中的 GCP 虚拟机无法 Ping 使用 GKE 内部 LB 入口创建的内部 HTTPS 负载均衡器 IP【英文标题】:GCP VM in same region not able to Ping Internal HTTPS Load Balancer IP created with GKE internal LB ingress 【发布时间】:2021-12-29 02:04:13 【问题描述】:

我部署了一个使用版本 1.20.10-gke.1600 的 GKE 集群。我已经使用 GCE 创建了内部入口,并将内部 ip 分配给了我的内部入口。但是,我无法从同一区域和网络中的 VM ping 到此内部入口 IP。对外部入口的 Ping 工作正常。 我阅读了下面的文档,它说无法 ping 到内部 TCP/UDP,因为它没有部署为网络设备。但是,我没有看到任何关于 internal HTTPS load balancer 的信息。

ping 10.128.0.174
Pinging 10.128.0.174 with 32 bytes of data:
Request timed out.
Ping statistics for 10.128.0.174:
    Packets: Sent = 1, Received = 0, Lost = 1 (100% loss)

问题是:为什么我无法 ping 到我的内部 LB 入口 IP?我正在尝试从同一区域和网络中的 VM ping。 curl 到内部入口 IP 有效,但 ping 无效。

【问题讨论】:

实际的问题是什么?你想达到什么目的?请说明你想知道什么:) 问题是为什么我无法 ping 到我的内部 LB 入口 IP。我正在尝试从同一区域和网络中的 VM ping。卷曲到内部入口 IP 正在工作,但不能 ping... 我很确定您无法 ping 内部 LB 的 IP。我相信目前预览版的新外部 LB 也是如此。 感谢@GariSingh,内部 HTTP LB 和内部 TCP/UDP 负载平衡器是否都适用?是否有任何具体原因导致我们无法 ping LB IP,我是否遗漏了一些基本的东西? 内部负载均衡是基于 Envoy 代理的,IP 是虚拟 IP,所以实际上没有什么可以“ping”的。 【参考方案1】:

集群 IP 只是(如 Gari Singh wrote)一个不会响应 ping 的虚拟设备。这是预期的行为。

关于pinging LB's internall address 的文档你清楚地链接说:

此测试演示了预期的行为:您无法 ping 负载平衡器的 IP 地址。这是因为内部 TCP/UDP 负载平衡器是在虚拟网络编程中实现的——它们不是单独的设备。

然后解释原因:

内部 TCP/UDP 负载平衡是使用来宾操作系统中的虚拟网络编程和 VM 配置实现的。在 Linux VM 上,Linux 来宾环境通过在来宾操作系统路由表中安装路由来执行本地配置。由于此本地路由,流向负载平衡器 IP 地址的流量会停留在负载平衡 VM 本身上。 (此本地路由与VPC网络中的路由不同。)

所以 - 例如,如果您尝试设置某种自定义运行状况检查,请确保,还要考虑从集群内部“ping”LB 的内部地址也是不可靠的:

不要依赖于从正在负载平衡的虚拟机(在该负载平衡器的后端服务中)向内部 TCP/UDP 负载平衡器发出请求。请求始终发送到发出请求的 VM,而健康检查信息将被忽略。此外,后端可以响应使用负载均衡器内部转发规则中配置的协议和目标端口以外的协议和目标端口发送的流量。

更多:

当发送请求的后端 VM 具有 --next-hop-ilb 路由且下一跃点目标是其自己的负载平衡 IP 地址时,此默认行为不适用。当 VM 以路由中指定的 IP 地址为目标时,请求可以由另一个负载平衡的 VM 响应。

例如,您可以使用 10.20.1.1 的 --next-hop-ilb 创建目标路由 192.168.1.0/24。

负载平衡器后面的虚拟机可以定位到 192.168.1.1。由于该地址不在本地路由表中,因此将其发送到 VM 以使 Google Cloud 路由适用。假设没有其他更高优先级的路由适用,则选择 --next-hop-ilb 路由。

最后 - 查看table of supported protocols - ICMP 仅适用于外部 TCP/UDP 负载平衡器。

【讨论】:

感谢您提供这些详细信息@Wojtek_B。这很有帮助。现在这对我来说很有意义。因此,我链接的文档清楚地提到了内部 tcp/udp 负载平衡器,而不是内部 http/https 负载平衡器,这让我对 GCP 中内部负载平衡器的工作感到困惑。 我的问题是关于内部 HTTP/HTTPS 负载平衡器而不是内部 tcp/udp 负载平衡器,我假设您在此处共享的任何信息也适用于内部 http/https 负载平衡器(?)。 ..谢谢... 正确 - 这同样适用于 HTTP(S) 负载均衡器。在table of supporter protocols 获得战利品 - ICMP 仅适用于外部 TCP/UDP 负载平衡器。 谢谢@Wojtek_B。我们有许多外部 HTTP(S) 经典负载平衡器,我仍然可以 ping 到它们的 LB IP。我什至创建了一个来测试并且 ping 也可以正常工作。但是,根据此表,ICMP 仅适用于外部 TCP/UDP。

以上是关于同一区域中的 GCP 虚拟机无法 Ping 使用 GKE 内部 LB 入口创建的内部 HTTPS 负载均衡器 IP的主要内容,如果未能解决你的问题,请参考以下文章

本地主机无法ping通虚拟机主机解决办法

为啥主机ping不通虚拟机的IP地址?

vmware里面一个克隆的虚拟机无法与主机和其他虚拟机ping通

VM虚拟机怎样ping通外部地址

安装虚拟机后用linux系统,网卡及DNS配置都没问题,为啥Ping不通网关?

VMWare虚拟机ping不同主机以外的其他电脑。