具有私有访问权限(虚拟网络集成)的 Azure Database for PostgreSQL 网络

本文介绍 Azure Database for PostgreSQL 灵活服务器实例的连接和网络概念。

创建 Azure Database for PostgreSQL 灵活服务器实例时,必须选择以下网络选项之一:

  • 专用访问(虚拟网络集成)
  • 公共访问(允许的 IP 地址)和专用终结点

本文档介绍了专用访问(虚拟网络集成)网络选项。

专用访问(虚拟网络集成)

可以使用虚拟网络注入将 Azure Database for PostgreSQL 灵活服务器实例部署到 Azure 虚拟网络。 Azure 虚拟网络提供专用的安全网络通信。 虚拟网络中的资源可以通过在此网络中分配的专用 IP 地址进行通信。

如果需要以下功能,请选择此网络选项:

  • 使用专用 IP 地址从同一虚拟网络中的 Azure 资源连接到 Azure Database for PostgreSQL 灵活服务器实例。
  • 使用 VPN 或 Azure ExpressRoute 从非 Azure 资源连接到 Azure Database for PostgreSQL 灵活服务器实例。
  • 确保 Azure Database for PostgreSQL 灵活服务器实例没有可通过 Internet 访问的公共终结点。

此图显示了虚拟网络之间的对等互连的工作原理,其中一个虚拟网络包括 Azure Database for PostgreSQL 灵活服务器实例。

在上图中:

  • Azure Database for PostgreSQL 灵活的服务器实例部署在 VNet-1 虚拟网络的子网 10.0.1.0/24。
  • 在同一虚拟网络中的不同子网上部署的应用程序可以直接访问 Azure Database for PostgreSQL 灵活服务器实例。
  • 部署在不同的虚拟网络(VNet-2)上的应用程序无权直接访问 Azure Database for PostgreSQL 灵活服务器实例。 必须先 对专用 DNS 区域执行虚拟网络对等连接,然后才能访问灵活服务器实例。

虚拟网络概念

Azure 虚拟网络包含配置为供你使用的专用 IP 地址空间。 虚拟网络必须与 Azure Database for PostgreSQL 灵活服务器实例位于同一 Azure 区域中。 若要了解有关虚拟网络的详细信息,请参阅 Azure 虚拟网络概述

下面是您在使用将资源与 Azure Database for PostgreSQL Flexible Server 实例集成到虚拟网络的过程中需要熟悉的一些概念:

  • 委派子网:虚拟网络包含子网(子网)。 可以通过子网将虚拟网络分成较小的地址空间。 Azure 资源被部署到虚拟网络中的特定子网中。

    集成到虚拟网络中的 Azure Database for PostgreSQL 灵活服务器实例必须位于 委托的子网中。 也就是说,只有 Azure Database for PostgreSQL 灵活服务器实例才能使用该子网。 不能在委派子网中使用其他 Azure 资源类型。 通过将子网的委派属性设置为 Microsoft.DBforPostgreSQL/flexibleServers 来对其进行委派。

    可以为子网指定的最小 CIDR 范围是 /28,这将提供 16 个 IP 地址。 任何网络或子网中的第一个和最后一个地址都不能分配给任何单个主机。 Azure 保留了五个 IP 供 Azure 网络内部使用,其中包括两个无法分配给主机的 IP,如上所述。 这为 /28 CIDR 范围留下了 11 个可用的 IP 地址。 具有高可用性功能的单个 Azure Database for PostgreSQL 灵活服务器实例使用四个地址。

    对于复制和 Microsoft Entra 连接,确保路由表不会影响流量。 常见模式是通过 Azure 防火墙或自定义本地网络筛选设备路由所有出站流量。

    如果子网具有与规则关联的路由表,用于将所有流量路由到虚拟设备:

    • 添加一个目标服务标记为 AzureActiveDirectory 且下一个跃点为 Internet 的规则。
    • 添加一条规则,配置目标 IP 范围与 Azure Database for PostgreSQL 灵活服务器实例子网范围相同,并指定下一跃点 Virtual Network

    重要

    名称 AzureFirewallSubnetAzureFirewallManagementSubnetAzureBastionSubnetGatewaySubnet 都保留在 Azure 中。 请勿将其中任一名称用作子网名称。 此外,创建跨区域副本时,虚拟网络的地址空间不能相互重叠。

  • 网络安全组 (NSG):通过 NSG 中的安全规则,可以筛选可流入和流出虚拟网络子网和网络接口的流量类型。 有关详细信息,请参阅 NSG 概述部分。

    应用程序安全组 (ASG) 通过将 NSG 用于平面网络,能够轻松控制第 4 层安全性。 可以快速执行以下操作:

    • 将虚拟机加入 ASG,或者从 ASG 中删除虚拟机。
    • 动态地将规则应用于这些虚拟机,或者从这些虚拟机中删除规则。

    有关详细信息,请参阅 ASG 概述

    目前,我们不支持 ASG 是 Azure Database for PostgreSQL 灵活服务器实例规则的一部分的 NSG。 目前建议在 NSG 中使用基于 IP 的源或目标筛选

    Azure Database for PostgreSQL 服务器的高可用性和其他功能要求能够在 Azure 虚拟网络子网中将流量发送到 目标端口 5432 ,其中部署了 Azure Database for PostgreSQL 灵活服务器实例,并部署到 Azure 存储进行日志存档。 如果您创建 NSG 以拒绝流量进出于部署子网中的 Azure Database for PostgreSQL 灵活服务器实例,请确保在子网中允许流量流向目标端口 5432,并且也允许流量去往存储。使用 服务标记 Storage 作为目标以实现对存储的访问。

    可以通过将 Azure 区域添加到标签(如 )来进一步china-east.storage此异常规则。 此外,如果您选择使用 Microsoft Entra 身份验证来对您的 Azure Database for PostgreSQL 灵活服务器实例的登录进行身份验证,则需通过使用 Microsoft Entra 服务标记,允许至 Microsoft Entra ID 的出站流量。

    在跨 Azure 区域设置只读副本时,Azure Database for PostgreSQL 灵活服务器实例需要能够在主服务器和副本服务器之间以及与Azure 存储进行通信,以便能够将流量发送到或接收来自两个区域的目标端口 5432的流量。 存储所需的目标 TCP 端口为 443。

  • 专用 DNS 区域集成:使用 Azure 专用 DNS 区域集成,可以解析当前虚拟网络中或链接专用 DNS 区域的任何区域内对等互连虚拟网络中的专用 DNS。

