运行 Azure Database for PostgreSQL - 灵活服务器时,可以选择两个主要网络选项。选项是私有访问(VNet 集成)和公共访问(允许的 IP 地址)。在创建服务器时,您必须选择一个选项。
- 专用访问(VNet 集成)– 您可以将灵活的服务器部署到 Azure 虚拟网络中。 Azure 虚拟网络提供专用且安全的网络通信。虚拟网络中的资源可以通过专用 IP 地址进行通信。
- 公共访问(允许的 IP 地址)——您的灵活服务器通过公共端点访问。公共端点是一个可公开解析的 DNS 地址。短语“允许的 IP 地址”是指您选择允许通过防火墙规则访问您的服务器的 IP 范围。
在这篇博客文章中,我们将深入研究私有访问(VNET 集成)网络选项,并讨论在这种情况下成功进行动态名称解析 (DNS) 所需的常见模式和操作。

具有 VNET 集成网络选项的专用访问
在 VNET 中部署灵活服务器时,灵活服务器必须部署在已委派给 PostgreSQL 灵活服务器的子网中。 只要子网大小支持,您就可以将多个灵活服务器实例部署到同一个委派子网中。 这在详细描述网络概述 - Azure Database for PostgreSQL - 灵活服务器 | 微软文档。 没有公开灵活服务器的公共端点。 这要求您预先计划好您的客户如何在没有任何问题的情况下解决您的灵活服务器实例。
不建议使用其 IP 地址连接到灵活服务器,因为它是动态的并且可以更改。 推荐的最佳做法是在连接到灵活服务器时始终使用完全限定域名 (FQDN) 作为主机名。 FQDN 可以在 Azure 门户、灵活服务器、概览面板中找到,如下图 1 所示。

图 1:Azure Database for PostgreSQL 上的 FQDN - 灵活的服务器概述 Azure 门户刀片。
在使用具有 VNET 集成的私有访问时,需要注意的网络基础架构的一个重要部分是域名服务 (DNS)。
让我们首先提醒您什么是 DNS 及其在网络堆栈中的位置。域名服务器或 DNS 非常类似于包含所有公共域及其相应 IP 地址的电话簿。 DNS 是一种将域名转换为 IP 地址的互联网服务。每当您请求 google.com 或任何其他网站时,您的请求首先会发送到 DNS 服务器。然后,DNS 服务器将域名翻译成相应的 IP 地址并将请求转发给网站服务器,最后将网站加载到您的浏览器中。
资源记录是定义特定资源的单行文本描述。它是 DNS 系统的基本单元。与您的域相关的资源记录存储在区域文件中。 DNS 区域是域名系统的子集,通常是单个域。区域文件包含该子集中的 IP 地址和名称之间的映射,其形式为指向域不同方面的单个资源记录。
现在让我们讨论在选择私有网络选项时 Azure Database for PostgreSQL – 灵活服务器如何与 DNS 集成。 Azure 私有 DNS 区域集成允许你在当前 VNET 或与私有 DNS 区域链接的任何区域内对等 VNET 中解析私有 DNS。如果使用 Azure 门户或 Azure CLI 创建灵活的服务器,则可以提供之前在相同或不同订阅中创建的私有 DNS 区域名称,该名称必须以 postgres.database.azure.com 结尾,否则默认私有 DNS区域会在您的订阅中自动创建。如果您使用 Azure API、Azure 资源管理器模板(ARM 模板)或 Terraform,请创建以 postgres.database.azure.com 结尾的私有 DNS 区域,并在配置具有私有访问权限的灵活服务器时使用它们。
下面,我将介绍一些常见的网络拓扑以及如何配置 DNS 以能够解析 Azure Database for PostgreSQL - 灵活服务器专用终结点。
在同一个 VNET 内访问
这是灵活服务器网络的私有访问\VNet 集成选项提供的最常见和最简单的模式。它由私有 Azure VNET 和为 Azure Database for PostgreSQL 灵活服务器委派的子网组成。
由于 Azure 自动创建系统路由并将路由分配给虚拟网络中的每个子网,因此所有客户端都与灵活服务器连接。由于 Azure DNS 用于提供名称解析,因此所有客户端都可以使用专用 DNS 区域解析灵活服务器 FQDN。无需额外配置。
在下图中\图 2:
- 灵活服务器部署在委派的子网中。
- 客户端可以部署在同一 VNET 内的不同子网中。
- Azure 私有 DNS 区域用于名称解析

图 2:Azure Database for PostgreSQL – 同一 VNET 中的灵活服务器访问
使用对等互连从另一个 VNET 访问。
此模式是先前模式的扩展,用于根据分段要求将应用程序分组到单独的虚拟网络中。
在下图中\图 3:
- 灵活服务器部署在 VNET1 的委派子网中。
- VNET1 和 VNET2 是对等的。
- 客户端部署在 VNET2 的子网中。

