![Azure - 通过 vnet 从应用服务连接到 Blob 存储](https://linux22.com/image/720879/Azure%20-%20%E9%80%9A%E8%BF%87%20vnet%20%E4%BB%8E%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E8%BF%9E%E6%8E%A5%E5%88%B0%20Blob%20%E5%AD%98%E5%82%A8.png)
我已经建立了一个具有点到站点网关和另外两个子网的 VNET。
- 互联星空
- StorageSubnet(带有存储的服务终结点)StorageSubnet (with service endpoint to storage)
- GWSubnet(带有到存储的服务端点)
- 无存储
我已将 Web 应用连接到 VNET,但在尝试列出 Blob [1] 时出现异常。如果我将存储帐户公开,则一切都会按预期运行。
为了找出失败的原因,我分别在 StorageSubnet 和 noStorage 上设置了两个小型虚拟机。正如预期的那样,一个虚拟机可以使用 Azure CLI 列出 blob,而另一个虚拟机失败。这样,我还能够查看服务端点出现的有效路由。
有没有办法查看应用服务实例上的有效路由?(我的网络应用程序)
应用服务(我的 Web 应用)连接到 VNET 而不是子网,我是不是遗漏了什么,需要手动路由吗?我希望它能像我的 VM 测试一样进行路由。
有没有办法让我在应用服务上运行 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()
答案1
这是一个老问题。
对于 Azure Web 应用服务 VNET 集成,它允许您的 Web 应用访问虚拟网络中的资源,但不会授予从虚拟网络对 Web 应用的私有访问权限。私有站点访问是指使您的应用只能从私有网络(例如 Azure 虚拟网络内)访问。私有站点访问仅适用于配置了内部负载均衡器 (ILB) 的 ASE。有关使用 ILB ASE 的详细信息,请从此处的文章开始: 创建和使用 ILB ASE。
这意味着通过 VNET 集成,您的 Web 应用程序可以从外部连接 VNET,但 Web 应用程序不在 VNET 内部。
因此,存储帐户的防火墙仅允许来自 VNET 的流量,而不能允许 VNET 之外的流量。
对于您的场景,一种方法是使用 ILB ASE。它可以将您的 Web 应用变成 VNET。