已经有关于此问题的一些答案,您可以看到here和here。
简而言之,如果function
和storage account
位于同一区域,则它们将以内部方式进行通信,而无需通过outboundIpAddresses
。
解决方法是在不同区域创建它们。
,
万一其他人正在寻找这个...我有一个类似的问题。我有一个函数应用程序,我创建了一个私有终结点和区域 VNet 集成,该 VNet 与存储帐户交互,该存储帐户也有一个具有相同 VNet 的私有终结点。存储帐户的网络/防火墙设置仅允许来自 VNet 的连接(不允许外部流量)。存储帐户和函数应用位于同一区域。
尝试修复 #1(不理想):
我添加了 code 来确定函数应用从哪个 IP 运行。这导致我在功能应用 --> 属性 --> // This closure will return the full directory path of folder where your classes are built
ext.moduleClassPath = { moduleName ->
def classOutputDirConst = "/classes/java/main"
return "${project(":${moduleName}").buildDir}${classOutputDirConst}"
}
// Now jar task will include only the built file of specified project
jar {
from(moduleClassPath("projectName1"),moduleClassPath("projectName2"))
}
下的门户中添加所有 IP。如果使用它,则 Terraform 会暴露它。
尝试修复 #2(更好):
解决方法是确保您设置了正确的功能应用设置。
见:Microsoft documentation
设置 |
建议值 |
说明 |
WEBSITE_CONTENTOVERVNET |
1 |
创建此应用设置。当您的存储帐户仅限于虚拟网络时,值为 1 可让您的函数应用进行扩展。 |
WEBSITE_DNS_SERVER |
168.63.129.16 |
创建此应用设置。当您的应用程序与虚拟网络集成时,它将使用与虚拟网络相同的 DNS 服务器。你的函数应用需要此设置,以便它可以与 Azure DNS 专用区域一起使用。当您使用私有端点时,它是必需的。此设置和 WEBSITE_VNET_ROUTE_ALL 会将来自您的应用的所有出站调用发送到您的虚拟网络。 |
WEBSITE_VNET_ROUTE_ALL |
1 |
创建此应用设置。当您的应用程序与虚拟网络集成时,它使用与虚拟网络相同的 DNS 服务器。你的函数应用需要此设置,以便它可以与 Azure DNS 专用区域一起使用。当您使用私有端点时,它是必需的。此设置和 WEBSITE_DNS_SERVER 会将来自您的应用的所有出站调用发送到您的虚拟网络。 |
注意:Additional Outbound IP Addresses
是 Azure DNS 的静态值。
完成所有这些设置后,我的函数应用能够按预期通过 VNet 连接到存储帐户。
本文链接:https://www.f2er.com/2724603.html