2015-06-18 6 views

risposta

4

Per il metadata docs:

Si può facilmente rilevare se le applicazioni o gli script sono in esecuzione all'interno di un'istanza Compute Engine utilizzando il server metadati. Quando si effettua una richiesta al server, qualsiasi risposta dal server di metadati conterrà l'intestazione Metadata-Flavor: Google. È possibile cercare questa intestazione per rilevare in modo affidabile se si sta eseguendo in Compute Engine.

Ad esempio, la seguente richiesta di ricciolo restituisce un'intestazione Metadata-Flavor: Google, che indica che la richiesta viene eseguita da un'istanza di Compute Engine.

[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

È anche possibile fare una ricerca DNS per il server di metadati, in realtà invece di chiamarla.

Per esempio, facendo dig +short metadata.google.internalall'interno un'istanza di calcolo di Google sarebbe uscita una cosa del genere:

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

Se, tuttavia, si fa lo stesso comando (dig +short metadata.google.internal) all'interno di un server standard, al di fuori di Google Cloud , potresti ottenere una risposta vuota.

Quindi per controllare, tutto quello che dovete fare (in bash per esempio) è:

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 
Problemi correlati