为什么我无法访问GCP实例的元数据服务器?

use*_*823 5 google-compute-engine google-cloud-platform

当我尝试访问元数据服务器时出现Could not resolve host metadata.google.internal错误。Could not resolve host metadata

虽然我使用自己的 VPC 和自定义防火墙,但我不认为这是防火墙的问题,因为根据 Google 元数据服务器流量永远不会离开实例。此外,我的主机文件中有一个条目证明了这一点:

# Google Compute Engine metadata server 169.254.169.254 metadata.google.internal metadata

我尝试 ping 169.254.169.254,但它返回General Failure(但是,它证明什么都没有......我不确定元数据服务器是否允许 ICMP)。

我的 Stackdriver Logging Agent 也因此失败。这是其日志中的一行:

Failed to access metadata service: error_class=Errno::ENETUNREACH error="Failed to open TCP connection to 169.254.169.254:80 (A socket operation was attempted to an unreachable network. - connect(2) for \"169.254.169.254\" port 80)"

如果重要的话,我的 VPC 网络中的内部流量仅限于icmptcp:22(ssh)。

发生了什么以及如何解决这个问题?

Joh*_*ald 4

虽然我使用自己的 VPC 和自定义防火墙,但我不认为这是防火墙的问题,因为根据 Google 元数据服务器流量永远不会离开实例。

GCP 元数据流量永远不会离开运行实例的物理主机。此类请求会从访客界面发出,但永远不会被转发。

实例中的主机级防火墙可以阻止流量到达元数据服务器。因为它会在数据包离开来宾之前将其丢弃在实例的网络堆栈中。

通常,元数据服务响应 http、DNS 和 ICMP echo,但所有这些都不适用于您。只有一跳距离,因此不会被错误路由。当然听起来像防火墙。