首页 > 解决方案 > Azure Functions Core Tools 无法连接到专用终结点

问题描述

我正在使用 Azure 函数核心工具在 Azure VM (Ubuntu 18.04) 上运行一个 blob 触发的函数。
我想要做的是在不使用服务端点的情况下获取 blob 的信息。

在我的 VNet 中,我有:

当我在我的子网上启用服务端点Microsoft.Storage时,VM1 可以运行 blob 触发的函数,可以被 VM2 戳,并获取 blob 的信息(在 curl 中提供)。

但是,一旦我删除了服务端点,VM1 就无法运行该功能并出现以下错误,显然无法连接到存储:

发生了未处理的异常。主机正在关闭。
Microsoft.WindowsAzure.Storage:此请求无权执行此操作。
发生了未处理的异常。主机正在关闭。
Microsoft.WindowsAzure.Storage:操作已取消。System.Private.CoreLib:操作已取消。

从 VM1 和 VM2 到存储的私有 IP 的名称解析自然没问题,因为它们位于同一子网中。

有什么办法可以解决这个问题,比如向我的路由表添加路由?
先感谢您。

编辑 #1
其他不使用私有端点的函数,如 HTTP 触发的函数不受影响并且是可调用的。
我猜 Core Tools 运行时不支持 Private Link,因为如果我希望 Azure Functions 上的函数(而不是本地计算机上的 Core Tools)连接到专用终结点,则需要使用 Premium 计划或 App Service Plan。

标签: azureazure-functionsazure-virtual-networkazure-functions-core-tools

解决方案


在这种情况下,当您Microsoft.Storage为子网启用服务点时,Azure 将在该子网的路由表中添加一条到存储服务的公共 IP 地址的路由。Azure 服务端点通过 Microsoft 的骨干网络基础设施提供与 Azure 服务的直接连接。使用服务终结点不会从 Azure 存储帐户中删除公共终结点——它只是流量的重定向。

为 Blob 存储启用专用终结点时,只能通过虚拟网络访问 Blob 资源。blob 触发的函数将使用特定于资源的私有 IP 地址与指定资源进行通信。如果您已删除子网的服务端点,则没有通过 next-hop 到存储资源的公共 IP 的默认路由virtual network service endpoint。Azure 服务的出站流量默认通过 Internet。因此,其他不使用私有端点的函数,如 HTTP 触发的函数不受影响并且是可调用的。

总之,Azure VM 上的 Azure Functions Core Tools 似乎不可能在不使用服务终结点的情况下连接到专用终结点以进行 Blob 存储。

希望这是有道理的,有关更多信息,您可以阅读以下博客:

  1. Azure 服务终结点 - 它们如何工作?
  2. Azure 服务终结点与 Azure 专用链接

推荐阅读