Czy jest jakiś sposób sprawdzenia z poziomu wiersza poleceń, czy aktualnie znajduję się na komputerze Google Compute Engine lub w innym miejscu (na maszynie programistycznej)?Jak sprawdzić, czy komputer jest instancją silnika Google Compute Engine
Odpowiedz
Per na metadata docs:
można łatwo wykryć, czy aplikacje lub skrypty są uruchomione w przypadku Compute Engine przy użyciu serwera metadanych. Po wysłaniu żądania do serwera każda odpowiedź z serwera metadanych będzie zawierać nagłówek
Metadata-Flavor: Google
. Możesz szukać tego nagłówka, aby niezawodnie wykryć, czy używasz Compute Engine.Na przykład następujące żądanie zwijania zwraca nagłówek
Metadata-Flavor: Google
, wskazując, że żądanie jest wykonywane z poziomu instancji 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/
Można również use the dmidecode
utility to probe the virtual hardware jeśli nie chcesz, aby nawiązać połączenie z siecią:
[email protected]:~$ sudo dmidecode -s bios-vendor | grep Google
Google
Można także wykonać wyszukiwanie DNS dla serwera metadanych, zamiast faktycznie nazywając ją.
Na przykład, robi dig +short metadata.google.internal
wewnątrz instancji Google Compute byłoby wyjście coś takiego:
[[email protected]]# dig +short metadata.google.internal
169.254.169.254
Jeśli jednak zrobisz to samo polecenie (dig +short metadata.google.internal
) wewnątrz standardowego serwera, poza Google Cloud , możesz uzyskać pustą odpowiedź.
więc sprawdzić, wszystko co trzeba zrobić (w bash
na przykład) to:
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