Доступ к Azure службе метаданных экземпляра (169.254.169.254) из контейнера Windows docker - PullRequest
0 голосов
/ 06 августа 2020

Azure ВМ может запрашивать данные в службе метаданных экземпляра , расположенной по адресу 169.254.159.254. Однако это не работает из контейнера Windows, запущенного на виртуальной машине.

Как может контейнер Windows запрашивать службу метаданных экземпляра, доступную только с хост-виртуальной машины?

Для пример при использовании контейнера Windows, подобного этому: docker run -it --rm mcr.microsoft.com/windows/servercore:ltsc2019

И запрос данных, подобных этому: Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri http://169.254.169.254/metadata/instance?api-version=2019-06-01

Результат:

At line:1 char:1
+ Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri http ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebExc
   eption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

1 Ответ

1 голос
/ 07 августа 2020

Боюсь, что мы не можем получить доступ к конечной точке службы метаданных Azure из контейнера Windows на Azure виртуальной машине, потому что контейнер на docker изолирован в другой сети от сети виртуальной машины и IMDS доступен только с немаршрутизируемого IP-адреса на уровне виртуальной машины.

Azure - это конечная точка REST, которая доступна на хорошо известном немаршрутизируемом IP-адресе. адрес (169.254.169.254), к нему можно получить доступ только из виртуальной машины. Связь между виртуальной машиной и IMDS никогда не покидает хост.

и

Конечная точка службы метаданных экземпляра доступна только из работающей виртуальной машины экземпляр на немаршрутизируемом IP-адресе. Кроме того, любой запрос с заголовком X-Forwarded-For отклоняется службой.

На следующей схеме описаны интегрированные контейнеры с существующей виртуальной машиной. Подробнее здесь .

enter image description here

When you generate a containerized application on the Azure VM, the container communicates with the outside of this container via a default docker virtualized nat NIC. For example, on the Azure VM, there is an extra IP address 172.22.48.1 used for docker instances connecting with guest OS in the network 172.18.4.0/24.

enter image description here

Edit

From Известные проблемы и часто задаваемые вопросы ,

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

Когда вы вызываете метаданные из вашего контейнера на Azure виртуальной машине, на самом деле используется NAT ni c (у него другой MA C адрес от первичного ni c) вместо первичного ni c.

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