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

Posted

技术标签:

【中文标题】无法从函数应用通过 http 连接到 Azure VM【英文标题】:Cannot connect via http to Azure VM from function app 【发布时间】:2021-05-04 08:23:55 【问题描述】:

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

函数应用对VM的请求是通过http,VM没有公网IP。

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

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

【问题讨论】:

【参考方案1】:

首先,您需要确保在将函数应用部署到 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)"'

【讨论】:

很长一段时间以来我在 SO 上看到的最有用的答案之一,谢谢!在虚拟机上设置 Web 服务器功能肯定是需要的,因为 tcpping 之后开始工作。现在我的挑战是您在上面使用 Set-AzVMExtension 显示的内容,并让它在 DevOps 任务中工作:) 再次感谢您提供的最有用的答案。 如果其他人碰巧遇到类似问题,我选择不使用 DevOps,而是在 ARM 模板中添加了 CustomScriptExtension。

以上是关于无法从函数应用通过 http 连接到 Azure VM的主要内容,如果未能解决你的问题,请参考以下文章

由于证书不受信任,无法从 Azure SF 连接到外部 https

无法通过 odbc 连接到 Microsoft Azure 数据库

无法使用 PHP 和 Codeigniter 从 PHP Azure 连接到 SQL Server Azure

从 Azure Sql 迁移到 Azure Synapse,无法连接到 Airflow 中的 Synapse

无法使用 JDBC 连接通过 SSH 隧道连接到 Azure DB

如何通过 Azure 虚拟网络从 power bi 桌面应用程序连接到 cosmos db