在 Azure HDInsight 中创建群集失败并出现 InvalidNetworkConfigurationErrorCode

本文介绍在与 Azure HDInsight 群集交互时出现的问题的故障排除步骤和可能的解决方法。

如果看到错误代码 InvalidNetworkConfigurationErrorCode 和说明“虚拟网络配置与 HDInsight 要求不兼容”,这往往表示群集的虚拟网络配置有问题。 请根据错误说明中的余下内容,按照以下部分所述解决问题。

“主机名解析失败”

问题

错误说明中包含“主机名解析失败”。

原因

此错误与某个自定义 DNS 配置问题相关。 虚拟网络中的 DNS 服务器可以将 DNS 查询转发到 Azure 的递归解析程序,以便解析该虚拟网络中的主机名(有关详细信息,请参阅虚拟网络中的名称解析)。 可以通过虚拟 IP 168.63.129.16 访问 Azure 的递归解析程序。 只能从 Azure VM 访问此 IP。 如果使用本地 DNS 服务器,或者 DNS 服务器是不属于群集虚拟网络的 Azure VM,则这不起作用。

解决

  1. 通过 SSH 连接到属于群集的 VM,并运行命令 hostname -f。 此命令会返回主机完全限定的域名(在以下说明中称为 <host_fqdn>)。

  2. 然后运行命令 nslookup <host_fqdn>(例如 nslookup hn*.5h6lujo4xvoe1kprq3azvzmwsd.hx.internal.chinacloudapp.cn)。 如果此命令将名称解析为 IP 地址,则表示 DNS 服务器工作正常。 在这种情况下,请提交有关 HDInsight 的支持案例,我们将调查你的问题。 请在支持案例中包含执行的故障排除步骤。 它可帮助更快地解决问题。

  3. 如果以上命令未返回 IP 地址,请运行 nslookup <host_fqdn> 168.63.129.16(例如 nslookup hn*.5h6lujo4xvoe1kprq3azvzmwsd.hx.internal.chinacloudapp.cn 168.63.129.16)。 如果此命令能够解析 IP,则表示 DNS 服务器未将查询转发到 Azure 的 DNS,或者它不是与群集处于同一虚拟网络中的 VM。

  4. 如果你没有任何可充当群集虚拟网络中的自定义 DNS 服务器的 Azure VM,则需要先添加此 VM。 在虚拟网络中创建一个配置为 DNS 转发器的 VM。

  5. 在虚拟网络中部署 VM 后,在此 VM 上配置 DNS 转发规则。 将所有 iDNS 名称解析请求转发到 168.63.129.16,将剩余的请求转发到 DNS 服务器。 此处提供了一个示例来演示如何为自定义 DNS 服务器完成此设置。

  6. 添加此 VM 的 IP 地址作为虚拟网络 DNS 配置的第一个 DNS 条目。


“无法连接到 Azure 存储帐户”

问题

错误说明中包含“无法连接到 Azure 存储帐户”或“无法连接到 Azure SQL”。

原因

Azure 存储和 SQL 没有固定的 IP 地址,因此,我们需要允许与所有 IP 建立出站连接,以允许访问这些服务。 确切的解决步骤取决于设置的是网络安全组 (NSG) 还是用户定义的规则 (UDR)。 有关这些配置的详细信息,请参阅有关使用网络安全组和用户定义的路由控制 HDInsight 网络流量的部分。

解决方法

  • 如果群集使用网络安全组 (NSG)

    转到 Azure 门户,并找到与其中部署了群集的子网关联的 NSG。 在“出站安全规则”部分,允许不受限制地对 Internet 进行出站访问(请注意,此处的优先级编号越小,表示优先级越高)。 另外,在“子网”部分确认此 NSG 是否已应用到群集子网。

  • 如果群集使用用户定义的路由 (UDR)

    转到 Azure 门户,并找到与其中部署了群集的子网关联的路由表。 找到子网的路由表后,检查其中的 routes 节。

    如果定义了路由,请确保部署了群集的区域的 IP 地址存在路由,并且每个路由的 NextHopTypeInternet。 应该为上述文章中所述的每个所需 IP 地址定义一个路由。

