Google compute engine 如何知道机器是否是Google计算引擎实例
有没有办法从命令行shell知道我当前是在Google计算引擎机器上还是在其他地方(开发机器)?根据: 通过使用元数据服务器,您可以轻松检测应用程序或脚本是否在计算引擎实例中运行。当您向服务器发出请求时,元数据服务器的任何响应都将包含Google compute engine 如何知道机器是否是Google计算引擎实例,google-compute-engine,google-cloud-platform,Google Compute Engine,Google Cloud Platform,有没有办法从命令行shell知道我当前是在Google计算引擎机器上还是在其他地方(开发机器)?根据: 通过使用元数据服务器,您可以轻松检测应用程序或脚本是否在计算引擎实例中运行。当您向服务器发出请求时,元数据服务器的任何响应都将包含metadata-Flavor:Google标题。您可以查找此标头以可靠地检测您是否正在计算引擎中运行 例如,下面的curl请求返回一个元数据风格:Google头,指示该请求是从计算引擎实例中发出的 me@my-inst:~$ curl metadata.googl
metadata-Flavor:Google
标题。您可以查找此标头以可靠地检测您是否正在计算引擎中运行
例如,下面的curl请求返回一个元数据风格:Google
头,指示该请求是从计算引擎实例中发出的
me@my-inst:~$ curl metadata.google.internal -i
HTTP/1.1 200 OK
Metadata-Flavor: Google
Content-Type: application/text
Date: Thu, 10 Apr 2014 19:24:27 GMT
Server: Metadata Server for VM
Content-Length: 22
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
0.1/
computeMetadata/
如果您不想打网络电话,也可以:
my@myinst:~$ sudo dmidecode -s bios-vendor | grep Google
Google
您还可以为元数据服务器执行DNS查找,而不是实际调用它 例如,在google Compute实例中执行
dig+short metadata.google.internal
,将输出如下内容:
[root@vm-1]# dig +short metadata.google.internal
169.254.169.254
但是,如果在标准服务器中,在谷歌云之外执行相同的命令(dig+short metadata.google.internal
),您可能会得到一个空响应
因此,要检查,您需要做的(例如在bash
中)是:
下面是通过
导入套接字
def是_gce_实例():
“”“通过对元数据服务器的DNS查找检查它是否是GCE实例。
"""
尝试:
socket.getaddrinfo('metadata.google.internal',80)
除socket.gai错误外:
返回错误
返回真值
这避免了网络呼叫,因此更加可靠和快速。此外,dmidecode
方法适用于其他云提供商,例如Digital Ocean。非常感谢!
GMETADATA_ADDR=`dig +short metadata.google.internal`
if [[ "${GMETADATA_ADDR}" == "" ]]; then
echo "I am NOT in a Google VM!"
else
echo "I AM INSIDE a Google VM! Whoohoo!"
fi