Azure Functions Core Tools 无法连接到专用端点
Azure Functions Core Tools can't connect to private endpoints
我正在使用 Azure Function Core Tools 运行在 Azure VM (Ubuntu 18.04) 上设置一个 blob 触发函数。
我想做的是在不使用服务端点的情况下获取 blob 的信息。
在我的 VNet 中我有:
VM1,运行是核心工具的一个功能
VM2 是一个 DNS 服务器,并使用如下 HTTP 请求访问 VM1;
- curl -X POST http://{VM1的私有IP}:7071/admin/functions/{我的blob函数}
-H“内容类型:application/json”-d“{'input':'myContainer/myFolder/myBlob'}”
具有专用终结点的 Blob 存储
当我在我的子网上启用服务端点 Microsoft.Storage 时,VM1 可以 运行 一个 blob 触发的函数,可以被 VM2 戳,并且获取 blob 的信息(在 curl 中提供)。
然而,一旦我删除了服务端点,VM1 就无法 运行 该功能并出现以下错误,显然无法连接到存储:
An unhandled exception has occurred. Host is shutting down.
Microsoft.WindowsAzure.Storage: This request is not authorized to perform this operation.
An unhandled exception has occurred. Host is shutting down.
Microsoft.WindowsAzure.Storage: The operation was canceled. System.Private.CoreLib: The operation was canceled.
从 VM1 和 VM2 到存储的私有 IP 的名称解析自然没问题,因为它们位于同一子网中。
有什么办法可以解决这个问题,比如在我的路线中添加一条路线table?
提前谢谢你。
编辑#1
其他不使用私有端点的函数(例如 HTTP 触发的函数)不受影响并且可以调用。
我猜想 Core Tools 运行time 不支持 Private Link,因为如果我想要 Azure Functions 上的一个函数(不是本地机器上的 Core Tools)连接到私有端点,则需要使用高级计划或应用服务计划。
在这种情况下,当您为子网启用服务点 Microsoft.Storage
时,Azure 会在 table 的路由中为存储服务添加一个指向 public 个 IP 地址的路由这个子网。 Azure 服务端点通过 Microsoft 的 backbone 网络基础设施提供与 Azure 服务的直接连接。使用服务端点不会从 Azure 存储帐户中删除 public 端点——它只是流量的重定向。
为 blob 存储启用专用终结点时,只能通过虚拟网络访问 blob 资源。 blob 触发的函数将使用特定于资源的私有 IP 地址与指定资源通信。如果您删除了子网的服务端点,则没有通过下一跳 virtual network service endpoint
到存储资源的 public IP 的默认路由。默认情况下,Azure 服务的出站流量通过 Internet。因此,其他不使用私有端点的函数(例如 HTTP 触发的函数)不受影响并且可以调用。
总而言之,Azure VM 上的 Azure Functions Core Tools 似乎不可能在不使用服务端点的情况下连接到 blob 存储的专用端点。
希望这是有道理的,如需了解更多信息,您可以阅读这些博客:
我正在使用 Azure Function Core Tools 运行在 Azure VM (Ubuntu 18.04) 上设置一个 blob 触发函数。
我想做的是在不使用服务端点的情况下获取 blob 的信息。
在我的 VNet 中我有:
VM1,运行是核心工具的一个功能
VM2 是一个 DNS 服务器,并使用如下 HTTP 请求访问 VM1;
- curl -X POST http://{VM1的私有IP}:7071/admin/functions/{我的blob函数}
-H“内容类型:application/json”-d“{'input':'myContainer/myFolder/myBlob'}”
- curl -X POST http://{VM1的私有IP}:7071/admin/functions/{我的blob函数}
具有专用终结点的 Blob 存储
当我在我的子网上启用服务端点 Microsoft.Storage 时,VM1 可以 运行 一个 blob 触发的函数,可以被 VM2 戳,并且获取 blob 的信息(在 curl 中提供)。
然而,一旦我删除了服务端点,VM1 就无法 运行 该功能并出现以下错误,显然无法连接到存储:
An unhandled exception has occurred. Host is shutting down.
Microsoft.WindowsAzure.Storage: This request is not authorized to perform this operation.
An unhandled exception has occurred. Host is shutting down.
Microsoft.WindowsAzure.Storage: The operation was canceled. System.Private.CoreLib: The operation was canceled.
从 VM1 和 VM2 到存储的私有 IP 的名称解析自然没问题,因为它们位于同一子网中。
有什么办法可以解决这个问题,比如在我的路线中添加一条路线table?
提前谢谢你。
编辑#1
其他不使用私有端点的函数(例如 HTTP 触发的函数)不受影响并且可以调用。
我猜想 Core Tools 运行time 不支持 Private Link,因为如果我想要 Azure Functions 上的一个函数(不是本地机器上的 Core Tools)连接到私有端点,则需要使用高级计划或应用服务计划。
在这种情况下,当您为子网启用服务点 Microsoft.Storage
时,Azure 会在 table 的路由中为存储服务添加一个指向 public 个 IP 地址的路由这个子网。 Azure 服务端点通过 Microsoft 的 backbone 网络基础设施提供与 Azure 服务的直接连接。使用服务端点不会从 Azure 存储帐户中删除 public 端点——它只是流量的重定向。
为 blob 存储启用专用终结点时,只能通过虚拟网络访问 blob 资源。 blob 触发的函数将使用特定于资源的私有 IP 地址与指定资源通信。如果您删除了子网的服务端点,则没有通过下一跳 virtual network service endpoint
到存储资源的 public IP 的默认路由。默认情况下,Azure 服务的出站流量通过 Internet。因此,其他不使用私有端点的函数(例如 HTTP 触发的函数)不受影响并且可以调用。
总而言之,Azure VM 上的 Azure Functions Core Tools 似乎不可能在不使用服务端点的情况下连接到 blob 存储的专用端点。
希望这是有道理的,如需了解更多信息,您可以阅读这些博客: