2014-09-24 2 views
1

У меня есть роль лазурного рабочего, у которой есть маршрут/janitor. Этот маршрут показывает счетчики и журналы для этого экземпляра. Когда у меня эта роль имеет два или более экземпляра, я не могу контролировать, к какому экземпляру я обращаюсь. Мой вопрос: как я могу надежно получить доступ к определенному экземпляру роли из общедоступного ip?HTTP-запросы к конкретному экземпляру Azure

Я знаю Instance Level Public Ip. Это не то, что я хочу, потому что для этого требуется дополнительная настройка.

Что я хочу сделать, это похоже на то, что делает клиент Remote Desktop (mstsc.exe). Я открыл одно подключение к удаленному рабочему столу для каждого из отдельных экземпляров. Я заметил, что они оба имеют доступ к одному и тому же публичному IP и порту моей рабочей роли, но каким-то образом mstsc.exe удается получить два отдельных экрана, по одному для каждого экземпляра. mstsc.exe представляет собой мультиплексирование двух экранов сервера на уровне TCP. Это фантазия, я не хочу идти так далеко.

Все, что я хочу, - это отправлять HTTP-запросы каждому отдельному экземпляру. Есть ли способ сделать это? Например. HTTP-заголовок, такой как X-Azure-Instance-Id = ???.

+0

разделите маршрут с идентификатором экземпляра и создайте отдельную роль Работника для другого экземпляра. 1 роль сотрудника на экземпляр. –

+0

то, что на самом деле делает экземпляр, это принять ваше приложение и поместить его в другую виртуальную машину за балансировщиком нагрузки. поэтому у вас нет контроля над тем, какой запрос экземпляра перенаправляется на –

+0

Да, я знаю, что каждый экземпляр представляет собой отдельную виртуальную машину. Как мне выполнить разделение маршрута? – Gatis

ответ

1

Способ RDP заключается в использовании RemoteForwarderAgent.exe и RemoteAccessAgent.exe для каждого экземпляра. Файл RDP, который mstsc.exe использует для подключения, вставляет куки-файл, который идентифицирует экземпляр для подключения. Когда вы инициируете соединение RDP, соединение будет проходить случайным образом (через балансировщик нагрузки) в любой экземпляр и будет подключаться к RemoteForwarderAgent.exe. RemoteForwarderAgent будет читать cookie, а затем внутренне выполнить соединение через RemoteAccessAgent, используя InternalEndpoint, в экземпляр, указанный в файле cookie. Вы можете настроить что-то подобное для своего маршрута, но я подозреваю, что это больше, чем вам нужно.

Самый простой вариант - использовать InstanceInputEndpoint - http://msdn.microsoft.com/en-us/library/azure/hh180158.aspx. Это позволит вам достичь каждого экземпляра на уникальном порту, поэтому для запроса маршрута/janitor на конкретном экземпляре вы сделаете запрос к http://myservice.cloudapp.net/janitor:81 (где «81» - это порт InstanceInputEndpoint для конкретного экземпляра, к которому вы хотите подключиться) , Это требует немного дополнительной настройки (дополнительная строка в вашем .csdef и некоторая логика для клиента, чтобы определить номер порта), но не так много, как открытый IP-адрес уровня экземпляра.

+0

Проблема с подходом «InstanceInputEndpoint» заключается в том, что доступные номера портов очень высоки (я считаю, 10000+) и часто запрещены брандмауэрами, прокси-серверами и т. П. Мы изменили нашу архитектуру, потому что у многих клиентов были проблемы с подключением. – enzi

Смежные вопросы