你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 应用服务混合连接

混合连接既是 Azure 中的一个服务,也是 Azure 应用服务中的一项功能。 作为服务,它的用途和功能超越了应用服务中使用的功能。 若要详细了解混合连接及其在应用服务外部的用途,请参阅 Azure 中继混合连接

在应用服务中,混合连接可用于访问任何网络中的应用程序资源,这些网络可以通过端口 443 对 Azure 进行出站调用。 混合连接提供从应用到 TCP 终结点的访问权限,而不会启用新的访问应用的方式。 在应用服务中使用时,每个混合连接与单个 TCP 主机和端口组合相关联。 此功能使应用能够访问任何 OS 上的资源,前提是它是 TCP 终结点。 混合连接功能不知道、也不关心应用程序协议或者要访问的内容是什么。 它只提供网络访问。

工作原理

混合连接要求部署中继代理,该代理可以访问所需的终结点和 Azure。 中继代理混合连接管理器 (HCM) 通过端口 443 调用 Azure 中继。 在 Web 应用站点上,应用服务基础结构还代表应用程序连接到 Azure 中继。 通过已联接的连接,应用可以访问所需的终结点。 连接使用 TLS 1.2 来确保安全,使用共享访问签名 (SAS) 密钥进行身份验证和授权。

Diagram of Hybrid Connection high-level flow.

当应用发出与配置的混合连接终结点匹配的 DNS 请求时,出站 TCP 流量将通过混合连接重定向。

注意

这意味着,始终应该尽量为混合连接使用 DNS 名称。 如果终结点使用 IP 地址,某些客户端软件不会执行 DNS 查找。

应用服务混合连接的优势

混合连接功能有许多好处,包括:

  • 应用可以访问本地系统和服务。
  • 该功能不需要可访问 Internet 的终结点。
  • 设置过程快速而轻松。 无需网关。
  • 每个混合连接与单个“主机:端口”组合匹配,这非常有利于安全性。
  • 通常不需要在防火墙中开放端口。 连接全部是通过标准 Web 端口建立的。
  • 由于该功能在网络级别运行,它并不知道应用使用的语言以及终结点使用的技术。
  • 可以通过单个应用使用它在多个网络中提供访问。
  • 适用于 Windows 应用和 Linux 应用的正式版支持。 Windows 自定义容器应用不支持该功能。

混合连接无法执行的操作

混合连接无法执行的操作包括:

  • 装载驱动器。
  • 使用 UDP。
  • 访问使用动态端口(例如 FTP 被动模式或扩展被动模式)的基于 TCP 的服务。
  • 支持 LDAP,因为它可能需要 UDP。
  • 支持 Active Directory,因为无法加入App 服务辅助角色。

在应用中添加和创建混合连接

若要创建混合连接,请转到 Azure 门户,并选择应用。 选择“网络”>“配置混合连接终结点”。 在此处,可以看到为应用配置的混合连接。

Screenshot of Hybrid Connection list.

若要添加新的混合连接,请选择“[+] 添加混合连接”。 会看到已创建的混合连接列表。 要将其中的一个或多个混合连接添加到应用,请选择所需的混合连接,然后选择“添加选定的混合连接”。

Screenshot of Hybrid Connection portal.

如果想要创建新的混合连接,请选择“创建新的混合连接”。 指定:

  • 混合连接名称。
  • 终结点主机名。
  • 终结点端口。
  • 要使用的服务总线命名空间。

Screenshot of Create new hybrid connection dialog box.

每个混合连接已绑定到服务总线命名空间,每个服务总线命名空间在 Azure 区域中。 请尽量使用应用所在的同一区域中的服务总线命名空间,这一点非常重要,目的是避免网络造成的延迟。

如果想要从应用中删除混合连接,请右键单击该混合连接,并选择“断开连接”。

将混合连接添加到应用后,选择该混合连接即可查看其详细信息。

Screenshot of Hybrid connections details.

在 Azure 中继门户中创建混合连接

除了使用应用内部的门户体验以外,还可以在 Azure 中继门户中创建混合连接。 要使混合连接可供应用服务使用,必须:

  • 要求客户端授权。
  • 具有元数据项和命名终结点,其中包含作为值的 host:port 组合。

混合连接和应用服务计划

应用服务混合连接只能在“基本”、“标准”、“高级”和“隔离”定价 SKU 中使用。 消耗计划中的函数应用无法使用混合连接。 定价计划没有相关的限制。

定价计划 在计划中可以使用的混合连接数
基本 每个计划 5 个
标准 每个计划 25 个
高级 (v1-v3) 每个应用 220 个
独立 (v1-v2) 每个应用 220 个

应用服务计划 UI 会显示使用了多少个混合连接以及是由哪些应用使用的。

Screenshot of App Service plan properties.

选择该混合连接可查看详细信息。 可以看到应用视图中显示的所有信息。 还可以查看同一计划中还有其他多少个应用正在使用该混合连接。

可在一个应用服务计划中使用的混合连接终结点数目有限制。 但是,所用的每个混合连接可在该计划中任意数目的应用中使用。 例如,在一个应用服务计划下的 5 个单独应用中共同使用的单个混合连接,仅算作 1 个混合连接。

