1

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

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

  • 每 10 - 15 个请求被显着延迟(15 - 135 秒)
  ~$ for i in {1..50}; do echo $i;  time curl -s 'https://stackoverflow.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"  
    }

任何如何解决问题的想法/建议都将受到高度赞赏。:)

谢谢,

鲍里斯

4

2 回答 2

9

您的虚拟机可能会用尽可用的 NAT 端口。例如,如果您为每个 VM 分配 4096 个端口,那么您需要为每 15 个 VM 分配一个 NAT IP 地址。在实时操作期间,如果 VM + NAT 由于打开的连接(TCP 是寿命最长的)而耗尽可用端口,您可能会开始看到流量下降。您可能需要考虑减少TCP 超时,或为每个 VM 分配更多端口。

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

gcloud 计算路由器 get-nat-mapping-info [ROUTER NAME]

于 2019-09-23T11:58:20.343 回答
0

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

到公共端点的频繁、重复的流受到端口/VM 数量以及与端点无关的映射配置的限制。如果 GCP 允许更改 NAT 延迟计时器会很有用:https ://cloud.google.com/nat/docs/overview#nat_timeouts

在 256 个端口/VM 上,在 NAT-GW 上有 32 个公共 IP,我们计算出我们可以向相同的(目标 IP、端口、协议)元组发出 2.1 个请求/秒。

于 2021-06-15T00:14:48.753 回答