无法通过 http 从函数应用程序连接到 Azure VM

Cannot connect via http to Azure VM from function app

我有一个函数应用试图与 Azure VM 通信。两者通过 VNET 集成在同一个 VNET 中。

函数应用通过http请求VM,VM没有public IP

网络安全组规则允许所有 VNET inbound/outbound。但是当通过 http://[vm-private-ip]/testreqhttp://[vm-name]/testreq 请求时,请求不会通过。抛出的错误是“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应。”使用 IP 时,和“没有这样的主机是已知的”当使用虚拟机名称时。函数应用程序正在使用超时值为 10 分钟的 WebClient,并且很快就会抛出错误,因此这不是超时问题。

这可能更多地与网络有关,但任何人都可以推荐在 VM 上检查其他什么或以其他方式使它正常工作吗?

首先,您需要确保您的函数应用在部署到 Azure 函数时可以在您的 Azure VM 中正常运行。您可以在 Azure VM 上本地部署您的函数来验证这一点。

然后,验证从 Azure 函数到 Azure VM 的连接。通过 integrating Functions with an Azure virtual network,你的函数应用已连接到 Internet 和你的虚拟网络。您可以参考该教程中的步骤。

之后,您可以使用 Tcpping 工具从您的 Azure 函数应用程序---控制台测试与主机和端口组合的 TCP 连接。如果 Tcpping 失败,则存在 TCP 连接问题,请阅读 this 了解更多故障排除详细信息。

例如,我运行云中的以下PowerShell命令shell为Azure VM启用IIS,然后Azure VM将接受端口80的HTTP请求。然后我使用tcpping <vm's private IP address> :80 验证从 Azure 函数到 Azure VM 的连接。

Set-AzVMExtension -ResourceGroupName "rgname" `
    -ExtensionName "IIS" `
    -VMName "vmname" `
    -Location "EastUS" `
    -Publisher Microsoft.Compute `
    -ExtensionType CustomScriptExtension `
    -TypeHandlerVersion 1.8 `
    -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\inetpub\wwwroot\Default.htm\" -Value $($env:computername)"}'