定价

除了有App 服务计划 SKU 要求外,使用混合连接还有额外的成本。 混合连接使用的每个侦听器都要收费。 侦听器是混合连接管理器。 如果你有由两个混合连接管理器支持的五个混合连接,则将有 10 个侦听器。 有关详细信息,请参阅服务总线定价

混合连接管理器

混合连接功能要求在网络中安装一个中继代理用于托管混合连接终结点。 该中继代理称为混合连接管理器 (HCM)。 若要下载 HCM,请在 Azure 门户上的应用中,选择“网络”>“配置混合连接终结点”。

此工具可在 Windows Server 2012 和更高版本上运行。 HCM 作为服务运行,并且在端口 443 上出站连接到 Azure 中继。

安装 HCM 后,可以运行 HybridConnectionManagerUi.exe 来使用该工具的 UI。 此文件位于混合连接管理器的安装目录中。 在 Windows 10 上,也可以在搜索框中搜索“混合连接管理器 UI”即可。

Screenshot of Hybrid Connection Manager.

启动 HCM UI 时,出现的第一个界面是一个表格,其中列出了为此 HCM 实例配置的所有混合连接。 如果想要进行任何更改,请先在 Azure 中完成身份验证。

要将一个或多个混合连接添加到 HCM,请执行以下操作:

  1. 启动 HCM UI。

  2. 选择“添加新的混合连接”。 Screenshot of Configure New Hybrid Connections.

  3. 使用 Azure 帐户登录,以使你的订阅可以使用混合连接。 在此步骤之外,HCM 不会继续使用 Azure 帐户。

  4. 选择订阅。

  5. 选择 HCM 要中继的混合连接。 Screenshot of Hybrid Connections.

  6. 选择“保存”。

现在,可以看到已添加的混合连接。 还可以选择配置的混合连接查看详细信息。

Screenshot of Hybrid Connection Details.

若要支持配置的混合连接,HCM 需要:

  • 通过端口 443 对 Azure 进行 TCP 访问。
  • 对混合连接终结点进行 TCP 访问。
  • 能够在终结点主机和服务总线命名空间中执行 DNS 查找。 换言之,应可从托管 HCM 的计算机中解析出 Azure 中继连接中的主机名。

注意

Azure 中继的连接性依赖于 Web 套接字。 此功能仅适用于 Windows Server 2012 或更高版本。 因此,低于 Windows Server 2012 的版本将不支持 HCM。

冗余

每个 HCM 可以支持多个混合连接。 此外,多个 HCM 可以支持任一给定的混合连接。 默认行为是在为任一给定终结点配置的 HCM 之间路由流量。 如果希望从网络建立的混合连接具有高可用性,可在单独的计算机上运行多个 HCM。 中继服务用来将流量分配给各个 HCM 的负载分配算法是随机分配。

手动添加混合连接

若要让订阅外部的某人托管给定混合连接的 HCM 实例,可与他(她)共享该混合连接的网关连接字符串。 可以在 Azure 门户的“混合连接”属性中看到网关连接字符串。 要使用该字符串,请在 HCM 中选择“手动输入”,并粘贴网关连接字符串。

Manually add a Hybrid Connection.

升级

我们会定期发布混合连接管理器更新来修复问题或提供改进。 发布升级后,HCM UI 中会显示一个弹出窗口。 应用升级会应用更改并重启 HCM。

以编程方式将混合连接添加到你的应用

Azure CLI 支持混合连接。 提供的命令可在应用和应用服务计划级别上运行。 应用级命令为:

az webapp hybrid-connection

Group
    az webapp hybrid-connection : Methods that list, add and remove hybrid-connections from webapps.
        This command group is in preview. It may be changed/removed in a future release.
Commands:
    add    : Add a hybrid-connection to a webapp.
    list   : List the hybrid-connections on a webapp.
    remove : Remove a hybrid-connection from a webapp.

使用App 服务计划命令可以设置给定混合连接使用的密钥。 每个混合连接上都设置了两个密钥,一个主密钥和一个辅助密钥。 可以选择通过以下命令使用主密钥或辅助密钥。 使用此选项可以切换密钥,以便定期重新生成密钥。

az appservice hybrid-connection --help

Group
    az appservice hybrid-connection : A method that sets the key a hybrid-connection uses.
        This command group is in preview. It may be changed/removed in a future release.
Commands:
    set-key : Set the key that all apps in an appservice plan use to connect to the hybrid-
                connections in that appservice plan.

保护混合连接

任何在基础 Azure 服务总线中继上有足够权限的用户都可以将现有的混合连接添加到应用服务 Web 应用。 这意味着,如果必须阻止其他人重用同一混合连接(例如,当目标资源是没有任何其他安全措施的服务以防止未经授权的访问),则必须锁定对 Azure 服务总线 中继的访问。