使用专用 DNS 区域

Azure 专用 DNS 为虚拟网络提供可靠且安全的 DNS 服务。 Azure 专用 DNS 可管理并解析虚拟网络中的域名,使你无需配置自定义 DNS 解决方案。

对 Azure 虚拟网络使用专用网络访问时,必须提供专用 DNS 区域信息才能进行 DNS 解析。 若要使用专用网络访问创建新的 Azure Database for PostgreSQL 灵活服务器实例,需要在配置具有专用访问权限的 Azure Database for PostgreSQL 灵活服务器实例时使用专用 DNS 区域。

重要

在其他订阅中使用专用 DNS 区域时,该订阅 还必须 注册 Microsoft.DBforPostgreSQL 资源提供程序,否则部署 Azure Database for PostgreSQL 灵活服务器实例不会完成。

若要通过 API、Azure 资源管理器模板(ARM 模板)、Bicep 或 Terraform 使用专用网络访问创建新的 Azure Database for PostgreSQL 灵活服务器实例,请创建专用 DNS 区域。 然后在配置具有专用访问权限的 Azure Database for PostgreSQL 灵活服务器实例时使用它们。 有关详细信息,请参阅 Azure 的 REST API 规范

如果使用 Azure 门户Azure CLI 创建 Azure Database for PostgreSQL 灵活服务器实例,则可以提供以前在同一订阅或不同订阅中创建的专用 DNS 区域名称,或者在订阅中自动创建默认的专用 DNS 区域。

如果使用 Azure API、ARM 模板、Bicep 或 Terraform,请创建以 .postgres.database.chinacloudapi.cn 结尾的专用 DNS 区域。 在配置具有专用访问权限的 Azure Database for PostgreSQL 灵活服务器实例时,请使用这些区域。 例如,使用窗体 [name1].[name2].postgres.database.chinacloudapi.cn[name].postgres.database.chinacloudapi.cn。 如果选择使用格式 [name].postgres.database.chinacloudapi.cn,则名称 不能 是您用于 Azure Database for PostgreSQL 灵活服务器的名称,否则会在预配期间收到错误消息。 有关详细信息,请参阅专用 DNS 区域概述

使用 Azure 门户、API、Azure CLI 或 ARM 模板时,还可以将专用 DNS 区域从创建 Azure Database for PostgreSQL 灵活服务器实例时提供的 DNS 区域更改为同一订阅或不同订阅存在的另一个专用 DNS 区域。

