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