Назад | Перейти на главную страницу

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

Я установил виртуальную сеть с GW типа «точка-сеть» и двумя другими подсетями.

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

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

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

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

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

[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()

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

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

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

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

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