我们在 GCP 上为虚拟机设置了一个非常简单的设置,没有公共 IP 地址。为了访问互联网,我们使用云 NAT(使用基本配置,参见附图):
我们遇到的问题是虚拟机丢失了互联网连接:
- 我们无法使用 SSH 访问它
- 基于 syslog 的 VM 无法访问 GCE 元数据服务器(
OSConfigAgent[514]: 2023-03-10T15:49:41.8034Z OSConfigAgent Error main.go:231: network error when requesting metadata, make sure your instance has an active network and can reach the metadata server: Get http://169.254.169.254/computeMetadata/v1/?recursive=true&alt=json&wait_for_change=true&last_etag=2a783d496d54f634&timeout_sec=60: dial tcp 169.254.169.254:80: connect: network is unreachable
)
这种情况的唯一解决方案是重新启动虚拟机,然后网络开始工作。发生某些事情后,第二个日志会不断重复。另一方面,我们有前面的日志:
systemd-networkd[501671]: ens4: Could not set DHCPv4 address: Connection timed out
systemd-networkd[501671]: ens4: Failed
kernel: [1118386.615077] systemd invoked oom-killer: gfp_mask=0x1100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
最初我们怀疑问题可能与 Cloud NAT 有关,但我们没有任何证据来证明和处理这一点,因为在 NAT 日志(错误和事务)中没有重大错误。
这个问题的主要思想是避免或自动处理这种情况,无需人工干预。如果需要更多信息,请告诉我。
答案1
您的系统规模太小。请注意以下消息systemd invoked oom-killer
。
这导致网络故障Could not set DHCPv4 address
。
解决方案:改进实例上运行的应用程序以使用更少的内存或选择可以处理工作负载的实例大小。