重要

对于启用了高可用性功能的服务器,当前禁用了将 Azure Database for PostgreSQL 灵活服务器实例创建时提供的专用 DNS 区域更改为另一个专用 DNS 区域的功能。

在 Azure 中创建专用 DNS 区域后,需要将虚拟网络链接到该区域。 然后,托管在链接虚拟网络中的资源便可访问专用 DNS 区域。

重要

我们不再在创建 Azure Database for PostgreSQL 弹性服务器实例时验证专用网络中的虚拟网络链接的存在。 通过门户创建服务器时,客户可以选择通过 Azure 门户中的“将专用 DNS 区域链接到虚拟网络”复选框来创建服务器创建链接

DNS 专用区域对于区域性故障具有韧性,因为其区域数据可在全球范围内获取。 系统会自动在各个区域复制某个专用区域中的资源记录。 Azure 专用 DNS 是可用性区域基础、区域冗余服务。 有关详细信息,请参阅支持可用性区域的 Azure 服务

与自定义 DNS 服务器集成

如果使用自定义 DNS 服务器,则必须使用 DNS 转发器解析 Azure Database for PostgreSQL 灵活服务器实例的 FQDN。 转发器 IP 地址应为 168.63.129.16

自定义 DNS 服务器应位于虚拟网络内,或可通过虚拟网络的 DNS 服务器设置访问。 有关详细信息,请参阅使用您自己的 DNS 服务器的域名解析

专用 DNS 区域和虚拟网络对等互连

专用 DNS 区域设置和虚拟网络对等互连彼此独立。 如果要从同一区域或不同区域的另一个虚拟网络中预配的客户端连接到 Azure Database for PostgreSQL 灵活服务器实例,则必须将专用 DNS 区域与虚拟网络 链接 。 有关详细信息,请参阅链接虚拟网络

注意

只能链接以 postgres.database.chinacloudapi.cn 结尾的专用 DNS 区域名称。 DNS 区域名称不能与 Azure Database for PostgreSQL 灵活服务器实例相同。 否则,名称解析会失败。

若要将服务器名称映射到 DNS 记录,可以使用 Azure PowerShell 或 Bash 运行 nslookup 命令。 将以下示例中 <server_name> 参数的值替换为你服务器的名称:

nslookup -debug <server_name>.postgres.database.chinacloudapi.cn | grep 'canonical name'

使用中心辐射型专用网络设计

中心节点与辐射连接是一种常用的网络模型,用于高效管理常见通信或安全需求。

中心是一个虚拟网络,充当管理外部连接的中心位置。 它还托管多个工作负荷使用的服务。 集线器协调向节点发送和接收的所有通信。 IT 规则或流程(如安全性)可以检查、路由和集中管理流量。 虚拟网络托管工作负载,并通过虚拟网络对等互连连接到中心枢纽。 共享服务托管在其自己的子网中,以便与各个节点共享。 然后,外围子网充当安全设备。

辐射也是 Azure 中的虚拟网络,用于隔离单个工作负荷。 本地总部和 Azure 之间的流量通过 Azure ExpressRoute 或站点到站点 VPN 连接到中心虚拟网络。 从分支到中心的虚拟网络是对等互连的,能够与本地资源通信。 可以在单独的订阅或资源组中实现中心和每个分支。

有三种主要方式能够用于将辐射虚拟网络相互连接:

  • ** 分支网络直接相互连接:在分支虚拟网络之间创建虚拟网络对等连接或 VPN 隧道,以提供直接连接,无需经过中心虚拟网络。
  • 辐射网络通过网络设备通信:每个辐射虚拟网络都与虚拟 WAN 或中心虚拟网络建立对等连接。 设备在分支与分支之间路由流量。 设备可以通过Microsoft(与虚拟 WAN 一样)或你进行管理。
  • 虚拟网络网关附加到集线网络,并利用用户定义的路由:支持分支之间的通信。

显示通过快速中心实现混合连接的基本中心辐射型体系结构的关系图。

使用 Azure 虚拟网络管理器 创建新的(并入已有的)中心辐射型虚拟网络拓扑,以便集中管理连接和安全控制。

与不同区域中的专用网络客户端通信

通常,客户需要连接到客户端的不同 Azure 区域。 更具体地说,此问题通常归结为如何连接两个虚拟网络(其中一个虚拟网络具有 Azure Database for PostgreSQL 灵活服务器实例,另一个虚拟网络具有位于不同区域的应用程序客户端)。

