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

Azure SQL 托管实例的连接体系结构

适用于: Azure SQL 托管实例

本文介绍 Azure SQL 托管实例中的连接体系结构,描述组件如何将通信流量定向到托管实例。

概述

在 SQL 托管实例中,实例位于 Azure 虚拟网络内,同时也位于托管实例专用的子网内。 此部署提供:

  • 安全的虚拟网络本地 (VNet-local) IP 地址。
  • 将本地网络连接到 SQL 托管实例的能力。
  • 将 SQL 托管实例连接到链接服务器或其他本地数据存储的功能。
  • 将 SQL 托管实例连接到 Azure 资源的能力。

注意

2022 年 11 月功能波次对 SQL 托管实例的默认连接体系结构进行了一些更改。 本文介绍了当前体系结构,以及尚未加入功能波次的实例的体系结构。 有关详细信息,请参阅 2022 年 11 月功能波次

2022 年 11 月功能波次

2022 年 11 月功能波次对 SQL 托管实例的连接体系结构进行了以下更改:

  • 移除了管理终结点。
  • 简化了强制网络安全组规则(移除了一个强制规则)。
  • 修订了强制网络安全组规则,不再包括端口 443 上到 AzureCloud 的出站。
  • 简化了路由表(将强制路由数量从 13 减少到了 5)。

通信概述

下图显示了连接到 SQL 托管实例的实体。 它还显示了需要与托管实例通信的资源。 关系图底部的通信过程表示作为数据源连接到 SQL 托管实例的客户应用程序和工具。

图示显示 2022 年 11 月之后的 Azure SQL 托管实例的连接体系结构中的实体。

SQL 托管实例是单租户平台即服务产品/服务,在数据平面和控制平面这两个平面中运行。

数据平面部署在客户的子网内以实现兼容性、连接性和网络隔离。 数据平面通常通过其 VNet-local 终结点进行访问。 数据平面依赖于 Azure 服务,例如 Azure 存储、用于身份验证的 Azure Active Directory (Azure AD) 和遥测收集服务。 你将看到源自包含 SQL 托管实例的子网的流量流向这些服务。

控制平面通过自动化代理承载部署、管理和核心服务维护功能。 这些代理对运行服务的计算资源具有独占访问权限。 不能使用 ssh 或远程桌面协议来访问这些主机。 所有控制平面通信都使用证书进行加密和签名。 为了检查通信方的可信度,SQL 托管实例会通过证书吊销列表不断验证这些证书。

高级连接体系结构

大致来说,SQL 托管实例是一组服务组件,托管在一组加入虚拟群集的专用独立虚拟机上。 一些服务组件部署在客户的虚拟网络子网内。 而其他服务在 Microsoft 管理的安全网络环境中运行。

一个虚拟群集可以承载多个托管实例。 群集会根据需要自动扩展或收缩,以适应新实例和已移除的实例。

客户应用程序可连接到 SQL 托管实例,还可查询和更新虚拟网络、对等虚拟网络或通过 VPN 或 Azure ExpressRoute 连接的网络中的数据库。

图示显示 2022 年 11 月之后的 Azure SQL 托管实例的大致连接体系结构。

为了便于与客户应用程序进行连接,SQL 托管实例提供两种类型的终结点:VNet-local 终结点和公共终结点。

VNet-local 终结点

VNet-local 终结点是连接到 SQL 托管实例的默认方式。 VNet-local 终结点是一个域名,采用 <mi_name>.<dns_zone>.database.windows.net 格式,解析为子网地址池中的 IP 地址。 此终结点是虚拟网络的本地终结点。 可以使用 VNet-local 终结点在所有标准连接方案中连接托管实例。

公共终结点

公共终结点是一个可选域名,采用 <mi_name>.public.<dns_zone>.database.windows.net 格式,解析为可从 Internet 访问的公共 IP 地址。 此终结点仅允许 TDS 流量到达 SQL 托管实例,不能用于集成方案,例如故障转移组、SQL 托管实例链接和类似技术。

虚拟群集连接体系结构

我们进一步了解 SQL 托管实例的连接体系结构。 以下关系图演示了虚拟群集的概念布局:

图示显示 2022 年 11 月之后的 Azure SQL 托管实例的虚拟群集连接体系结构。

客户端使用 <mi_name>.<dns_zone>.database.windows.net 格式的主机名连接到 SQL 托管实例。 尽管主机名在公用域名系统 (DNS) 区域中注册且可公开解析,但它仍解析为专用 IP 地址。 zone-id 的值在创建群集时自动生成。 如果新创建的群集托管辅助托管实例,它会将其区域 ID 与主群集共享。 有关详细信息,请参阅使用自动故障转移组可以实现多个数据库的透明、协调式故障转移