图 3:Azure Database for PostgreSQL – 来自对等 VNET 的灵活服务器访问
由于两个虚拟网络都是对等客户端,因此客户端可以通过 IP 直接与您的灵活服务器实例连接。 但是,您会注意到在这种模式下,DNS 名称解析不起作用。

图 4:使用 Test-NetConnection Azure PowerShell cmdlet 测试 DNS 名称解析。
原因是默认情况下 DNS 名称解析的范围是虚拟网络。 这意味着 VNET2 中的任何客户端都无法解析 VNET1 中的灵活服务器 FQDN。
为了解决此问题,您必须确保 VNET2 中的客户端可以访问灵活服务器专用 DNS 区域。 这可以通过向灵活服务器实例的私有 DNS 区域添加虚拟网络链接来实现。 步骤是:
-
在 Azure 门户中导航到私有 DNS 区域并找到灵活服务器实例的私有 DNS 区域。 默认情况下,这是
.private.postgres.database.azure.com,如下图 5 所示:

图 5:门户中 Azure Private DNS Zones 刀片中的 Private DNS Zone -
打开此区域并导航到虚拟网络链接。
-
单击添加并输入链接名称并选择 VNET2,如下图 6 所示。 可以不选中自动注册,然后单击确定。

图 6:将虚拟网络链接添加到 Azure 门户中的私有 DNS 区域。
一旦创建了虚拟网络链接,您就可以从 VNET2 中的任何客户端解析灵活服务器实例。

图 7:使用 Test-NetConnection Azure PowerShell cmdlet 成功测试 DNS 名称解析。
注意:如果您在区域 A 中拥有客户端,在区域 B 中拥有灵活服务器,那么您需要在两个区域之间建立一个全局虚拟网络对等互连。 您将按照与上述相同的步骤确保 DNS 解析正常工作。
使用 Hub 和 Spoke 网络模型中的自定义 DNS 服务器进行访问。
在这种模式中,集线器充当连接到许多辐条虚拟网络的中心点。 集线器还可用作本地的网络的连接点。 辐条虚拟网络与集线器对等,可用于隔离工作负载。 使用中心辐射型配置的好处包括节省成本、克服订阅限制和工作负载隔离。 在企业中,自定义 DNS 服务器通常部署在连接到本地 DNS 服务器的 Hub VNET 中。

图 8:显示通过 Hub 和 Spoke 网络中的自定义 DNS 服务器进行访问的网络图。
在图 8 所示的上图中:
- 灵活服务器部署在 Spoke-VNET1 的委派子网中
- Spoke-VNET1 和 Spoke-VNET2 通过 Hub-VNET 连接。
- Azure 防火墙负责路由。
- 客户端部署在 Spoke-VNET2 的子网中。
- Spoke-VNET1 和 Spoke-VNET2 配置了部署在 Hub-VNET 中的客户 DNS 服务器。
由于两个分支虚拟网络都通过 Hub 虚拟网络连接,因此客户端可以直接与您的灵活服务器实例连接。但是,您会注意到在这种模式下,DNS 名称解析不起作用。
为了解决此问题,您必须执行以下步骤:
-
对于 Hub VNET 中的自定义 DNS 服务器,为 DNS 域 postgres.database.azure.com 域添加条件转发器。此条件转发器必须指向 Azure DNS IP 地址:168.63.129.16。如下图9所示

图 9:在自定义 DNS 服务器中设置条件转发器 IP 地址。 -
作为条件转发器的替代方案,你还可以将服务器级转发器配置到 Azure DNS。

图 10:在 Azure DNS 中设置服务器级转发器 -
在 Hub-VNET 的专用 DNS 区域中添加虚拟网络链接。 这在模式 2 中进行了描述。
-
如果您还有必须连接到灵活服务器 FQDN 的本地客户端,那么您将需要本地 DNS 服务器中的条件转发器,指向 Azure 中自定义 DNS 服务器的 IP 地址。
我们希望这篇博客文章对您有所帮助,并且始终对您计划如何使用灵活服务器部署选项来推动业务和应用程序的创新感兴趣。 可以在以下文档中找到有关上述主题的其他信息:
- Azure Database for PostgreSQL – 灵活的服务器网络文档
- Azure 中的中心辐射型网络拓扑
- Azure 私有 DNS 文档
我们总是渴望得到您的反馈,因此请通过电子邮件联系 Ask Azure DB for PostgreSQL。
原文标题:DNS configuration patterns for Azure Database for PostgreSQL - Flexible Server
原文作者:Gennady Kostinsky
原文地址:https://techcommunity.microsoft.com/t5/azure-database-for-postgresql/dns-configuration-patterns-for-azure-database-for-postgresql/ba-p/2560287