可通过多种方式实现此类连接,包括:

  • 全球虚拟网络互联。 此方法是最常见的方法,因为它是将不同区域中的网络连接在一起的最简单方法。 全局虚拟网络对等互连直接在两个对等互连虚拟网络之间通过 Azure 主干建立连接。 此方法为连接提供最佳网络吞吐量和最低延迟。 虚拟网络互连时,Azure 则会自动处理路由。 这些虚拟网络可以与在 VPN 网关上建立的对等互连虚拟网络中的所有资源通信。
  • 网络到网络连接。 虚拟网络(网络到网络连接)之间的连接实质上是两个 Azure 位置之间的 VPN。 网络到网络连接是在 VPN 网关上建立的。 与全局虚拟网络对等互连相比,您的流量将会增加两个网络跃点。 与该方法相比,还有额外的延迟和较低的带宽。
  • 在中心辐射型体系结构中通过网络设备进行通信。 可以使用网络设备在分支之间转发流量,而不是将分支虚拟网络直接相互连接。 网络设备提供更多的网络服务,例如深度数据包检查和流量分段或监视,但如果它们大小不正确,它们可能会带来延迟和性能瓶颈。

使用专用网络跨 Azure 区域和虚拟网络进行复制

数据库复制是将数据从中央服务器或主服务器复制到多个服务器(称为副本)的过程。 主服务器接受读取和写入操作,但副本则处理只读事务。 主服务器和副本服务器共同构成数据库群集。 数据库复制的目标是确保数据的冗余、一致性、高可用性和可访问性,特别是在高流量、关键任务型应用程序中。

Azure Database for PostgreSQL 提供两种复制方法:物理复制(即流式复制),包括内置的读取副本功能逻辑复制。 这两种方法适用于不同的用例,用户可根据最终目标二选一。

跨 Azure 区域的复制(每个区域中都有单独的 虚拟网络 )要求跨区域虚拟网络边界进行连接,此连接可以通过 虚拟网络对等互连 或通过在中心辐射架构中使用网络设备来实现。

默认情况下,DNS 名称解析的范围限定为虚拟网络。 一个虚拟网络(VNET1)中的任何客户端都无法解析另一个虚拟网络(VNET2)中的 Azure Database for PostgreSQL 灵活服务器实例 FQDN。

若要解决此问题,必须确保 VNET1 中的客户端可以访问 Azure Database for PostgreSQL 灵活服务器实例专用 DNS 区域。 将 虚拟网络链接 添加到 Azure Database for PostgreSQL 灵活服务器实例的专用 DNS 区域。

不受支持的虚拟网络场景

下面是使用通过虚拟网络集成创建的虚拟网络时的一些限制:

  • 将 Azure Database for PostgreSQL 灵活服务器实例部署到虚拟网络和子网后,无法将其移动到另一个虚拟网络或子网。 不能将虚拟网络移动到其他资源组或订阅中。
  • 子网中存在资源后,不能增加子网的大小(地址空间)。
  • 默认情况下,虚拟网络注入的资源无法与专用链接交互。 如果要将 专用链接 用于专用网络,请参阅 具有专用链接的 Azure Database for PostgreSQL 网络

重要

Azure 资源管理器支持作为安全控制的资源锁定功能。 资源锁应用于资源,对所有用户和角色都有效。 有以下两种类型的资源锁:CanNotDeleteReadOnly。 这些锁类型可以应用到专用 DNS 区域或单个记录集。

对专用 DNS 区域或单个记录集应用类型锁可能会干扰 Azure Database for PostgreSQL 灵活服务器实例更新 DNS 记录的能力。 在 DNS 上进行一些重要操作时(例如从主服务器到辅助服务器的高可用性故障转移),它也可能引发问题。 出于这些原因,请确保在将高可用性功能与 Azure Database for PostgreSQL 灵活服务器实例配合使用时 不使用 DNS 专用区域或记录锁。

主机名

无论选择哪种网络选项,我们建议在连接到 Azure Database for PostgreSQL 灵活服务器实例时始终使用 FQDN 作为主机名。 服务器的 IP 地址不能保证保持静态。 使用 FQDN 有助于避免更改连接字符串。

使用 FQDN 作为主机名的示例是 hostname = servername.postgres.database.chinacloudapi.cn。 如果可能,请避免使用 hostname = 10.0.0.4(专用地址)或 hostname = 40.2.45.67(公共地址)。