此专用 IP 地址属于 SQL 托管实例的内部负载均衡器。 该负载均衡器将流量定向到 SQL 托管实例网关。 由于多个托管实例可在同一群集中运行,因此网关使用 SQL 托管实例主机名来将流量重新定向到正确的 SQL 引擎服务。

服务辅助子网配置

为了提高服务安全性、可管理性和可用性,SQL 托管实例对 Azure 虚拟网络基础结构的某些元素应用网络意向策略。 该策略会配置子网、关联的网络安全组和路由表,确保满足 SQL 托管实例的最低要求。 此平台机制以透明方式向用户传达网络要求。 该策略的主要目的是防止网络配置不当,并确保正常的 SQL 托管实例操作和服务级别协议承诺。 删除某个托管实例时,会一并删除网络意向策略。

服务辅助子网配置以虚拟网络子网委派功能为基础,可提供自动网络配置管理和启用服务终结点。

可以使用服务终结点对保存备份和审核日志的存储帐户配置虚拟网络防火墙规则。 即使启用了服务终结点,也鼓励客户使用 Azure 专用链接来访问他们的存储帐户。 专用链接比服务终结点提供更多的隔离性。

重要

由于控制平面配置的特殊性,服务辅助子网配置将无法在国家云中启用服务终结点。

网络要求

在其中部署 SQL 托管实例的子网必须具有以下特征:

  • 专用子网:SQL 托管实例使用的子网只能委托给 SQL 托管实例服务。 该子网不能是网关子网,只能在子网中部署 SQL 托管实例资源。
  • 子网委派:必须将 SQL 托管实例子网委派给 Microsoft.Sql/managedInstances 资源提供程序。
  • 网络安全组:网络安全组必须与 SQL 托管实例子网相关联。 如果为重定向连接配置了 SQL 托管实例,可以通过筛选端口 1433 以及端口 11000-11999 上的流量,使用网络安全组来控制对 SQL 托管实例的数据终结点的访问。 服务会自动预配规则,并根据需要保持更新,使管理流量能够不间断地流动。
  • 路由表:路由表必须与 SQL 托管实例子网相关联。 可以向该路由表添加项,用以通过虚拟网络网关或虚拟网络设备来路由以本地专用 IP 地址范围为目标的流量。 服务会自动预配,并根据需要保持更新,使管理流量能够不间断地流动。
  • 足够的 IP 地址:SQL 托管实例子网必须至少有 32 个 IP 地址。 有关详细信息,请参阅确定 SQL 托管实例的子网大小。 根据 SQL 托管实例的网络要求配置托管实例后,可将其部署在现有网络中。 否则,请创建新的网络和子网
  • Azure 策略允许:如果使用 Azure Policy 来阻止在包括 SQL 托管实例子网/虚拟网络的范围内创建或修改资源,则策略不得阻止 SQL 托管实例管理其内部资源。 需要在策略拒绝效果中排除以下资源才能实现正常操作:
    • 类型为 Microsoft.Network/serviceEndpointPolicies 的资源,名称以 \_e41f87a2\_ 开头
    • Microsoft.Network/networkIntentPolicies 类型的所有资源
    • Microsoft.Network/virtualNetworks/subnets/contextualServiceEndpointPolicies 类型的所有资源
  • 虚拟网络中的锁:专用子网的虚拟网络、其父资源组或订阅中的有时可能会干扰 SQL 托管实例的管理和维护操作。 在使用资源锁时,需特别注意。
  • 复制流量:两个托管实例之间的自动故障转移组的复制流量应该是直接的,而不是流经中心网络。
  • 自定义 DNS 服务器:如果虚拟网络配置为使用自定义 DNS 服务器,则 DNS 服务器必须能够解析公共 DNS 记录。 使用 Azure AD 身份验证等功能可能需要解析更多完全限定的域名 (FQDN)。 有关详细信息,请参阅解析 Azure SQL 托管实例中的专用 DNS 名称

具有服务辅助子网配置的强制性安全规则

为确保入站管理流量流,需要下表中的规则。 这些规则由网络意向策略强制实施,不需要由客户部署。 有关连接体系结构和管理流量的详细信息,请参阅大致连接体系结构

名称 端口 协议 目标 操作
healthprobe-in 任意 任意 AzureLoadBalancer subnet Allow
internal-in 任意 任意 subnet subnet Allow

为确保出站管理流量流,需要下表中的规则。 有关连接体系结构和管理流量的详细信息,请参阅大致连接体系结构

