Azure 应用服务混合连接

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

在应用服务中,混合连接可用于访问任何网络中的应用程序资源,这些网络可以通过端口 443 对 Azure 进行出站调用。 利用混合连接可以从应用访问 TCP 终结点。 它并非访问应用的新方式。 在应用服务中使用时,每个混合连接与单个 TCP 主机和端口组合相关联。

对任何操作系统而言,只要它是 TCP 终结点,应用便可借助该功能访问其中的资源。 混合连接功能不知道、也不关心应用程序协议或者要访问的内容是什么。 它只提供网络访问。

工作原理

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

混合连接高级别流示意图。

如果应用发出了与配置的混合连接终结点匹配的 DNS 请求,则会通过混合连接重定向出站 TCP 流量。

注意

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

应用服务混合连接的优势

混合连接功能优势众多,包括:

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

无法通过混合连接实现的操作

无法通过混合连接实现的操作包括:

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

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

若要创建混合连接,请执行以下操作:

  1. Azure 门户中,选择应用。 选择“设置”“网络”。>

  2. 在“混合连接”旁边,选择“未配置”链接。 此处显示了为应用配置的混合连接。

    可在其中添加和管理连接的混合连接列表的屏幕截图。

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

    可在其中添加连接的“混合连接”页的屏幕截图。

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

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

“创建新的混合连接”对话框屏幕截图。

每个混合连接都与服务总线命名空间相关联。 每个服务总线命名空间都在 Azure 区域中。 为避免网络造成的延迟,请使用应用所在区域中的服务总线命名空间。

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

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

“混合连接详细信息”屏幕截图。

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

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

  • 要求客户端授权。
  • 提供一个元数据项和命名的终结点,其中包含的值为“host:port”组合。

混合连接和应用服务计划

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

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

应用服务计划 UI 会显示混合连接的用量以及由哪些应用使用。

应用服务计划属性的屏幕截图。

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

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

定价

除了存在应用服务计划 SKU 要求,使用混合连接还会产生额外的成本。 混合连接使用的每个侦听器都要收费。 侦听器是混合连接管理器。 如果你有 5 个混合连接,它们由 2 个混合连接管理器支持,则总计是 10 个侦听器。 有关详细信息,请参阅服务总线定价

混合连接管理器

注意

混合连接管理器的新版本处于公共预览阶段,并且支持 Windows 和 Linux。 要下载新版本并了解更多相关信息,请参阅宣布推出新的混合连接管理器的公共预览版

混合连接功能要求在网络中安装一个中继代理用于托管混合连接终结点。 该中继代理称为混合连接管理器 (HCM)。 若要下载 HCM,请执行以下操作:

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

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

混合连接管理器的屏幕截图。

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

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

  1. 启动 HCM UI。

  2. 选择“添加新的混合连接”

    配置新混合连接的屏幕截图。

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

  4. 选择订阅。

  5. 选择 HCM 要中继的混合连接。

    混合连接管理器的屏幕截图。

  6. 选择“保存”。

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

混合连接详细信息的屏幕截图。

若要支持配置的混合连接,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 中选择“手动输入”,并粘贴网关连接字符串

手动添加混合连接的对话框的屏幕截图。

升级

混合连接管理器会定期更新,以解决问题或提供改进。 发布升级时,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.

利用应用服务计划命令,你可以设置给定混合连接使用的密钥。 每个混合连接上都设置了两个密钥,一个主密钥和一个辅助密钥。 可以选择通过以下命令使用主密钥或辅助密钥。 利用此选项,你可以在需要定期再生成密钥时切换密钥。

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 服务总线中继的访问。 当目标资源是没有采取任何其他安全措施来防止未经授权的访问的服务时,可能会出现这种情况。

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

管理混合连接

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

  1. 在混合连接管理器中,选择连接以查看其详细信息窗口。 然后选择“删除”
  2. Azure 门户中,选择应用。 选择“设置”“网络”。>
  3. 在“混合连接”旁边,选择“已配置”链接。
  4. 在“混合连接”中,右键单击连接并选择“断开连接”。
  5. 导航到需要更新的终结点的中继。 在导航菜单的“实体”下,选择“实体”下的“混合连接”。
  6. 选择混合连接。 在导航菜单的“设置”下方,选择“属性”。
  7. 进行所需更改,然后选择“保存更改”
  8. 返回应用服务的“混合连接”设置,并再次添加混合连接。 确保终结点按预期进行更新。 如果在列表中看不到混合连接,请在 5-10 分钟内刷新。
  9. 返回到本地计算机上的混合连接管理器,并再次添加连接。

疑难解答

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

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

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

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

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

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

      混合连接服务总线终结点的屏幕截图。

    • 服务总线网关是接受连接到混合连接的请求,并通过 Azure 中继传递的资源。 需要将所有网关加入允许列表。 网关采用以下格式: G#-prod-[stamp]-sb.servicebus.windows.netGV#-prod-[stamp]-sb.servicebus.windows.net。 井号键 # 代表一个介于 0 和 127 之间的数字,stamp 是服务总线终结点所在的 Azure 数据中心内的实例的名称。

    • 如果可以使用通配符,则可以将 *.servicebus.windows.net 加入允许列表。

    • 如果无法使用通配符,则必须将全部 256 个网关加入允许列表。

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

      终端的屏幕截图,其中显示了在何处查找服务总线的标记名称。

      在该示例中,标记为 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 GV0-prod-sn3-010-sb.servicebus.windows.net
      GV1-prod-sn3-010-sb.servicebus.windows.net
      GV2-prod-sn3-010-sb.servicebus.windows.net
      GV3-prod-sn3-010-sb.servicebus.windows.net
      ...GV126-prod-sn3-010-sb.servicebus.windows.net
      GV127-prod-sn3-010-sb.servicebus.windows.net

如果状态显示“已连接”,但应用无法访问终结点,请执行以下操作:

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

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

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