“无法建立来自群集的出站连接以与 HDInsight 资源提供程序进行通信。 请确保允许出站连接。”

问题

错误说明包含“无法建立来自群集的出站连接以与 HDInsight 资源提供程序进行通信。 请确保允许出站连接。”

原因

使用专用链接的 HDInsight 群集时,必须将群集的出站访问权限配置为允许与 HDInsight 资源提供程序建立连接。

解决方法

  • 若要解决此问题,请参阅专用链接设置中的 HDInsight 专用链接设置步骤

“虚拟网络配置不符合 HDInsight 要求”

问题

错误说明中包含如下所示的消息:

ErrorCode: InvalidNetworkConfigurationErrorCode
ErrorDescription: Virtual Network configuration is not compatible with HDInsight Requirement. Error: 'Failed to connect to Azure Storage Account; Failed to connect to Azure SQL; HostName Resolution failed', Please follow https://go.microsoft.com/fwlink/?linkid=853974 to fix it.

原因

自定义 DNS 设置可能有问题。

解决方法

验证 168.63.129.16 是否在自定义 DNS 链中。 虚拟网络中的 DNS 服务器可以将 DNS 查询转发到 Azure 的递归解析程序,以便解析该虚拟网络中的主机名。 有关详细信息,请参阅虚拟网络中的名称解析。 可以通过虚拟 IP 168.63.129.16 访问 Azure 的递归解析程序。

  1. 使用 ssh 命令连接到群集。 编辑以下命令(将 CLUSTERNAME 替换为群集的名称),然后输入该命令:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.cn
    
  2. 运行以下命令:

    cat /etc/resolv.conf | grep nameserver*
    

    应看到与下面类似的内容:

    nameserver 168.63.129.16
    nameserver 10.21.34.43
    nameserver 10.21.34.44
    

    根据结果选择执行以下步骤之一:

168.63.129.16 不在此列表中

选项 1
使用规划 Azure HDInsight 的虚拟网络中所述的步骤,将 168.63.129.16 添加为虚拟网络的第一个自定义 DNS。 仅当自定义 DNS 服务器在 Linux 上运行时,这些步骤才适用。

方法 2
为虚拟网络部署 DNS 服务器 VM。 它涉及以下步骤:

  • 在虚拟网络中创建一个配置为 DNS 转发器的 VM(可以是 Linux VM 或 Windows VM)。
  • 在此 VM 上配置 DNS 转发规则(将所有 iDNS 名称解析请求转发到 168.63.129.16,将剩余的请求转发到 DNS 服务器)。
  • 添加此 VM 的 IP 地址作为虚拟网络 DNS 配置的第一个 DNS 条目。

168.63.129.16 在列表中

在这种情况下,请创建有关 HDInsight 的支持案例,我们将调查你的问题。 在支持案例中包括以下命令的结果。 这可帮助快速调查和解决问题。

在头节点上的 SSH 会话中,编辑然后运行以下命令:

hostname -f
nslookup <headnode_fqdn> (e.g.nslookup hn*.5h6lujo4xvoe1kprq3azvzmwsd.hx.internal.chinacloudapp.cn)
dig @168.63.129.16 <headnode_fqdn> (e.g. dig @168.63.129.16 hn*.5h6lujo4xvoe1kprq3azvzmwsd.hx.internal.chinacloudapp.cn)

原因

InvalidNetworkConfigurationErrorCode 错误代码的另一个原因可能是在 PowerShell 或 Azure Runbook 中使用了已弃用的参数 EnableVmProtection

解决方法

使用 Get-AzVirtualNetwork 的有效参数,如 Az PowerShell SDK 中所述


后续步骤

如果你的问题未在本文中列出,或者无法解决问题,请访问以下渠道之一获取更多支持:

  • 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。 有关更多详细信息,请参阅如何创建 Azure 支持请求。 Microsoft Azure 订阅中带有对订阅管理和计费支持的访问权限,技术支持通过 Azure 支持计划之一提供。