你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
混合连接既是 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 个 |
高级 (v1-v3) | 每个应用 220 个 |
IsolatedV2 | 每个应用 220 个 |
应用服务计划 UI 会显示混合连接的用量以及由哪些应用使用。
若要查看详细信息,请选择混合连接。 可以看到应用视图中显示的所有信息。 还可以查看同一计划中还有其他多少个应用正在使用该混合连接。
可在一个应用服务计划中使用的混合连接终结点数目有限制。 所用的每个混合连接都可在该计划中任意数目的应用中使用。 例如,在一个应用服务计划下的 5 个单独应用中共同使用的单个混合连接,仅算作 1 个混合连接。
定价
除了存在应用服务计划 SKU 要求,使用混合连接还会产生额外的成本。 混合连接使用的每个侦听器都要收费。 侦听器是混合连接管理器。 如果你有 5 个混合连接,它们由 2 个混合连接管理器支持,则总计是 10 个侦听器。 有关详细信息,请参阅服务总线定价。
混合连接管理器
混合连接功能要求在网络中安装一个中继代理用于托管混合连接终结点。 该中继代理称为混合连接管理器 (HCM)。 若要下载混合连接管理器,请按照客户端的说明进行作。
此工具在 Windows 和 Linux 上运行。 在 Windows 上,混合连接管理器需要 Windows Server 2012 及更高版本。 混合连接管理器作为后台服务运行,并通过端口 443 出站连接到 Azure 中继服务。
安装说明
若要在 Windows 上安装混合连接管理器,请下载 MSI 包,并按照安装说明进行作。
注意
Azure 中继的连接性依赖于 Web 套接字。 此功能仅适用于 Windows Server 2012 或更高版本。 由于此要求,在早于 Windows Server 2012 的系统上不支持混合连接管理器。
若要支持配置的混合连接,混合连接管理器需要:
- 通过端口 443 对 Azure 进行 TCP 访问。
- 对混合连接终结点进行 TCP 访问。
- 能够在终结点主机和服务总线命名空间中执行 DNS 查找。 换句话说,Azure 中继连接中的主机名应可从托管混合连接管理器的计算机解析。
混合连接管理器 GUI 入门
在 Windows 上安装混合连接管理器后,请在搜索框中搜索 混合连接管理器 GUI 。
启动混合连接管理器 GUI 时,首先会看到一个表,其中列出了使用此混合连接管理器实例配置的所有混合连接。
若要将一个或多个混合连接添加到混合连接管理器 GUI,
- 启动混合连接管理器 GUI。
- 选择“+ 新建”。
- 选择“通过 Azure 选择”。
- 使用 Azure 帐户登录,以使你的订阅可以使用混合连接。 除了此步骤之外,混合连接管理器不会继续使用 Azure 帐户。
- 选择订阅。
- 选择您希望由混合连接管理器中继的混合连接。
- 选择 创建。
现在,可以看到已添加的混合连接。
还可以选择配置的混合连接查看详细信息。
混合连接管理器 CLI 入门
在 Windows 上,可以通过搜索和打开 混合连接管理器 CLI 来使用混合连接管理器 CLI。
若要将交互式模式与混合连接管理器 CLI 配合使用,这允许查看 Azure 订阅和混合连接详细信息,需要安装并登录到 Azure CLI。 有关安装说明,请参阅 如何安装 Azure CLI ,并为客户端选择适当的选项。 安装后,运行 az login
并按照提示完成登录。
启动混合连接管理器 CLI 时,可以运行 hcm list
以查看已添加的混合连接。
若要将混合连接添加到混合连接管理器 CLI:
启动混合连接管理器 CLI。
运行
hcm add
并等待 Azure 的身份验证完成。 如果尚未安装并登录到 Azure CLI,则需要首先完成此步骤才能使用交互式模式。 如果不想安装 Azure CLI,请按照说明 手动添加与 CLI 的混合连接。选择订阅。 混合连接管理器检索该订阅中的所有混合连接。 此步骤最多可能需要一分钟才能完成。
选择您希望由混合连接管理器中继的混合连接。
运行 hcm list
以查看添加的混合连接。
还可以使用命令显示特定混合连接 hcm show
的详细信息。
冗余
每个混合连接管理器都可以支持多个混合连接。 多个混合连接管理器可以支持任何混合连接。 默认行为是通过配置的混合连接管理器为任何特定终结点路由流量。 如果希望从网络实现混合连接上的高可用性,请在单独的计算机上运行多个混合连接管理器。 中继服务用于将流量分配到混合连接管理器的负载分布算法是随机分配。
手动添加混合连接
若要使订阅外部有人能够托管给定混合连接的混合连接管理器实例,请与他们共享混合连接的网关连接字符串。 可以在 Azure 门户中应用服务的混合连接属性中看到网关连接字符串。 网关连接字符串采用格式 Endpoint=sb://[NAMESPACE].servicebus.windows.net/;SharedAccessKeyName=defaultListener;SharedAccessKey=[KEY];EntityPath=[HYBRID-CONNECTION-NAME]
。
若要在混合连接管理器 GUI 中使用该字符串,请选择“ + 新建 ”并使用 连接字符串 并粘贴网关连接字符串。
若要在混合连接管理器 CLI 中使用该字符串,请使用连接字符串或混合连接资源详细信息运行 hcm add
。
升级
混合连接管理器会定期更新,以解决问题或提供改进。 发布升级后,启动时混合连接管理器 GUI 中会显示一个对话框。 若要使用混合连接管理器 CLI 检查可用的升级,请运行 hcm version
。 必须使用 MSI 安装程序完成升级,无法使用 CLI 完成升级。 应用升级会应用更改并重启混合连接管理器。
以编程方式向应用添加混合连接
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 应用。
管理混合连接
如果需要更改混合连接的终结点主机或端口,请执行以下步骤:
- 在混合连接管理器中,选择连接以查看其详细信息窗口。 然后选择“删除”。
- 在 Azure 门户中,选择应用。 选择“设置”“网络”。>
- 在“混合连接”旁边,选择“已配置”链接。
- 在“混合连接”中,右键单击连接并选择“断开连接”。
- 导航到需要更新的终结点的中继。 在导航菜单的“实体”下,选择“实体”下的“混合连接”。
- 选择混合连接。 在导航菜单的“设置”下方,选择“属性”。
- 进行所需更改,然后选择“保存更改”。
- 返回应用服务的“混合连接”设置,并再次添加混合连接。 确保终结点按预期进行更新。 如果在列表中看不到混合连接,请在 5-10 分钟内刷新。
- 返回到本地计算机上的混合连接管理器,并再次添加连接。
疑难解答
Connected 的状态意味着至少有一个混合连接管理器配置了该混合连接,并且能够访问 Azure。 如果混合连接的状态没有显示 “已连接”,则未在任何有权访问 Azure 的混合连接管理器上配置混合连接。 当混合连接管理器显示 “未连接”时,需要检查以下几点:
你的主机是否在端口 443 上有对 Azure 的出站访问权限? 可以使用 PowerShell 命令
Test-NetConnection Destination -P Port
从混合连接管理器主机进行测试。混合连接管理器是否可能处于错误状态? 尝试重启“Azure 混合连接管理器服务”本地服务。
是否安装了冲突的软件? 混合连接管理器无法与 Biztalk 混合连接管理器或适用于 Windows Server 的服务总线共存。 安装混合连接管理器时,应首先删除这些包的任何版本。
混合连接管理器主机与 Azure 之间是否有防火墙? 如果无法添加,则需要允许出站访问服务总线终结点 URL 和服务混合连接的服务总线网关。
可以在混合连接管理器 GUI 中找到服务总线终结点 URL。
还可以在混合连接管理器 CLI 中找到服务总线终结点 URL。
服务总线网关是接受连接到混合连接的请求,并通过 Azure 中继传递的资源。 需要将所有网关加入允许列表。 网关采用以下格式:
G#-prod-[stamp]-sb.servicebus.windows.net
和GV#-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 名称是否可以从混合连接管理器主机解析。 使用“nslookup EndpointDNSname”检查解析结果,其中的 EndpointDNSname 与混合连接定义中使用的内容完全匹配。
- 使用 PowerShell 命令
Test-NetConnection EndpointDNSname -P Port
测试从混合连接管理器主机到终结点的访问。 如果无法从混合连接管理器主机访问终结点,请检查两个主机之间的防火墙,包括目标主机上的任何基于主机的防火墙。 - 如果使用 Linux 上的应用服务,请确保没有使用
localhost
作为终结点主机。 如果尝试创建与本地计算机上资源的连接,请使用计算机名称。
在应用服务中,可以通过高级工具 (Kudu) 控制台调用 tcpping 命令行工具。 此工具可以告知你是否能够访问 TCP 终结点,但不会告知你是否能够访问混合连接终结点。 在控制台中针对混合连接终结点使用此工具时,只能确认混合连接是否使用了“主机:端口”组合。
如果你的终结点有命令行客户端,则可以从应用控制台测试连接。 例如,可以使用 curl 测试对 Web 服务器终结点的访问。
注意
有关应用服务混合连接和应用服务混合连接管理器的特定问题与支持,请联系hcmsupport@service.microsoft.com。