如何解决无法从函数应用通过 http 连接到 Azure VM
我有一个函数应用试图与 Azure VM 通信。两者通过 VNET 集成在同一个 VNET 中。
函数应用对VM的请求是通过http的,VM没有公网IP。
网络安全组规则允许所有 VNET 入站/出站。但是当通过 http://[vm-private-ip]/testreq 或 http://[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 了解更多故障排除详情。
例如,我在云 shell 中运行以下 PowerShell 命令为 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)"}'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。