為什麼我無法訪問 GCP 實例的元數據伺服器?
嘗試訪問元數據伺服器時出現錯誤
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
(但是,它什麼也沒證明……我不確定 Metadata Server 是否允許 ICMP)。我的 Stackdriver 日誌記錄代理也因此失敗。這是其日誌中的一行:
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 網路中的內部流量僅限於
icmp
和tcp:22
(ssh)。發生了什麼以及如何解決此問題?
雖然我使用自己的 VPC 和自定義防火牆,但我不認為這是防火牆的問題,因為根據 Google 元數據伺服器流量永遠不會離開實例。
GCP 元數據流量永遠不會離開執行實例的物理主機。此類請求會從客人的介面發出,但永遠不會被轉發。
實例中的主機級防火牆可以阻止流量到達元數據伺服器。因為它在離開來賓之前將數據包丟棄在實例的網路堆棧中。
通常元數據服務會響應 http、DNS 和 ICMP 回顯,但它們都不適合您。只有一跳,所以不像它可以被錯誤地路由。當然聽起來像防火牆。