你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:Azure SQL 托管实例
本文介绍 Azure SQL 托管实例的连接体系结构,以及组件如何定向 SQL 托管实例的通信流量。
概述
在 SQL 托管实例中,实例放置在 Azure 虚拟网络和专用于 SQL 托管实例的子网中。 此部署提供:
- 安全的虚拟网络本地 (VNet-local) IP 地址。
- 将本地网络连接到 SQL 托管实例的能力。
- 将 SQL 托管实例连接到链接服务器或其他本地数据存储的功能。
- 将 SQL 托管实例连接到 Azure 资源的能力。
高级连接体系结构
SQL 托管实例由一组专用隔离虚拟机上托管的服务组件组成,这些虚拟机由类似的配置属性组合在一起,并已加入 虚拟群集。 某些服务组件部署在客户的虚拟网络子网中,而其他服务在Microsoft管理的安全网络环境中运行。
客户应用程序可连接到 SQL 托管实例,还可查询和更新虚拟网络、对等虚拟网络或通过 VPN 或 Azure ExpressRoute 连接的网络中的数据库。
下图显示了连接到 SQL 托管实例的实体。 它还显示需要与 SQL 托管实例通信的资源。 关系图底部的通信过程表示作为数据源连接到 SQL 托管实例的客户应用程序和工具。
SQL 托管实例是单租户平台即服务产品/服务,在数据平面和控制平面这两个平面中运行。
数据平面部署在客户的子网内以实现兼容性、连接性和网络隔离。 数据平面依赖于 Azure 服务,例如 Azure 存储、Microsoft Entra ID(以前为 Azure Active Directory)用于身份验证和遥测收集。 你将看到源自包含 SQL 托管实例的子网的流量流向这些服务。
控制平面通过自动化代理承载部署、管理和核心服务维护功能。 这些代理对运行服务的计算资源具有独占访问权限。 无法使用 SSH 或远程桌面协议访问这些主机。 所有控制平面通信都使用证书进行加密和签名。 为了检查通信方的可信度,SQL 托管实例会通过证书吊销列表不断验证这些证书。
通信概述
应用程序可以通过三种类型的终结点连接到 SQL 托管实例:VNet 本地终结点、公共终结点,以及 专用终结点。 这些终结点表现出适用于不同方案的不同属性和行为。
VNet-local 终结点
VNet-local 终结点是连接到 SQL 托管实例的默认方法。
VNet 本地终结点域名采用以下<mi_name>.<dns_zone>.database.windows.net形式。 此域名解析为该子网地址范围中的 IP 地址。 在所有标准连接方案中,使用 VNet 本地终结点连接到 SQL 托管实例。 VNet 本地终结点接受端口 1433 上的连接。
VNet 本地终结点支持 代理和重定向连接类型。
连接到 VNet 本地终结点时,请始终使用其域名,并允许整个子网范围内的所需端口上的入站流量,因为基础 IP 地址偶尔会更改。
若要查找实例的 VNet 本地终结点域名,请按以下步骤进行操作:
- Azure 门户:在 “概述 ”窗格的 “概要” 部分中, 主机 值显示 VNet 本地终结点域名。
-
PowerShell:
Get-AzSqlInstance -ResourceGroupName <resource-group> -Name <mi-name>将 VNet 本地终结点域名 显示为fullyQualifiedDomainName属性。 -
Azure CLI:
az sql mi show -g <resource-group> -n <mi-name>将 VNet 本地终结点域名 显示为fullyQualifiedDomainName属性。
为了提高安全性,请指定加密连接,并且不信任证书。 有关详细信息,请参阅安全性概述。
公共终结点
公共终结点是 <mi_name>.public.<dns_zone>.database.windows.net 形式的域名。 此域名解析为可从 Internet 访问的公共 IP 地址。 公共终结点适用于需要通过公共 Internet 访问 SQL 托管实例的方案。 例如,当对等互连或专用终结点不可用时,通过来自其他虚拟网络的连接访问它。 公共终结点仅承载客户端流量,不能用于两个实例之间的数据复制,例如 故障转移组 或 托管实例链接。 公共终结点接受端口 3342 上的连接。
无论连接类型设置如何,公共终结点始终使用 代理连接类型 。
实例的公共终结点域名等于其 VNet 本地终结点名称,并在主机名和域的其余部分之间插入标签public: <mi-name>.public.<dns-zone>.database.windows.net
连接到公共终结点时,应始终使用终结点的域名,并在整个子网范围内允许端口3342的入站流量,因为基础 IP 地址可能会偶尔更改。
若要了解如何设置公共终结点,请参阅为 Azure SQL 托管实例配置公共终结点。
专用终结点
专用终结点是另一个虚拟网络中的可选固定 IP 地址,用于将流量传送到 SQL 托管实例。 一个 Azure SQL 托管实例可以在多个虚拟网络中具有多个专用终结点。 专用终结点仅承载客户端流量,不能用于两个实例之间的数据复制,例如故障转移组或 托管实例链接。 专用终结点接受端口 1433 上的连接。
无论连接类型设置如何,专用终结点始终使用 代理连接类型 。
实例的专用终结点域名与其 VNet 本地域名相等,除非终结点配置方式不同。 当专用终结点和 VNet 本地终结点位于同一虚拟网络中时,会出现这种情况。 有关详细信息,请参阅 为专用终结点设置域名解析。
连接到专用终结点时,请始终使用域名,因为不支持通过其 IP 地址连接到 Azure SQL 托管实例。 但是,专用终结点的 IP 地址不会更改。
若要详细了解专用终结点以及如何对其进行配置,请参阅适用于 Azure SQL 托管实例的 Azure 专用链接。
虚拟群集连接体系结构
下图显示了 虚拟群集体系结构的概念布局:
VNet 本地终结点的域名解析为内部负载均衡器的专用 IP 地址。 尽管此域名在公共域名系统 (DNS) 区域中注册且可公开解析,但其 IP 地址属于子网的地址范围,默认情况下只能从其虚拟网络内部访问。
负载均衡器将流量定向到 SQL 托管实例网关。 由于多个 SQL 托管实例可以在同一群集中运行,因此网关使用连接字符串中所示的 SQL 托管实例主机名将流量重定向到正确的 SQL 引擎服务。
dns-zone 的值在创建群集时自动生成。 如果新创建的群集托管辅助 SQL 托管实例,则会将其区域 ID 与主群集共享。
网络要求
Azure SQL 托管实例要求以特定方式配置委托子网的各个方面,可以使用服务辅助子网配置来实现此目的。 除服务要求的配置以外,用户完全控制其子网网络配置,例如:
- 允许或阻止某些或所有端口上的流量。
- 将条目添加到路由表,以通过虚拟网络设备或网关路由网络流量。
- 配置自定义 DNS 解析。
- 设置网络对等互连或 VPN。
若要满足 Microsoft Online Services 服务级别协议中的 符合网络配置 条件,部署 SQL 托管实例的虚拟网络和子网必须满足以下要求:
- 专用子网:SQL 托管实例使用的子网只能委托给 SQL 托管实例服务。 该子网不能是网关子网,只能在子网中部署 SQL 托管实例资源。
- 子网委派:必须将 SQL 托管实例子网委派给 资源提供程序。
- 网络安全组:网络安全组必须与 SQL 托管实例子网相关联。 可以使用网络安全组通过筛选端口 1433 上的入站流量来控制对 SQL 托管实例数据终结点的访问。 服务会自动预配规则,并根据需要保持更新,使管理流量能够不间断地流动。
- 路由表:路由表必须与 SQL 托管实例子网相关联。 可以将条目添加到路由表,例如,通过虚拟网络网关将流量路由到本地,或添加默认 0.0.0.0/0 路由,引导所有流量通过防火墙等虚拟网络设备。 Azure SQL 托管实例会自动预配和管理路由表中所需的条目。
- 足够的 IP 地址:SQL 托管实例子网必须至少有 32 个 IP 地址。 有关详细信息,请参阅确定 SQL 托管实例的子网大小。 配置 SQL 托管实例以满足 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 名称。
-
所需的 DNS 记录:SQL 管理实例依赖于正确解析某些域名。 这些域名在其虚拟网络中不得被通过 Azure DNS 专用区域 或自定义 DNS 服务器覆盖。 否则,SQL 托管实例将无法部署或可能不可用。 不能覆盖以下域:
windows.net、database.windows.net、core.windows.net、blob.core.windows.net、table.core.windows.net、management.core.windows.net、monitoring.core.windows.net、queue.core.windows.net、graph.windows.net、login.microsoftonline.com、login.windows.net、servicebus.windows.net和vault.azure.net。 你仍然可以在 SQL 托管实例的虚拟网络中创建专用终结点,甚至可以将其连接到上述域中的资源。 专用终结点使用一种 DNS 机制,该机制不要求本地 DNS 服务器对于整个区域拥有权威。 - AzurePlatformDNS 标记:使用 AzurePlatformDNS 服务标记阻止平台 DNS 解析会导致 SQL 托管实例不可用。 尽管 SQL 托管实例支持客户定义的 DNS 进行引擎内的 DNS 解析,但依赖于 Azure DNS 进行平台操作。
服务辅助子网配置
为了提高服务安全性、易管理性和可用性,SQL 托管实例使用 Azure 虚拟网络基础结构上的服务辅助子网配置和网络意向策略来配置网络、关联的组件和路由表,从而确保满足 SQL 托管实例的最低要求。
自动配置的网络安全和路由表规则对客户可见并使用以下前缀之一标注:
-
Microsoft.Sql-managedInstances_UseOnly_mi-(用于强制性规则和路由) -
Microsoft.Sql-managedInstances_UseOnly_mi-optional-(用于可选规则和路由)
有关更多详细信息,请查看 服务辅助子网配置。
有关连接体系结构和管理流量的详细信息,请参阅大致连接体系结构。
网络约束
虚拟网络功能和流量的以下约束有效:
- 专用子网:目前不支持在专用子网中部署 SQL 托管实例(禁用 默认出站访问 )。
- VNet 加密:目前不支持在启用了 Azure 虚拟网络加密 的虚拟网络中部署和作 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 托管实例的管理操作失败。
- NAT 网关:目前不支持使用 Azure 虚拟网络 NAT 控制与特定公共 IP 地址的出站连接。
- Azure 虚拟网络的 IPv6:将 SQL 托管实例部署到双堆栈 IPv4/IPv6 虚拟网络预计会失败。 如果将包含 IPv6 地址前缀的网络安全组或路由表与用户定义的路由 (UDR) 关联到 SQL 托管实例子网,会导致 SQL 托管实例不可用。 此外,将 IPv6 地址前缀添加到已与 SQL 托管实例子网关联的网络安全组或用户定义路由 (UDR) 会导致 SQL 托管实例不可用。 将 SQL 托管实例部署到使用网络安全组和 UDR 且已具有 IPv6 前缀的子网预计会失败。
- 出站连接中强制实施 TLS 1.2:从 2020 年 1 月开始,Microsoft 对所有 Azure 服务中的服务内流量强制实施了 TLS 1.2。 对于 SQL 托管实例,这导致在用于复制的出站连接上和到 SQL Server 的链接服务器连接上强制实施了 TLS 1.2。 如果对 SQL 托管实例使用低于 2016 版的 SQL Server,请确保应用特定于 TLS 1.2 的更新。
- 内部回退到 Azure DNS:SQL 管理实例依赖于其虚拟网络中 DNS 解析的正常运行。 如果将 SQL 托管实例的虚拟网络配置为使用 自定义 DNS 服务器 ,并且向自定义 DNS 服务器发出的 DNS 请求在特定间隔(1-2 秒)内无法完成,则 SQL 托管实例将针对该虚拟网络中的 Azure DNS 重复请求。
相关内容
- 有关概述,请参阅什么是 Azure SQL 托管实例?。
- 若要了解更多信息,请参阅以下文章:
- 虚拟群集体系结构。
- 服务辅助子网配置。
- 设置新 Azure 虚拟网络或现有 Azure 虚拟网络,从而可以在其中部署 SQL 托管实例。
- 在要部署 SQL 托管实例的位置计算子网的大小。
- 了解如何创建 SQL 托管实例: