通过 google 云 NAT 访问互联网时出现显着延迟

Significant delay when accessing internet via google cloud NAT

在我们的设置中,我们有没有外部 IP 的 VM 通过 Google Cloud NAT 访问外部世界。

我们正在观察奇怪的行为:

  ~$ for i in {1..50}; do echo $i;  time curl -s 'https://whosebug.com/' > 
  /dev/null; done
  .
  .
  .
  15

  real  2m10.830s
  user  0m0.049s
  sys   0m0.029s
    {
    .
    .
    .
      jsonPayload: {
        allocation_status: "DROPPED"
      }
      timestamp: "2019-09-20T11:41:05.904608023Z"  
    }

任何 ideas/suggestions 如何解决问题将不胜感激。 :)

谢谢,

鲍里斯

您的 VM 可能 运行 超出 available NAT ports. For example, if you allocate 4096 ports per VM, then you need a NAT IP address for every 15 VMs. During live operation if the VMs + NAT run out of available ports due to open connections (TCP being the longest lived) you may begin to see dropped traffic. You may want to consider reducing the TCP timeout,或者为每个 VM 分配了更多端口。

您可以在云控制台中使用 this command 查看 NAT 映射的当前状态(例如,每个 IP/VM 的端口数):

gcloud compute routers get-nat-mapping-info [路由器名称]

您可能还想查看与端点无关的映射:https://cloud.google.com/nat/docs/ports-and-addresses#conflicts-eim

流向 Public 端点的频繁、重复的流量受到 Ports/VM 数量以及独立于端点的映射配置的限制。如果 GCP 允许更改 NAT 延迟计时器,这将很有用:https://cloud.google.com/nat/docs/overview#nat_timeouts

在 256 Ports/VM,在 NAT-GW 上有 32 Public IP,我们计算出我们可以使 2.1 Requests/Second 相同(目标 IP、端口、协议)元组。