名称 端口 协议 目标 操作
AAD-out 443 TCP subnet AzureActiveDirectory 允许
OneDsCollector-out 443 TCP subnet OneDsCollector Allow
internal-out 任意 任意 subnet subnet Allow
StorageP-out 443 任意 subnet Storage.primaryRegion Allow
StorageS-out 443 任意 subnet Storage.secondaryRegion Allow

具有服务辅助子网配置的强制路由

需要下表中的路由来确保管理流量直接路由到目标。 这些路由由网络意向策略强制实施,不需要由客户部署。 有关连接体系结构和管理流量的详细信息,请参阅大致连接体系结构

名称 地址前缀 下一跃点
AzureActiveDirectory AzureActiveDirectory Internet*
OneDsCollector OneDsCollector Internet*
Storage.primaryRegion Storage.primaryRegion Internet*
Storage.secondaryRegion Storage.secondaryRegion Internet*
subnet-to-vnetlocal subnet 虚拟网络

注意

*“下一个跃点”列中的 Internet 值指示网关将流量路由到虚拟网络外部。 但是,如果目标地址用于某个 Azure 服务,Azure 会将流量通过 Azure 网络直接路由到该服务,而不是从 Azure 云外部路由。 Azure 服务之间的流量不跨越 Internet,不管虚拟网络存在于哪个 Azure 区域,也不管 Azure 服务的实例部署到哪个 Azure 区域。 有关详细信息,请参阅 Azure 虚拟网络流量路由

你也可以向该路由表添加项,用以通过虚拟网络网关或虚拟网络设备来路由以本地专用 IP 范围为目标的流量。

网络约束

出站连接中强制实施 TLS 1.2:从 2020 年 1 月开始,Microsoft 对所有 Azure 服务中的服务内流量强制实施了 TLS 1.2。 对于 SQL 托管实例,这导致在用于复制的出站连接上和到 SQL Server 的链接服务器连接上强制实施了 TLS 1.2。 如果对 SQL 托管实例使用低于 2016 版的 SQL Server,请确保应用特定于 TLS 1.2 的更新

SQL 托管实例当前不支持以下虚拟网络功能:

  • Microsoft 对等互连:如果在与 SQL 托管实例所在的虚拟网络直接或暂时对等互连的 ExpressRoute 线路上启用 Microsoft 对等互连,会影响虚拟网络内的 SQL 托管实例组件与它依赖的服务之间的流量流。 这会导致可用性问题。 向已启用 Microsoft 对等互连的虚拟网络部署 SQL 托管实例预计会失败。
  • 全局虚拟网络对等互联:跨 Azure 区域的虚拟网络对等互连连接不适用于在 2020 年 9 月 9 日之前创建的子网中放置的 SQL 托管实例。
  • AzurePlatformDNS:使用 AzurePlatformDNS 服务标记阻止平台 DNS 解析会导致 SQL 托管实例不可用。 尽管 SQL 托管实例支持将客户定义的 DNS 用于引擎内的 DNS 解析,但平台操作依赖于平台 DNS。
  • NAT 网关:使用 Azure 虚拟网络 NAT 控制具有特定公共 IP 地址的出站连接会导致 SQL 托管实例不可用。 SQL 托管实例服务当前仅限于使用基本负载均衡器,该均衡器不提供入站和出站流与 Azure 虚拟网络 NAT 共存的功能。
  • Azure 虚拟网络的 IPv6:将 SQL 托管实例部署到双堆栈 IPv4/IPv6 虚拟网络预计会失败。 如果将包含 IPv6 地址前缀的网络安全组或路由表与用户定义的路由 (UDR) 关联到 SQL 托管实例子网,会导致 SQL 托管实例不可用。 此外,如果将 IPv6 地址前缀添加到已与托管实例子网关联的网络安全组或 UDR,会导致 SQL 托管实例不可用。 将 SQL 托管实例部署到使用网络安全组和 UDR 且已具有 IPv6 前缀的子网预计会失败。
  • 使用为 Microsoft 服务预留的名称的 Azure DNS 专用区域:以下域名是预留的名称:windows.netdatabase.windows.netcore.windows.netblob.core.windows.nettable.core.windows.netmanagement.core.windows.netmonitoring.core.windows.netqueue.core.windows.netgraph.windows.netlogin.microsoftonline.comlogin.windows.netservicebus.windows.netvault.azure.net。 将 SQL 托管实例部署到具有关联的 Azure DNS 专用区域(其名称保留用于 Microsoft 服务)的虚拟网络将失败。 如果将使用预留名称的 Azure DNS 专用区域与包含托管实例的虚拟网络相关联,会导致 SQL 托管实例不可用。 有关专用链接配置的信息,请参阅 Azure 专用终结点 DNS 配置

后续步骤