Как получить внешний IP-адрес экземпляров GCP Windows, используя метаданные экземпляра? - PullRequest
0 голосов
/ 25 июня 2019

Мне нужно получить внешний IP-адрес некоторых экземпляров GCP Windows.

Я попытался запросить метаданные экземпляра (https://cloud.google.com/compute/docs/storing-retrieving-metadata).

Конечная точка для внешнего IP-адреса: http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip

Это работает на экземплярах Linux с использованием curl:

$ curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip
35.XXX.XXX.XXX

Однако я не мог заставить его работать на экземплярах Windows с использованием powershell:

> (Invoke-WebRequest -UseBasicParsing -Headers @{"Metadata-Flavor"="Google"} "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip").Content
51
53
46
50
49
46
46
57
49
57
46
55

Я пробовал это на разных экземплярахс использованием общедоступных образов windows-2019 и windows-2016.

Экземпляры запускались с использованием стандартной командной строки gcloud:

gcloud compute instances create $instance-name \
    --image-project windows-cloud \
    --image-family windows-2019 \
    --machine-type n1-standard-1 \
    --boot-disk-size 50 \
    --boot-disk-type pd-ssd \
    --zone europe-west1-b

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

По какой-то причине Invoke-WebRequest игнорирует Content-Type: application/text в ответе и обрабатывает его как массив байтов.

Вы можете преобразовать байты в строку:

[System.Text.Encoding]::UTF8.GetString(
    (Invoke-WebRequest -Headers @{'Metadata-Flavor'='Google'} -Uri 'http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip').Content
)

или использовать Invoke-RestMethod:

Invoke-RestMethod -Headers @{'Metadata-Flavor'='Google'} -Uri 'http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip'
0 голосов
/ 25 июня 2019

Yo! Я предполагаю, что самый простой (и более быстрый способ) будет установить CURL для Windows , затем обработать метаданные, как это определено в Документах Google для Хранение и получение метаданных , и, наконец, если Power Shell является обязательным условием, тогда вы всегда можете посетить Google Cloud Tools для Power Shell , но иногда самый простой подход - лучше, и почти все примеры в Google Cloud основаны на cURL.

Надеюсь, это вам пригодится! Счастливый сценарий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...