Azure - подключение к хранилищу BLOB-объектов из службы приложений через vnet

Я настроил VNET с GW "точка-сайт" и двумя другими подсетями.

  • VNET
    • StorageSubnet (с конечной точкой службы в хранилище)
    • GWSubnet (с конечной точкой службы в хранилище)
    • noStorage

Я подключил свое веб-приложение к VNET, но я получаю исключение при попытке перечисления больших двоичных объектов [1]. Если я сделаю учетную запись общедоступной, все будет работать, как положено.

Чтобы выяснить, где это происходит, я настроил две маленькие виртуальные машины на StorageSubnet и noStorage соответственно. Как и ожидалось, один из них работает с BLOB-объектами Azure, а другой - нет. Таким образом, я также смог просматривать эффективные маршруты, где появляется конечная точка службы.

Есть ли способ просмотреть эффективные маршруты на экземпляре служб приложения? (мое веб-приложение)

Служба приложений (мое веб-приложение) подключается к VNET, а не к подсети. Есть что-то, чего мне не хватает, нужна какая-то ручная маршрутизация? Я ожидаю, что это будет направлено так же, как мой тест VM.

Можно ли запустить интерфейс командной строки Azure в службе приложений или выполнить еще один следующий шаг в отладке?

[1]

Microsoft.WindowsAzure.Storage.StorageException
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.    <ExecuteAsyncInternal>d__4`1.MoveNext()
--- End of stack trace from previous location where exception was thrown     ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.   <ListBlobsSegmentedAsync>d__61.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

1 ответ

Это старая проблема.

В случае интеграции службы VNET службы Azure Web App она предоставляет вашему веб-приложению доступ к ресурсам вашей виртуальной сети, но не предоставляет частный доступ к вашему веб-приложению из виртуальной сети. Доступ к частному сайту означает, что ваше приложение доступно только из частной сети, например из виртуальной сети Azure. Доступ к частному сайту возможен только с ASE, настроенным с помощью внутреннего балансировщика нагрузки (ILB). Для получения подробной информации об использовании ILB ASE начните со статьи здесь: Создание и использование ILB ASE.

Это означает, что с интеграцией VNET ваше веб-приложение может подключаться к VNET извне, но веб-приложение не находится внутри VNET.

Таким образом, брандмауэр для учетной записи хранения просто разрешает трафик из VNET, не может разрешать трафик за пределами VNET.

Для вашего сценария один метод использует ILB ASE. Это может превратить ваше веб-приложение в VNET.

Другие вопросы по тегам