Reader有权访问中继的任何人都可以在尝试将其添加到Azure 门户中的 Web 应用时看到混合连接,但是由于缺少检索用于建立中继连接的连接字符串的权限,则无法添加该混合连接。 若要成功添加混合连接,他们必须具有 listKeys 权限 (Microsoft.Relay/namespaces/hybridConnections/authorizationRules/listKeys/action)。 在Contributor中继上包含此权限的角色或任何其他角色允许用户使用混合连接,并将其添加到自己的Web 应用。

管理混合连接

如果需要更改混合连接的终结点主机或端口,请执行以下步骤:

  1. 通过选择连接并选择“混合连接详细信息”窗口左上角的“删除”,从本地计算机上的混合连接管理器中删除混合连接。
  2. 通过导航到应用服务“网络”页中的“混合连接”,断开应用服务中的混合连接。
  3. 导航到需要更新的终结点的中继,然后在左侧导航菜单中的“实体”下选择“混合连接”。
  4. 选择要更新的混合连接,然后在左侧导航菜单中的“设置”下选择“属性”。
  5. 进行更改,然后点击顶部的“保存更改”。
  6. 返回应用服务的“混合连接”设置,并再次添加混合连接。 确保终结点按预期进行更新。 如果在列表中看不到混合连接,请在 5-10 分钟内刷新。
  7. 返回到本地计算机上的混合连接管理器,并再次添加连接。

故障排除

“已连接”状态表示,至少有一个 HCM 配置了该混合连接,且可以访问 Azure。 如果混合连接状态未显示“已连接”,则表示未在任何可访问 Azure 的 HCM 上配置该混合连接。 当 HCM 显示“未连接”时,需要检查以下几点:

  • 你的主机是否在端口 443 上有对 Azure 的出站访问权限? 可以从 HCM 主机使用 PowerShell 命令“Test-NetConnection Destination -P Port”进行测试

  • 你的 HCM 是否可能处于错误状态? 尝试重启“Azure 混合连接管理器服务”本地服务。

  • 是否安装了冲突的软件? 混合连接管理器无法与适用于 Windows Server 的 Biztalk 混合连接管理器或服务总线共存。 安装 HCM 时,应首先删除这些包的任何版本。

  • HCM 主机和 Azure 之间是否有防火墙? 如果是这样,则需要允许出站访问服务总线终结点 URL 为混合连接提供服务的服务总线网关。

    • 可以在混合连接管理器 UI 中找到服务总线终结点 URL。

    Screenshot of Hybrid Connection Service Bus endpoint.

    • 服务总线网关是接受请求到混合连接中并通过 Azure 中继传递的请求的资源。 需要允许列出所有 128 个网关。 网关采用 G#-prod-[stamp]-sb.servicebus.windows.net 的格式,其中“#”是介于 0 和 127 之间的数字,“stamp”是 Azure 数据中心内存在服务总线终结点的实例的名称。
      • 如果可以使用 wild卡,则可以将允许列表“*.servicebus.windows.net”。

      • 如果无法使用野生网关卡,则必须允许列出所有 128 个网关。

        可以在服务总线终结点 URL 上使用“nslookup”找到标记。

        Screenshot of terminal showing where to find the stamp name for the Service Bus.

        在此示例中,模具为“sn3-010”。 若要将服务总线网关列入允许列表,需要以下条目:

        G0-prod-sn3-010-sb.servicebus.windows.net
        G1-prod-sn3-010-sb.servicebus.windows.net
        G2-prod-sn3-010-sb.servicebus.windows.net
        G3-prod-sn3-010-sb.servicebus.windows.net
        ...
        G126-prod-sn3-010-sb.servicebus.windows.net
        G127-prod-sn3-010-sb.servicebus.windows.net

如果状态显示已连接,但应用无法访问终结点,则:

  • 请确保在混合连接ion 中使用 DNS 名称。 如果使用 IP 地址,则所需的客户端 DNS 查找可能不会发生。 如果 Web 应用中运行的客户端不执行 DNS 查找,则混合连接不起作用。
  • 检查混合连接中使用的 DNS 名称是否可以从 HCM 主机解析。 使用“nslookup EndpointDNSname”检查解析结果,其中的 EndpointDNSname 与混合连接定义中使用的内容完全匹配。
  • 使用 PowerShell 命令 Test-Net 测试从 HCM 主机到终结点的访问连接ion EndpointDNSname -P 端口(如果无法从 HCM 主机访问终结点,然后在两个主机之间检查防火墙,包括目标主机上的任何基于主机的防火墙)。
  • 如果在 Linux 上使用App 服务,请确保不要将“localhost”用作终结点主机。 如果尝试创建与本地计算机上资源的连接,请使用计算机名称。

在应用服务中,可以通过高级工具 (Kudu) 控制台调用 tcpping 命令行工具。 此工具可以告知你是否能够访问 TCP 终结点,但不会告知你是否能够访问混合连接终结点。 在控制台中针对混合连接终结点使用此工具时,只能确认混合连接是否使用了“主机:端口”组合。

如果你的终结点有命令行客户端,则可以从应用控制台测试连接。 例如,可以使用 curl 测试对 Web 服务器终结点的访问。