混合连接既是 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,因为无法域加入应用服务辅助角色。
在应用中添加和创建混合连接
若要在 Azure 门户中创建混合连接,请执行以下作:
在 Azure 门户中,选择应用。 选择“设置”“网络”。>
在“混合连接”旁边,选择“未配置”链接。 在此处,可以看到为应用配置的混合连接。
若要添加新的混合连接,请选择“添加混合连接”。 会显示已创建的混合连接的列表。 要将其中的一个或多个混合连接添加到应用,请选择所需的混合连接,然后选择“添加选定的混合连接”。
如果想要创建新的混合连接,请选择“创建新的混合连接”。 指定以下值:
- 混合连接名称。
- 终结点主机名。
- 终结点端口。
- 要使用的服务总线命名空间。
每个混合连接都与服务总线命名空间相关联。 每个服务总线命名空间都在 Azure 区域中。 为避免网络造成的延迟,请使用应用所在区域中的服务总线命名空间。
如果想要从应用中删除混合连接,请右键单击该混合连接,并选择“断开连接”。
将混合连接添加到应用后,选择该混合连接即可查看其详细信息。
在 ARM/Bicep 中创建混合连接
若要使用 ARM/Bicep 模板创建混合连接,请将以下资源添加到现有模板。 必须包括 userMetadata
才能拥有有效的混合连接。 如果未包含该 userMetadata
连接,则混合连接不起作用。 如果在 Azure 门户中创建混合连接,则会自动填充此属性。
该 userMetadata
属性应该是 JSON 数组格式的 [{"key": "endpoint", "value : "host:port"}]
字符串表示形式。 以下 Bicep 模板具有此属性的示例。 有关详细信息,请参阅 Microsoft.Relay 命名空间/hybridConnections。
resource hybridConnection 'Microsoft.Relay/namespaces/hybridConnections@2024-01-01' = {
parent: relayNamespace
name: hybridConnectionName
properties: {
requiresClientAuthorization: true
userMetadata: '[{"key": "endpoint", "value : "<HOST>:<PORT>"}]'
}
}
在 Azure 中继门户中创建混合连接
除了使用应用内部的门户体验以外,还可以在 Azure 中继门户中创建混合连接。 要使混合连接可供应用服务使用,必须:
- 要求客户端授权。
- 提供一个元数据项和命名的终结点,其中包含的值为“host:port”组合。
混合连接和应用服务计划
应用服务混合连接只能在“基本”、“标准”、“高级”和“隔离”定价 SKU 中使用。 消耗计划中的函数应用无法使用混合连接。 定价计划没有相关的限制。
定价计划 | 在计划中可以使用的混合连接数 |
---|---|
基本 | 每个计划 5 个 |
标准 | 每个计划 25 个 |
IsolatedV2 | 每个应用 220 个 |
应用服务计划 UI 会显示使用了多少个混合连接以及是由哪些应用使用的。
若要查看详细信息,请选择混合连接。 可以看到应用视图中显示的所有信息。 还可以查看同一计划中还有其他多少个应用正在使用该混合连接。
可在一个应用服务计划中使用的混合连接终结点数目有限制。 所用的每个混合连接都可在该计划中任意数目的应用中使用。 例如,在一个应用服务计划下的 5 个单独应用中共同使用的单个混合连接,仅算作 1 个混合连接。
定价
除了存在应用服务计划 SKU 要求,使用混合连接还会产生额外的成本。 混合连接使用的每个侦听器都要收费。 侦听器是混合连接管理器。 如果你有 5 个混合连接,它们由 2 个混合连接管理器支持,则总计是 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 服务总线中继的访问。 当目标资源是没有采取任何其他安全措施来防止未经授权的访问的服务时,可能会出现这种情况。
如果有人尝试在 Azure 门户中将混合连接添加到 Web 应用,则对中继具有 Reader
访问权限的人可以看到混合连接。 他们无法添加混合连接,因为他们缺少检索用于建立中继连接的连接字符串的权限。 若要添加混合连接,他们必须具有 listKeys
权限 (Microsoft.Relay/namespaces/hybridConnections/authorizationRules/listKeys/action
)。
Contributor
角色或中继上任何其他包含此权限的角色都可以允许用户使用混合连接并将其添加到自己的 Web 应用。
注意
有关应用服务混合连接和应用服务混合连接管理器的特定问题与支持,请联系hcmsupport@service.microsoft.com。