2015-06-18 12 views

Antwort

4

Per der metadata docs:

können Sie leicht erkennen, ob Ihre Anwendungen oder Skripte innerhalb einer Compute Engine-Instanz ausgeführt werden, indem die Metadaten-Server. Wenn Sie eine Anforderung an den Server senden, enthält jede Antwort vom Metadatenserver den Header Metadata-Flavor: Google. Sie können nach diesem Header suchen, um zuverlässig zu erkennen, ob Sie in Compute Engine ausgeführt werden.

Zum Beispiel gibt die folgende curl-Anforderung einen Metadata-Flavor: Google-Header zurück, der angibt, dass die Anforderung innerhalb einer Compute Engine-Instanz erfolgt.

[email protected]:~$ 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/ 
2

Sie können auch einen DNS-Lookup für den Metadaten-Server zu tun, anstatt es tatsächlich aufgerufen wird.

Zum Beispiel tun dig +short metadata.google.internalinnerhalb eine Google Compute Instanz ausgeben würde, so etwas wie dieses:

[[email protected]]# dig +short metadata.google.internal 
169.254.169.254 

Wenn aber tun Sie den gleichen Befehl (dig +short metadata.google.internal) in einem Standard-Server, außerhalb von Google Cloud , Sie könnten eine leere Antwort bekommen.

So zu überprüfen alles, was Sie tun müssen (in bash zum Beispiel) ist:

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 
Verwandte Themen