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,因为无法域加入应用服务辅助角色。

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

若要创建混合连接,请转到 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 个混合连接。

定价

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

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

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 服务总线中继的访问。

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