排查 OutboundConnFailVMExtensionError 错误代码 (50)

本文介绍如何识别和解决OutboundConnFailVMExtensionError错误 (也称为错误代码 ERR_OUTBOUND_CONN_FAIL、错误号 50) ,在尝试启动或部署 Microsoft Azure Kubernetes 服务 (AKS) 群集时可能发生。

先决条件

  • Netcat (nc) 命令行工具

  • dig 命令行工具

  • 客户端 URL (cURL) 工具

症状

尝试启动或创建 AKS 群集时,会收到以下错误消息:

无法从代理建立出站连接,有关详细信息,请参阅 https://aka.ms/aks-required-ports-and-addresses

详细信息:Code=“VMExtensionProvisioningError”

Message=“VM 在处理扩展'vmssCSE'时报告失败。

错误消息:“启用失败:无法执行命令:命令终止,退出状态=50\n[stdout]\n\n[stderr]\nnc: 连接到 mcr.microsoft.com 端口 443 (tcp) 失败:连接超时\n命令退出,状态为非零

错误详细信息: “vmssCSE 错误消息: {vmssCSE exit status=50, output=pt/apt.conf.d/95proxy...}

原因

下载用于预配节点的必要组件的自定义脚本扩展无法建立获取包所需的出站连接。 对于公共群集,节点尝试与 Microsoft 容器注册表 (MCR) 终结点通信, mcr.microsoft.com (端口 443 上的) 。

可能会阻止流量的原因有很多。 在上述任何情况下,测试连接性的最佳方法是使用安全外壳协议 (SSH) 连接到节点。 若要建立连接,请按照连接到 Azure Kubernetes 服务 (AKS) 群集节点中的说明进行维护或故障排除。 然后,按照以下步骤测试群集上的连接性:

  1. 连接到节点后,运行 ncdig 命令:

    nc -vz mcr.microsoft.com 443 
    dig mcr.microsoft.com 443
    

    注意

    如果无法通过 SSH 访问节点,可以通过对虚拟机规模集实例运行 az vmss run-command invoke 命令来测试出站连接:

    # Get the VMSS instance IDs.
    az vmss list-instances --resource-group <mc-resource-group-name> \
        --name <vmss-name> \
        --output table
    
    # Use an instance ID to test outbound connectivity.
    az vmss run-command invoke --resource-group <mc-resource-group-name> \
        --name <vmss-name> \
        --command-id RunShellScript \
        --instance-id <vmss-instance-id> \
        --output json \
        --scripts "nc -vz mcr.microsoft.com 443"
    
  2. 如果尝试使用 HTTP 代理创建 AKS 群集,请在连接到节点后运行 nccurldig 命令:

    # Test connectivity to the HTTP proxy server from the AKS node.
    nc -vz <http-s-proxy-address> <port>
    
    # Test traffic from the HTTP proxy server to HTTPS.
    curl --proxy http://<http-proxy-address>:<port>/ --head https://mcr.microsoft.com
    
    # Test traffic from the HTTPS proxy server to HTTPS.
    curl --proxy https://<https-proxy-address>:<port>/ --head https://mcr.microsoft.com
    
    # Test DNS functionality.
    dig mcr.microsoft.com 443
    

    注意

    如果无法通过 SSH 访问节点,可以通过对虚拟机规模集实例运行 az vmss run-command invoke 命令来测试出站连接:

    # Get the VMSS instance IDs.
    az vmss list-instances --resource-group <mc-resource-group-name> \
        --name <vmss-name> \
        --output table
    
    # Use an instance ID to test connectivity from the HTTP proxy server to HTTPS.
    az vmss run-command invoke --resource-group <mc-resource-group-name> \
        --name <vmss-name> \
        --command-id RunShellScript \
        --instance-id <vmss-instance-id> \
        --output json \
        --scripts "curl --proxy http://<http-proxy-address>:<port>/ --head https://mcr.microsoft.com"
    
    # Use an instance ID to test connectivity from the HTTPS proxy server to HTTPS.
    az vmss run-command invoke --resource-group <mc-resource-group-name> \
        --name <vmss-name> \
        --command-id RunShellScript \
        --instance-id <vmss-instance-id> \
        --output json \
        --scripts "curl --proxy https://<https-proxy-address>:<port>/ --head https://mcr.microsoft.com"
    
    # Use an instance ID to test DNS functionality.
    az vmss run-command invoke --resource-group <mc-resource-group-name> \
        --name <vmss-name> \
        --command-id RunShellScript \
        --instance-id <vmss-instance-id> \
        --output json \
        --scripts "dig mcr.microsoft.com 443"
    

解决方案

下表列出了可能阻止流量的具体原因,以及每种原因的相应解决方案。

问题 解决方案
流量被防火墙规则或代理服务器阻止 在此方案中,防火墙或代理服务器执行出口筛选。 若要验证是否允许所有必需的域和端口,请参阅控制 Azure Kubernetes 服务 (AKS 中群集节点的出口流量)
群集网络安全组 (NSG) 阻止流量 在附加到群集的任何 NSG 上,验证端口 443、端口 53 或可能必须用于连接到终结点的任何其他端口是否没有阻塞。 有关详细信息,请参阅控制 Azure Kubernetes 服务 (AKS) 中的群集节点的出口流量
防火墙上阻止了 AAAA (IPv6) 记录 在防火墙上,验证是否存在阻止终结点在 Azure DNS 中解析的内容。
专用群集无法解析内部 Azure 资源 在专用群集中,如果使用自定义 DNS,则必须将 Azure DNS IP 地址 (168.63.129.16) 添加为上游 DNS 服务器。 验证地址是否已在 DNS 服务器上设置。 有关详细信息,请参阅 创建专用 AKS 群集什么是 IP 地址 168.63.129.16?

更多信息

第三方联系人免责声明

Microsoft 提供第三方联系信息,帮助你查找有关本主题的其他信息。 该联系信息如有更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。