排查虚拟网络与Azure 应用服务的集成问题
本文介绍可用于排查与虚拟网络集成的Azure 应用服务中的连接问题的工具。
注意
App 服务 中的 Docker Compose 方案不支持虚拟网络集成。 如果存在专用终结点,则忽略访问限制策略。
验证虚拟网络集成
若要排查连接问题,必须首先验证虚拟网络集成配置是否正确,以及是否将专用 IP 分配给App 服务计划的所有实例。
为此,请使用以下方法之一:
在 Kudu 调试控制台中检查专用 IP
若要访问 Kudu 控制台,请在Azure 门户中选择应用服务,转到“开发工具”,选择“高级工具”,然后选择“转到”。 在 Kudu 服务页中,选择 “工具>调试控制台>CMD”。
还可以直接通过 URL [sitename].scm.azurewebsites.net/DebugConsole
转到 Kudu 调试控制台。
在调试控制台中,运行以下命令之一:
基于 Windows OS 的应用
SET WEBSITE_PRIVATE_IP
如果已成功分配专用 IP,你将获得以下输出:
WEBSITE_PRIVATE_IP=<IP address>
基于 Linux OS 的应用
set| egrep --color 'WEBSITE_PRIVATE_IP'
检查 Kudu 环境中的专用 IP
转到 的 Kudu 环境 [sitename].scm.azurewebsites.net/Env
并搜索 WEBSITE_PRIVATE_IP
。
成功配置虚拟网络集成后,可以继续执行连接测试。
排查 Windows 应用上的出站连接问题
在本机 Windows 应用中,由于安全约束, ping、 nslookup 和 tracert 工具在自定义 Windows 容器 () 中工作,因此无法使用控制台。
直接 [sitename].scm.azurewebsites.net/DebugConsole
转到 的 Kudu 控制台。
若要测试 DNS 功能,可以使用 nameresolver.exe。 语法是:
nameresolver.exe hostname [optional:DNS Server]
可以使用 nameresolver 检查应用依赖的主机名。 这样,可以测试 DNS 是否配置错误,或者是否无权访问 DNS 服务器。 可以通过查看环境变量WEBSITE_DNS_SERVER和WEBSITE_DNS_ALT_SERVER来查看应用在控制台中使用的 DNS 服务器。
注意
nameresolver.exe 工具目前在自定义 Windows 容器中不起作用。
若要测试与主机和端口组合的 TCP 连接,可以使用 tcpping。 语法为 。
tcpping.exe hostname [optional: port]
tcpping 实用工具会告知你是否可以访问特定的主机和端口。 仅当应用程序在主机和端口组合中侦听,并且有从应用到指定主机和端口的网络访问时,它才能显示成功。
排查 Linux 应用上的出站连接问题
直接转到 的 [sitename].scm.azurewebsites.net
Kudu。 在 Kudu 服务页中,选择 “工具>调试控制台>CMD”。
若要测试 DNS 功能,可以使用命令 nslookup。 语法是:
nslookup hostname [optional:DNS Server]
根据上述结果,如果 DNS 服务器上配置错误,可以检查。
注意
nameresolver.exe 工具目前在 Linux 应用中不起作用。
若要测试连接性,可以使用 Curl 命令。 语法是:
curl -v https://hostname
curl hostname:[port]
调试对虚拟网络托管资源的访问
许多因素可能会阻止应用访问特定的主机和端口。 大多数情况下,它是以下其中一种:
- 防火墙处于阻碍中。 如果有防火墙,则会达到 TCP 超时。 在这种情况下,TCP 超时为 21 秒。 使用 tcpping 工具测试连接性。 TCP 超时可能由防火墙之外的许多因素引起,但从那里开始。
- 无法访问 DNS。 每个 DNS 服务器的 DNS 超时为 3 秒。 如果有两个 DNS 服务器,则超时为 6 秒。 使用 nameresolver 查看 DNS 是否正常工作。 无法使用 nslookup,因为该 nslookup 不使用配置虚拟网络时使用的 DNS。 如果无法访问,则可能有防火墙或 NSG 阻止对 DNS 的访问,或者它可能已关闭。 某些使用自定义 DNS 服务器的 DNS 体系结构可能比较复杂,有时可能会遇到超时。 若要确定是否是这种情况,可以设置环境变量
WEBSITE_DNS_ATTEMPTS
。 有关应用服务中的 DNS 的详细信息,请参阅名称解析 (App 服务 中的 DNS) 。
如果这些项目不能解决你的问题,请首先查找以下内容:
区域虚拟网络集成
- 目标是否为非RFC1918地址,并且未启用 “全部路由 ”?
- 是否存在 NSG 阻止集成子网的出口?
- 如果要通过 Azure ExpressRoute 或 VPN,本地网关是否配置为将流量路由回 Azure? 如果可以访问虚拟网络中的终结点,但不能访问本地终结点,检查路由。
- 是否有足够的权限在集成子网上设置委派? 在区域虚拟网络集成配置期间,集成子网将委托给 Microsoft.Web/serverFarms。 VNet 集成 UI 自动将子网委托给 Microsoft.Web/serverFarms。 如果帐户没有足够的网络权限来设置委派,则需要可以在集成子网上设置属性的人员来委托子网。 若要手动委托集成子网,请转到 Azure 虚拟网络子网 UI,并为 Microsoft.Web/serverFarms 设置委派。
调试网络问题是一项挑战,因为你无法查看阻止对特定 host:port 组合的访问的原因。 一些原因包括:
- 主机上有一个防火墙,用于阻止从点到站点 IP 范围访问应用程序端口。 跨子网通常需要公共访问权限。
- 目标主机已关闭。
- 应用程序已关闭。
- 你的 IP 或主机名不正确。
- 应用程序正在侦听与预期不同的端口。 可以使用终结点主机上的“netstat -aon”将进程 ID 与侦听端口匹配。
- 网络安全组的配置方式是阻止从点到站点 IP 范围访问应用程序主机和端口。
你不知道你的应用实际使用的地址。 它可以是集成子网或点到站点地址范围中的任何地址,因此需要允许从整个地址范围进行访问。
更多调试步骤包括:
- 连接到虚拟网络中的 VM,并尝试从该处访问资源 host:port。 若要测试 TCP 访问,请使用 PowerShell 命令 Test-NetConnection。 语法是:
Test-NetConnection hostname [optional: -Port]
- 在 VM 上启动应用程序,并使用 tcpping 从控制台测试对该主机和端口的访问。
网络疑难解答
还可以使用网络疑难解答来排查App 服务中应用的连接问题。 若要打开网络疑难解答,请转到Azure 门户中的应用服务。 选择“ 诊断并解决问题”,然后搜索 “网络疑难解答”。
注意
连接问题方案尚不支持 Linux 或基于容器的应用。
连接问题 - 它将检查虚拟网络集成的状态,包括检查是否已将专用 IP 分配给App 服务计划的所有实例和 DNS 设置。 如果未配置自定义 DNS,将应用默认 Azure DNS。 还可以针对要测试连接的特定终结点运行测试。
配置问题 - 如果子网对虚拟网络集成有效,此疑难解答将检查。
子网/VNet 删除问题 - 如果子网有任何锁定,并且子网有任何可能阻止删除 VNet/子网的未使用服务关联链接,此疑难解答将检查。
收集网络跟踪
收集网络跟踪有助于分析问题。 在 Azure 应用 服务中,网络跟踪是从应用程序过程中获取的。 若要获取准确的信息,请在启动网络跟踪收集时重现问题。
注意
虚拟网络流量不会在网络跟踪中捕获。
Windows 应用服务
若要收集 Windows 应用服务的网络跟踪,请执行以下步骤:
- 在Azure 门户,导航到 Web 应用。
- 在左侧导航中,选择“ 诊断并解决问题”。
- 在搜索框中,键入 “收集网络跟踪 ”,然后选择“ 收集网络跟踪 ”以启动网络跟踪收集。
若要获取为 Web 应用提供服务的每个实例的跟踪文件,请在浏览器中转到 Web 应用的 Kudu 控制台 (https://<sitename>.scm.azurewebsites.net
) 。 从 C:\home\LogFiles\networktrace 或 D:\home\LogFiles\networktrace 文件夹下载跟踪文件。
Linux 应用服务
若要收集不使用自定义容器的 Linux 应用服务的网络跟踪,请执行以下步骤:
tcpdump
通过运行以下命令安装命令行实用工具:apt-get update apt install tcpdump
通过安全外壳协议 (SSH) 连接到容器。
通过运行以下命令来标识启动和运行的接口, (例如
eth0
) :root@<hostname>:/home# tcpdump -D 1.eth0 [Up, Running, Connected] 2.any (Pseudo-device that captures on all interfaces) [Up, Running] 3.lo [Up, Running, Loopback] 4.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless] 5.nflog (Linux netfilter log (NFLOG) interface) [none] 6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none] 7.dbus-system (D-Bus system bus) [none] 8.dbus-session (D-Bus session bus) [none]
运行以下命令启动网络跟踪收集:
root@<hostname>:/home# tcpdump -i eth0 -w networktrace.pcap
将 替换为
eth0
实际接口的名称。
若要下载跟踪文件,请通过 Kudu、FTP 或 Kudu API 请求等方法连接到 Web 应用。 下面是触发文件下载的请求示例:
https://<sitename>.scm.azurewebsites.net/api/vfs/<path to the trace file in the /home directory>/filename
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。