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

适用于:Azure SQL 托管实例

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

概述

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

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

高级连接体系结构

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

Diagram that shows the high-level connectivity architecture for Azure SQL Managed Instance before November 2022.

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

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

Diagram that shows entities in the connectivity architecture for SQL Managed Instance before November 2022.

SQL 托管实例是单租户平台即服务 (PaaS) 产品/服务。 它的计算和网络元素部署在客户的子网内。 SQL 托管实例通常通过其 VNet-local 终结点进行访问。 SQL 托管实例依赖于 Azure 服务,例如 Azure 存储、Microsoft Entra ID、Azure Key Vault、Azure 事件中心和遥测收集服务。 源自包含 SQL 托管实例的子网的流量可能会流向这些服务。

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

管理终结点

为了促进控制平面与部署在客户子网内的组件之间进行通信,托管实例需要使用管理终结点。 这意味着虚拟网络基础结构的元素可能会使实例失败并变得不可用,从而损害管理流量。 管理和部署服务连接到 SQL 托管实例中映射到外部负载均衡器的管理终结点。 只有在仅由 SQL 托管实例的管理组件使用的预定义端口上接收到流量时,才会将流量路由到节点。 节点上的内置防火墙设置为只允许来自 Microsoft IP 范围的流量。 证书将对管理组件与管理平面之间的所有通信进行相互身份验证。

注意

发往 SQL 托管实例所在区域中的 Azure 服务的流量经过优化。 由于流量已经过优化,因此,流量不会由网络地址转换 (NAT) 发送到管理终结点的公共 IP 地址。 如果需要使用基于 IP 的防火墙规则(往往用于存储),服务必须与 SQL 托管实例位于不同的区域中。

Azure SQL 托管实例强制入站安全规则要求管理端口 9000、9003、1438、1440 和 1452 从保护 SQL 托管实例的网络安全组 (NSG) 上的任何源中开放。 虽然这些端口在网络安全组级别处于开放状态,但它们由内置防火墙在网络级别进行保护。

管理终结点在网络级别受到内置防火墙的保护。 在应用程序级别,管理终结点受到证书相互验证的保护。 与备份和审核日志一样,在 SQL 托管实例内开始连接时,流量似乎从管理终结点的公共 IP 地址开始。

通信概述

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

Diagram that shows the scope of visibility for VNet-local, public, and private endpoints to an Azure SQL Managed Instance.

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 专用链接

虚拟群集连接体系结构

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

Diagram that shows the virtual cluster connectivity architecture for Azure SQL Managed Instance before November 2022.

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

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

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

服务辅助子网配置

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

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

网络要求

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

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

为确保入站管理流量流,需要下表中的规则:

名称 端口 协议 目标 操作
管理 9000、9003、1438、1440、1452 TCP SqlManagement MI SUBNET 允许
9000、9003 TCP CorpnetSaw MI SUBNET 允许
9000、9003 TCP CorpnetPublic MI SUBNET 允许
mi_subnet 任意 任意 MI SUBNET MI SUBNET 允许
health_probe 任意 任意 AzureLoadBalancer MI SUBNET 允许

为确保出站管理流量流,需要下表中的规则:

名称 端口 协议 目标 操作
管理 443、12000 TCP MI SUBNET AzureCloud 允许
mi_subnet 任意 任意 MI SUBNET MI SUBNET 允许

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

需要下表中的路由来确保管理流量直接路由到目标:

名称 地址前缀 下一个跃点 2
subnet-to-vnetlocal MI SUBNET 1 虚拟网络
mi-azurecloud-REGION-internet AzureCloud.REGION Internet
mi-azurecloud-REGION_PAIR-internet AzureCloud.REGION_PAIR Internet
mi-azuremonitor-internet AzureMonitor Internet
mi-corpnetpublic-internet CorpNetPublic Internet
mi-corpnetsaw-internet CorpNetSaw Internet
mi-eventhub-REGION-internet EventHub.REGION Internet
mi-eventhub-REGION_PAIR-internet EventHub.REGION_PAIR Internet
mi-sqlmanagement-internet SqlManagement Internet
mi-storage-internet 存储 Internet
mi-storage-REGION-internet Storage.REGION Internet
mi-storage-REGION_PAIR-internet Storage.REGION_PAIR Internet
mi-azureactivedirectory-internet AzureActiveDirectory Internet

网络约束

出站连接中强制实施 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 服务预留的名称的 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。 将 SQL 托管实例部署到具有关联的 Azure DNS 专用区域(其名称保留用于 Microsoft 服务)的虚拟网络将失败。 如果将使用预留名称的 Azure DNS 专用区域与包含托管实例的虚拟网络相关联,会导致 SQL 托管实例不可用。 有关专用链接配置的信息,请参阅 Azure 专用终结点 DNS 配置

后续步骤