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

适用于:Azure SQL 托管实例

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

概述

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

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

高级连接体系结构

SQL 托管实例由托管在一组专用的独立虚拟机上的服务组件组成,这些虚拟机按相似的配置属性分组在一起并加入虚拟群集。 某些服务组件部署在客户的虚拟网络子网中,而其他服务在 Azure 管理的安全网络环境中运行。

图示显示 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.chinacloudapi.cn 格式;因此,“VNet-local”也称为虚拟网络的本地终结点。 VNet 本地终结点可在所有标准连接方案中用于连接 SQL 托管实例。

VNet 本地终结点同时支持代理和重定向连接类型

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

公共终结点

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

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

无论连接类型设置如何,公共终结点始终都会使用代理连接类型

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

专用终结点

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

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

无论连接类型设置如何,公共终结点始终都会使用代理连接类型

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

虚拟群集连接体系结构

以下关系图演示了虚拟群集体系结构的概念布局:

显示 Azure SQL 托管实例的虚拟群集连接体系结构的关系图。

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

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

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

网络要求

Azure SQL 托管实例要求以特定方式配置委托子网的各个方面,可以使用服务辅助子网配置来实现此目的。 除服务要求的配置以外,用户完全控制其子网网络配置,例如:

  • 允许或阻止某些或所有端口上的流量
  • 将条目添加到路由表,以通过虚拟网络设备或网关路由流量
  • 配置自定义 DNS 解析,或
  • 设置对等互连或 VPN

在其中部署 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 名称

服务辅助子网配置

为了提高服务安全性、易管理性和可用性,SQL 托管实例使用 Azure 虚拟网络基础结构上的服务辅助子网配置和网络意向策略来配置网络、关联的组件和路由表,从而确保满足 SQL 托管实例的最低要求。

自动配置的网络安全和路由表规则对客户可见并使用以下前缀之一标注:

  • Microsoft.Sql-managedInstances_UseOnly_mi-(用于强制性规则和路由)
  • Microsoft.Sql-managedInstances_UseOnly_mi-optional-(用于可选规则和路由)

有关更多详细信息,请参阅服务辅助子网配置

有关连接体系结构和管理流量的详细信息,请参阅大致连接体系结构

网络约束

  • 出站连接中强制实施 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 托管实例。
  • 虚拟网络对等互连 - 配置:在包含具有 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 服务的 DNS 记录:以下域名会保留下来,在承载托管实例的虚拟网络中不得替代 Azure DNS 中定义的域名解析:chinacloudapi.cndatabase.chinacloudapi.cncore.chinacloudapi.cnblob.core.chinacloudapi.cntable.core.chinacloudapi.cnmanagement.core.chinacloudapi.cnmonitoring.core.chinacloudapi.cnqueue.core.chinacloudapi.cngraph.chinacloudapi.cnlogin.partner.microsoftonline.cnlogin.chinacloudapi.cnservicebus.chinacloudapi.cnvault.azure.cn。 通过 Azure DNS 专用区域或自定义 DNS 服务器将 SQL 托管实例部署到其中一个或多个此类域名被替代的虚拟网络将失败。 在包含托管实例的虚拟网络中替代这些域的解析会导致该托管实例不可用。 有关如何在包含托管实例的虚拟网络中配置专用链接 DNS 记录的信息,请参阅 Azure 专用终结点 DNS 配置