你当前正在访问 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 托管实例由托管在一组专用的独立虚拟机上的服务组件组成,这些虚拟机按相似的配置属性分组在一起并加入虚拟群集。 某些服务组件部署在客户的虚拟网络子网内,而其他服务组件在 Microsoft 管理的安全网络环境中运行。

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

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

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

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

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

数据平面部署在客户的子网内以实现兼容性、连接性和网络隔离。 数据平面依赖于 Azure 服务,例如 Azure 存储、用于身份验证的 Microsoft Entra ID(以前称为 Azure Active Directory)以及遥测收集服务。 你将看到源自包含 SQL 托管实例的子网的流量流向这些服务。

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

通信概述

应用程序可以通过三种类型的终结点连接到 SQL 托管实例。 这些终结点提供各种方案,并表现出不同的网络属性和行为。

显示 Azure SQL 托管实例的 VNet 本地终结点、公共终结点和专用终结点的可见性范围的示意图。

VNet-local 终结点

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

VNet 本地终结点支持重定向连接类型

连接到 VNet 本地终结点时,请始终使用它的域名,因为基础 IP 地址偶尔可能会发生变化。

公共终结点

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

连接到公共终结点时,始终使用其域名作为基础 IP 地址偶尔可能会更改。

公共终结点始终以代理连接类型运行。

若要了解如何设置公共终结点,请参阅为 Azure SQL 托管实例配置公共终结点

专用终结点

专用终结点是另一个虚拟网络中的可选固定 IP 地址,用于将流量传送到 SQL 托管实例。 一个 Azure SQL 托管实例可以在多个虚拟网络中具有多个专用终结点。 专用终结点仅允许 TDS 流量到达端口 1433 上的 SQL 托管实例,不能用于集成方案(例如故障转移组、托管实例链接和其他类似技术)。

连接到专用终结点时,请始终使用域名,因为不支持通过其 IP 地址连接到 Azure SQL 托管实例。

专用终结点始终以代理连接类型运行。

若要详细了解专用终结点以及如何对其进行配置,请参阅适用于 Azure SQL 托管实例的 Azure 专用链接

虚拟群集连接体系结构

本部分详细介绍了 SQL 托管实例的虚拟群集连接体系结构。 以下关系图演示了虚拟群集的概念布局:

VNet 本地终结点的域名解析为内部负载均衡器的专用 IP 地址。 尽管此域名在公共域名系统 (DNS) 区域中注册且可公开解析,但其 IP 地址属于子网的地址范围,默认情况下只能从其虚拟网络内部访问。

负载均衡器将流量定向到 SQL 托管实例网关。 由于多个托管实例可在同一群集中运行,因此网关使用连接字符串中看到的 SQL 托管实例主机名,将流量重定向到正确的 SQL 引擎服务。

dns-zone 的值在创建群集时自动生成。 如果新创建的群集托管辅助托管实例,它会将其区域 ID 与主群集共享。

服务辅助子网配置

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

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

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

重要

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

网络要求

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

  • 专用子网:SQL 托管实例使用的子网只能委托给 SQL 托管实例服务。 该子网不能是网关子网,只能在子网中部署 SQL 托管实例资源。
  • 子网委派:必须将 SQL 托管实例子网委派给 Microsoft.Sql/managedInstances 资源提供程序。
  • 网络安全组:网络安全组必须与 SQL 托管实例子网相关联。 如果为重定向连接配置了 SQL 托管实例,可以通过筛选端口 1433 以及端口 11000-11999 上的流量,使用网络安全组来控制对 SQL 托管实例的数据终结点的访问。 服务会自动预配规则,并根据需要保持更新,使管理流量能够不间断地流动。
  • 路由表:路由表必须与 SQL 托管实例子网相关联。 可以将条目添加到路由表,例如,通过虚拟网络网关将流量路由到本地,或添加默认 0.0.0.0/0 路由,引导所有流量通过防火墙等虚拟网络设备。 Azure SQL 托管实例会自动预配和管理路由表中所需的条目
  • 足够的 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 记录。 使用 Microsoft Entra 身份验证等功能可能需要解析更多完全限定的域名 (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 托管实例当前不支持以下虚拟网络功能:

  • 端口 25 上数据库邮件到外部 SMTP 中继:通过端口 25 向外部电子邮件服务发送数据库邮件仅适用于 Microsoft Azure 中的某些订阅类型。 其他订阅类型的实例应使用不同的端口(如 587)来联系外部 SMTP 中继。 否则,实例可能无法传递数据库邮件。 有关详细信息,请参阅排查 Azure 中的出站 SMTP 连接问题
  • Microsoft 对等互连:如果在与 SQL 托管实例所在的虚拟网络直接或暂时对等互连的 ExpressRoute 线路上启用 Microsoft 对等互连,会影响虚拟网络内的 SQL 托管实例组件与它依赖的服务之间的流量流。 这会导致可用性问题。 向已启用 Microsoft 对等互连的虚拟网络部署 SQL 托管实例预计会失败。
  • 虚拟网络对等互连 - 全局:跨 Azure 区域的虚拟网络对等互连连接不适用于放置在 2020 年 9 月 9 日之前创建的子网中的 SQL 托管实例。
  • 虚拟网络对等互连 - 配置:在包含具有 SQL 托管实例的子网的虚拟网络之间建立虚拟网络对等互连时,此类子网必须使用不同的路由表和网络安全组 (NSG)。 在参与虚拟网络对等互连的两个或更多子网中重用路由表和 NSG 将导致使用这些路由表或 NSG 的所有子网中的连接问题,并导致 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 配置

后续步骤